网站备案怎么做超链接,wordpress用户系统,牛商网做的网站怎么样,好玩的游戏目录 一、数码管动态显示概述
二、动态数码管原理图
#xff08;1#xff09;原理图
#xff08;2#xff09;动态数码管如何与芯片相连
#xff08;3#xff09;“此器件” ——锁存器74HC573
三、动态数码管显示例程
#xff08;1#xff09;例程1#xf…目录 一、数码管动态显示概述
二、动态数码管原理图
1原理图
2动态数码管如何与芯片相连
3“此器件” ——锁存器74HC573
三、动态数码管显示例程
1例程1两个数码管显示不同内容。本例以第一个数码管显示数字“0”第二个数码管显示数字“1”为例。 2例程2多个数码管显示不同内容二。注创建数码管显示子函数。
3例程3多个数码管显示不同内容二。注创建数码管显示子函数。
①法一
②法二
③法三
4例程4多位数码管倒计时。本例以第6、7、8位数码管显示255→0的倒计时为例其他数码管保持熄灭。 一、数码管动态显示概述
LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一。动态驱动是将所有数码管的8个显示笔划段选端“a,b,c,d,e,fg,dp”的同名端连在一起另外为每个数码管的公共极COM增加位选通控制电路位选通由各自独立的I/O线控制。当单片机输出字形码时单片机先对位选通COM端电路进行控制再对段选通进行输出该位就显示出字形没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端就使各个数码管轮流受控显示这就是动态驱动。在轮流显示过程中每位数码管的点亮时间为1~2ms由于人的视觉暂留现象及发光二极管的余辉效应尽管实际上各位数码管并非同时点亮但只要扫描的速度足够快给人的印象就是一组稳定的显示数据不会有闪烁感动态显示的效果和静态显示是一样的能够节省大量的I/O端口而且功耗更低。
二、动态数码管原理图
1原理图 2动态数码管如何与芯片相连 3“此器件” ——锁存器74HC573
74HC573的八个锁存器都是透明的D型锁存器当使能(G)为高时0输出将随数据(D)输入而变当使能为低时将输出锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作即老数据可以保持甚至当输出被关闭时新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载可以直接与系统总线接口并驱动总线而不需要外接口。特别适用于缓冲寄存器1/0通道双向总线驱动器和工作寄存器。Y7C为高电平a-dp会随着p0变化Y7C为低电平时锁存置为低电平的那一刻的数据不再变化Y7C和Y6C同时只能有一个为低电平 三、动态数码管显示例程
1例程1两个数码管显示不同内容。本例以第一个数码管显示数字“0”第二个数码管显示数字“1”为例。
//头文件声明区域
#include STC15F2K60S2.H
#includeintrins.h//变量声明区域
unsigned int i 0;//函数声明区域
void Delay(int ms);//程序主体
void main()
{P20XA0;P00X00;P20X80;P00XFF;//初始化程序 while(1){P20XC0;P00X01;//打开控制数码管位选的锁存器然后选中第一个数码管P20XFF;P00XC0;//大家控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay(1);P20XC0;P00X02;//打开控制数码管位选的锁存器然后选中第二个数码管P20XFF;P00XF9;//打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay(1);} }//函数定义区域
void Delay(int ms) //11.0592MHz
{unsigned char i, j;for(i 0;i ms;i){_nop_();_nop_();_nop_();i 11;j 190;do{while (--j);} while (--i);}} 2例程2多个数码管显示不同内容二。注创建数码管显示子函数。
#include STC15F2K60S2.H
#includeintrins.hvoid Delay_MS(unsigned int MS);void main(void)
{IO_Init();P20XA0;P00X00;P20X80;P00XFF; //初始化程序后期详解;while(1){P20XC0;P00X01; //打开控制数码管位选的锁存器然后选中第一个数码管P20XFF;P00XC0; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P20XC0;P00X02; //打开控制数码管位选的锁存器然后选中第二个数码管P20XFF;P00XF9; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P20XC0;P00X04; //打开控制数码管位选的锁存器然后选中第三个数码管P20XFF;P00XF9; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P20XC0;P00X08; //打开控制数码管位选的锁存器然后选中第四个数码管P20XFF;P00XF9; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P20XC0;P00X10; //打开控制数码管位选的锁存器然后选中第五个数码管P20XFF;P00XF9; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P20XC0;P00X20; //打开控制数码管位选的锁存器然后选中第六个数码管P20XFF;P00XF9; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P20XC0;P00X40; //打开控制数码管位选的锁存器然后选中第七个数码管P20XFF;P00XF9; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P20XC0;P00X80; //打开控制数码管位选的锁存器然后选中第八个数码管P20XFF;P00XF9; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);}
}void Delay_MS(unsigned int MS)
{unsigned char i, j;for(i 0;i ms;i){_nop_();_nop_();_nop_();i 11;j 190;do{while (--j);} while (--i);}} 3例程3多个数码管显示不同内容二。注创建数码管显示子函数。
①法一
//头文件声明区域
#include STC15F2K60S2.H
#includeintrins.h//变量声明区域
unsigned int i 0;
unsigned char DSEG[] {0X00,0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};
unsigned char code SEG[] {0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};//函数声明区域
void Delay(int ms);
void DSED_Display(unsigned char dseg,unsigned char seg);//程序主体
void main()
{P20XA0;P00X00;P20X80;P00XFF;//初始化程序 while(1){DSED_Display(1,1);DSED_Display(2,2);DSED_Display(3,3);DSED_Display(4,4);DSED_Display(5,5);DSED_Display(6,6);DSED_Display(7,7);DSED_Display(8,8);} }//函数定义区域
void Delay(int ms) //11.0592MHz
{unsigned char i, j;for(i 0;i ms;i){_nop_();_nop_();_nop_();i 11;j 190;do{while (--j);} while (--i);}}void DSED_Display(unsigned char dseg,unsigned char seg)
{P0 0XFF;//消影P20XC0;P0DSEG[dseg];//打开控制数码管位选的锁存器然后选中第一个数码管P20XFF;P0SEG[seg];Delay(1);}
②法二
#include STC15F2K60S2.H
#includeintrins.hunsigned char tab[]{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
//unsigned char code tab[]{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};unsigned char SEG1,SEG2,SEG3,SEG4,SEG5,SEG6,SEG7,SEG8;void Delay(int ms)
void SEG_Display(unsigned char yi,unsigned char er,unsigned char san,unsigned char si,unsigned char wu,unsigned char liu,unsigned char qi,unsigned char ba);void main(void)
{P20XA0;P00X00;P20X80;P00XFF; //初始化程序后期详解;while(1){SEG11,SEG22,SEG33,SEG44,SEG55,SEG66,SEG77,SEG88;SEG_Display(SEG1,SEG2,SEG3,SEG4,SEG5,SEG6,SEG7,SEG8);}
}void SEG_Display(unsigned char yi,unsigned char er,unsigned char san,unsigned char si,unsigned char wu,unsigned char liu,unsigned char qi,unsigned char ba)
{P00XFF;P20XC0;P00X01; //打开控制数码管位选的锁存器然后选中第一个数码管P20XFF;P0tab[yi]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X02; //打开控制数码管位选的锁存器然后选中第二个数码管P20XFF;P0tab[er]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X04; //打开控制数码管位选的锁存器然后选中第三个数码管P20XFF;P0tab[san]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X08; //打开控制数码管位选的锁存器然后选中第四个数码管P20XFF;P0tab[si]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X10; //打开控制数码管位选的锁存器然后选中第五个数码管P20XFF;P0tab[wu]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X20; //打开控制数码管位选的锁存器然后选中第六个数码管P20XFF;P0tab[liu]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X40; //打开控制数码管位选的锁存器然后选中第七个数码管P20XFF;P0tab[qi]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X80; //打开控制数码管位选的锁存器然后选中第八个数码管P20XFF;P0tab[ba]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);
}void Delay(int ms) //11.0592MHz
{unsigned char i, j;for(i 0;i ms;i){_nop_();_nop_();_nop_();i 11;j 190;do{while (--j);} while (--i);}}
③法三
#include STC15F2K60S2.H
#includeintrins.h//#define uchar unsigned char
//#define uint unsigned inttypedef unsigned char uchar ;
typedef unsigned int uint ;unsigned char tab[]{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
//unsigned char code tab[]{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};unsigned char SEG1,SEG2,SEG3,SEG4,SEG5,SEG6,SEG7,SEG8;void Delay(int ms);
void SEG_Display12(uchar yi,uchar er);
void SEG_Display34(uchar san,uchar si);
void SEG_Display56(unsigned char wu,unsigned char liu);
void SEG_Display78(unsigned char qi,unsigned char ba);void main(void)
{P20XA0;P00X00;P20X80;P00XFF; //初始化程序后期详解;while(1){SEG11,SEG22,SEG33,SEG44,SEG55,SEG66,SEG77,SEG88;SEG_Display12(SEG1,SEG2);SEG_Display34(SEG3,SEG4);SEG_Display56(SEG5,SEG6);SEG_Display78(SEG7,SEG8);}
}void SEG_Display12(unsigned char yi,unsigned char er)
{P00XFF;P20XC0;P00X01; //打开控制数码管位选的锁存器然后选中第一个数码管P20XFF;P0tab[yi]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X02; //打开控制数码管位选的锁存器然后选中第二个数码管P20XFF;P0tab[er]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);
}void SEG_Display34(unsigned char san,unsigned char si)
{P00XFF;P20XC0;P00X04; //打开控制数码管位选的锁存器然后选中第三个数码管P20XFF;P0tab[san]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X08; //打开控制数码管位选的锁存器然后选中第四个数码管P20XFF;P0tab[si]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);
}void SEG_Display56(unsigned char wu,unsigned char liu)
{P00XFF;P20XC0;P00X10; //打开控制数码管位选的锁存器然后选中第五个数码管P20XFF;P0tab[wu]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X20; //打开控制数码管位选的锁存器然后选中第六个数码管P20XFF;P0tab[liu]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);
}
void SEG_Display78(unsigned char qi,unsigned char ba)
{P00XFF;P20XC0;P00X40; //打开控制数码管位选的锁存器然后选中第七个数码管P20XFF;P0tab[qi]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X80; //打开控制数码管位选的锁存器然后选中第八个数码管P20XFF;P0tab[ba]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);
}void Delay(int ms) //11.0592MHz
{unsigned char i, j;for(i 0;i ms;i){_nop_();_nop_();_nop_();i 11;j 190;do{while (--j);} while (--i);}}4例程4多位数码管倒计时。本例以第6、7、8位数码管显示255→0的倒计时为例其他数码管保持熄灭。
#include STC15F2K60S2.H
#includeintrins.h#define uchar unsigned char
#define uint unsigned intunsigned char tab[]{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
//unsigned char code tab[]{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};unsigned char SEG1,SEG2,SEG3,SEG4,SEG5,SEG6,SEG7,SEG8;
unsigned char Num 255 ;
unsigned char Num_Refresh 0 ;void IO_Init(void);
void Delay(uint MS);
void SEG_Display12(uchar yi,uchar er);
void SEG_Display34(uchar san,uchar si);
void SEG_Display56(unsigned char wu,unsigned char liu);
void SEG_Display78(unsigned char qi,unsigned char ba);void main(void)
{IO_Init();P20XA0;P00X00;P20X80;P00XFF; //初始化程序后期详解;P20XC0;P00X01;P20XFF;P00XFF; //打开第一个数码管后期详解SEG111,SEG211,SEG311,SEG411,SEG511;SEG62,SEG75,SEG85;while(1){ if(Num_Refresh125){Num_Refresh 0 ;Num Num -1; //Num--;SEG6Num/100,SEG7Num%100/10,SEG8Num%10;}SEG_Display12(SEG1,SEG2);SEG_Display34(SEG3,SEG4);SEG_Display56(SEG5,SEG6);SEG_Display78(SEG7,SEG8);}
}void SEG_Display12(unsigned char yi,unsigned char er)
{P00XFF;P20XC0;P00X01; //打开控制数码管位选的锁存器然后选中第一个数码管P20XFF;P0tab[yi]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X02; //打开控制数码管位选的锁存器然后选中第二个数码管P20XFF;P0tab[er]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);
}void SEG_Display34(unsigned char san,unsigned char si)
{P00XFF;P20XC0;P00X04; //打开控制数码管位选的锁存器然后选中第三个数码管P20XFF;P0tab[san]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X08; //打开控制数码管位选的锁存器然后选中第四个数码管P20XFF;P0tab[si]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);
}void SEG_Display56(unsigned char wu,unsigned char liu)
{P00XFF;P20XC0;P00X10; //打开控制数码管位选的锁存器然后选中第五个数码管P20XFF;P0tab[wu]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X20; //打开控制数码管位选的锁存器然后选中第六个数码管P20XFF;P0tab[liu]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);
}
void SEG_Display78(unsigned char qi,unsigned char ba)
{P00XFF;P20XC0;P00X40; //打开控制数码管位选的锁存器然后选中第七个数码管P20XFF;P0tab[qi]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);P00XFF;P20XC0;P00X80; //打开控制数码管位选的锁存器然后选中第八个数码管P20XFF;P0tab[ba]; //打开控制数码管段选的锁存器然后给上述打开的数码管输出码值Delay_MS(1);
}void Delay(uint MS) //11.0592MHz
{unsigned char i, j;for(i 0;i ms;i){_nop_();_nop_();_nop_();i 11;j 190;do{while (--j);} while (--i);}