资讯详情

TM1640与PIC12F629的结合

TM1640是驱动数码管的专用集成电路,可直接驱动16位共阴数码管。 / *本程序直接驱动16位共阴数码管,各数码管分别驱动0、1、2、……E、F。 */

include

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 输出低电平 }

标签: 12f629集成电路

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台