数码管基础知识
CT107D单片机综合实训平台上使用的数码管是F3461BH,告诉咱们数码管的类型。倒数第2个字母是“B”,说明这个数码管是共阳类型的,若是该字母为“A”则为共阴类型。
F3461BH是一个4位8段的数码管,其中a、b、c、d、e、f、g、dp引脚分别对应8个段码,该8个引脚经过74HC573锁存器与单片机的P0端口相连。另外有com1~com4四个公共控制脚,该应用为高电平则使能对应位的数码管。两个F3461BH一共有8个com控制引脚,也是经过74HC573锁存器与单片机的P0端口相连的。
控制Y7C口,向P0口送数据
控制Y6C口选择使用哪一个数码管,一个是8个
找到Y6C和Y7C
web
void display1(yi, er) { //开位选(Y6C) P2=0XC0; P0=0X01; //开段选(Y7C) P2=0XFF; P0=tab[yi]; Delay1ms(1); //开位选 P2=0XC0; P0=0X02; //开段选 P2=0XFF; P0=dottab[er]; Delay1ms(1); }
74HC138使用
数组
/*代码实现显示12345678,分组显示。能够根据须要显示字符表里的数字 加了code的数组是把这个数组保存到程序区,程序运行过程当中是没法修改的,通常用来保存那些常数、或者编码数据,好比数码管的数字编码等;没有加code的数组是在RAM中的,能够动态修改里面的数据。 加code是将数据保存在程序存储器中,不然就保存在RAM中,单片机的RAM比较小,所以很宝贵,大型固定数组(如少许汉字字库或简单图片)必定不要占用RAM 空间,那样很容易形成内存不足提示 但程序存储器中的数据不能够在运行中修改,所以所存数据属于常量 */ #include <STC15F2K60S2.h> #define uchar unsigned char #define uint unsigned int void allinit(); void delayms(uchar z); void display1(uchar yi,uchar er); void display2(uchar san,uchar si); void display3(uchar wu,uchar liu); void display4(uchar qi,uchar ba); /*主函数所调用子函数,若写在主函数以前能够不用声明(默认为已经声明),写在主函数以后必须声明*/ uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF}; //1 2 3 4 5 6 7 8 9 - 灭 uchar code dottab[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带小数点的数字 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. uchar yi,er,san,si,wu,liu,qi,ba; void delayms(uchar z) //@12.000MHz { unsigned char i, j; uchar k; for(k=z;k>0;k--) { i = 12; j = 169; do { while (--j); } while (--i); } } void display1(uchar yi,uchar er) { P2=0XC0; P0=0X01; P2=0XFF; P0=tab[yi]; delayms(1); P2=0XC0; P0=0X02; P2=0XFF; P0=tab[er]; delayms(1); } void display2(uchar san,uchar si) { P2=0XC0; P0=0X04; P2=0XFF; P0=tab[san]; delayms(1); P2=0XC0; P0=0X08; P2=0XFF; P0=tab[si]; delayms(1); } void display3(uchar wu,uchar liu) { P2=0XC0; P0=0X10; P2=0XFF; P0=tab[wu]; delayms(1); P2=0XC0; P0=0X20; P2=0XFF; P0=tab[liu]; delayms(1); } void display4(uchar qi,uchar ba) { P2=0XC0; P0=0X40; P2=0XFF; P0=tab[qi]; delayms(1); P2=0XC0; P0=0X80; P2=0XFF; P0=tab[ba]; delayms(1); } void allinit()//初始化 { P2=0X80;//打开控制数码管的573(u6),3-8译码器为001(ABC) P0=0XFF;//关闭全部流水灯 P2=0XC0;//打开控制数码管位选的573,3-8译码器为011 P0=0XFF; P2=0XFF;//打开控制数码管段选573,3-8译码器为111 P0=0XFF;//关闭全部数码管 P2=0XA0;//打开控制数码管573,3-8译码器为101 P0=0X00;//关闭继电器和蜂鸣器 } void main() { allinit(); yi=1,er=2,san=3,si=4,wu=5,liu=6,qi=7,ba=8; while(1) { display1(yi,er); display2(san,si); display3(wu,liu); display4(qi,ba); } }