TM1640与PIC12F629单片机的结合

2019-11-08来源: 51hei关键字:TM1640  PIC12F629  单片机  数码管

TM1640是驱动数码管的专用集成电路,可以直接驱动16位共阴数码管,手册请下载附件。

/*******************************

*本程序直接驱动16位共阴数码管,各数码管分别驱动0、1、2、……E、F。

*/

#include  //PIC12F629


__CONFIG(0x3F84); 


#define clk GPIO0  //时钟信号

#define dio GPIO1   //数据/地址数据

#define uchar unsigned char

#define uint unsigned int

                                                                                                                                                                 //共阴极数码管

const uchar SEGData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};//1-9-F-不输出

//uchar weidata[4];//位变量

//uchar timecnt,keyzh,dpFlag = 0; //控制第二个数码管的dp的显示

//char time, sec;

void init(void); 

void Delay_us(uint); //nus 延时

void tm1640_start(void);//1640开始

void tm1640_stop(void);  //1640停止

void tm1640_wrbyte(uchar); //写一个字节

void tm1640_display(void); //写显示寄存器 并开显示


///=============================================

void main(void)

{


init(); //初始化


while(1)

{

  tm1640_display(); //写寄存器并开显示

}

}


///=======================================

void Delay_us(uint i) //nus 延时

{

  uchar x;              

for(;i>0;i--)

for(x=0;x<3;x++) asm("NOP");

}

///======================================

void tm1640_start(void) //1640开始

{

  clk=1;

   dio=1;

   Delay_us(2);

  dio = 0;

}


void tm1640_stop(void)  //1640停止

{

clk = 0;

  Delay_us(2);

   dio = 0;

    Delay_us(2);

   clk = 1;

  Delay_us(2);

dio = 1;

}

//=========================

void tm1640_wrbyte(uchar oneByte) //写一个字节

{

  uchar i;

  for(i=0;i<8;i++)

  { 

   clk = 0;

   Delay_us(2);

   if(oneByte&0x01) dio = 1; //低位在前

    else dio = 0;

    Delay_us(3);

    oneByte=oneByte>>1;

    clk=1;

    Delay_us(3);

   }

}

//======================

void tm1640_display(void) //写显示寄存器 并开显示

{

uchar i;

tm1640_start();

  tm1640_wrbyte(0x40);// 40H 地址自动加 1 模式,44H 固定地址模式,本程序采用自加 1 模式

   tm1640_stop();

  tm1640_start();

tm1640_wrbyte(0xc0);//设置首地址

for(i=0;i<16;i++)//地址自加,不必每次都写地址。

  {

   tm1640_wrbyte(SEGData[i]); //送数据

  }

  tm1640_stop();

   tm1640_start();

   tm1640_wrbyte(0x8a);//开显示 ,亮度:14/16

  tm1640_stop();

}

///================================================

void init(void)  //初始化程序

{

OPTION=0x80; //禁止弱上拉

WPU= 0x00; //关闭弱上拉

  INTCON = 0X00; //开总中断和T1中断

   TRISIO=0x08; //IO 口做输出

  //IOCB = 0X00; //电平变化触发中断;全关

    CMCON=0x07; // 设置全部为普通数字IO口 关闭所有比较器

   GPIO=0x08; //端口0 输出低电平

}


关键字:TM1640  PIC12F629  单片机  数码管 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479374.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:PIC16F690单片机初学者C语音编程参考
下一篇:PIC单片机车载仪表带CAN总线通讯源代码

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32 TM1640芯片驱动程序
;TM1640.h" /********  TM1640 GPIO 配置 *************************/void TM1640_GPIO_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( SCLK_GPIO_CLK | DIN_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      GPIO_InitStructure.GPIO_Speed
发表于 2019-11-09
STM32 TM1640芯片驱动程序
STM8S TM1650芯片控制程序
以下为.h文件: #ifndef __TM1650_I2C_H#define __TM1650_I2C_H#include "stm8s.h"#include "stm8s_gpio.h"#include "tim1.h"#include "usart2.h"#include <iostm8s103f3.h>#include <intrinsics.h>  /**********************************TM1650芯片控制20路灯函数PB7为SCL口PB6为SDA口
发表于 2019-11-08
STM8S TM1650芯片控制程序
TM1650模块单片机源程序(子函数)
单片机源程序如下:#include<STC12C5A.h>#include"tm1650.h"void Delay_us(uint i) //us延时{        for(;i>0;i--)        {        _nop_();//        _nop_();//        _nop_();        }}void
发表于 2019-11-06
pic16f877 tm0使LED每隔10ms闪亮代码
/** File:   main.c* Author: ssais*/#include <xc.h>#define LED RB0#define TO_10MS 100char A;void __interrupt() ISR(void);void main() {    TRISBbits_t.TRISB0=0;    OPTION_REG=0b10000101;    INTCON=0b10100000;    TMR0=TO_10MS;    LED=1;A=1;    whi
发表于 2019-10-30
关于STM32 SPI外设太鸡肋,I读TM1628 时查询发送方式好折磨
本人使用STM32F334读写TM1628,也参考了网上一大堆的例子,查询发送数据到TM1628,发现大部分网上的例子都是用的是TXE 标志位  SPI_I2S_FLAG_TXE,要注意此标志位在手册上图片显示的是只要FIFO的数据移动到发发送缓冲器里面之后就会置位所以TXE的置位并不代表所有传输完成只代表可以接着发送数据,而是等到BSY置位后才表明发送结束,对于判断发送单个字节则需要结合BSY来判断,对于多个字节则是要结合TXE和BSY一起来使用是最好的。对于中断发送的话本人暂时还是没有好的方法毕竟BSY不能产生中断。总之感觉太不顺手 附上个人demouint8_t TM1628_WritePro(void
发表于 2019-07-19
关于STM32 SPI外设太鸡肋,I读TM1628 时查询发送方式好折磨
pic16f887单片机用AD590高精度测温的电路和程序
一、 前言AD590 为Analog Devices 公司出品的一种双端温度转换电流源的单晶IC。图为AD590内部的线路结构,及其二种常用的包装。二、原理与暂存器设定说明原理:AD 590是一个良好的温度-电流转换的感测元件,具有良好的线性关系,其转换率为1μA/°K。&#1048708;图(左边)所示为AD 590转换电路,其输出转换率有100mV/°C(Vo15)输出。由于AD 590之转换率为1μA/°K。因运算放大器具有极高的输入阻抗,极小的输入电流的特性,使得AD 590电流完全流过R2与R3,故U1 的输出电压为1μA/°K.(R2+R3),当调整R2使得R2+R3=10KΩ时,U1 的输出电压为10mV/°K
发表于 2019-11-15
pic16f887单片机用AD590高精度测温的电路和程序
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved