(1)例程1:两个数码管显示不同内容。本例以第一个数码管显示数字“0”,第二个数码管显示数字“1”为例。
(2)例程2:多个数码管显示不同内容(二)。注:创建数码管显示子函数。
(3)例程3:多个数码管显示不同内容(二)。注:创建数码管显示子函数。
(4)例程4:多位数码管倒计时。本例以第6、7、8位数码管显示255→0的倒计时为例,其他数码管保持熄灭。
- //头文件声明区域
- #include
- #include
-
- //变量声明区域
- unsigned int i = 0;
-
- //函数声明区域
- void Delay(int ms);
-
-
-
- //程序主体
- void main()
- {
- P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序
-
- while(1)
- {
- P2=0XC0;P0=0X01;//打开控制数码管位选的锁存器,然后选中第一个数码管
- P2=0XFF;P0=0XC0;//大家控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay(1);
-
- P2=0XC0;P0=0X02;//打开控制数码管位选的锁存器,然后选中第二个数码管
- P2=0XFF;P0=0XF9;//打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- 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);
-
- }
-
- }
- #include
- #include
-
- void Delay_MS(unsigned int MS);
-
- void main(void)
- {
- IO_Init();
-
- P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化程序,后期详解;
-
- while(1)
- {
- P2=0XC0;P0=0X01; //打开控制数码管位选的锁存器,然后选中第一个数码管
- P2=0XFF;P0=0XC0; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P2=0XC0;P0=0X02; //打开控制数码管位选的锁存器,然后选中第二个数码管
- P2=0XFF;P0=0XF9; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P2=0XC0;P0=0X04; //打开控制数码管位选的锁存器,然后选中第三个数码管
- P2=0XFF;P0=0XF9; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P2=0XC0;P0=0X08; //打开控制数码管位选的锁存器,然后选中第四个数码管
- P2=0XFF;P0=0XF9; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P2=0XC0;P0=0X10; //打开控制数码管位选的锁存器,然后选中第五个数码管
- P2=0XFF;P0=0XF9; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P2=0XC0;P0=0X20; //打开控制数码管位选的锁存器,然后选中第六个数码管
- P2=0XFF;P0=0XF9; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P2=0XC0;P0=0X40; //打开控制数码管位选的锁存器,然后选中第七个数码管
- P2=0XFF;P0=0XF9; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P2=0XC0;P0=0X80; //打开控制数码管位选的锁存器,然后选中第八个数码管
- P2=0XFF;P0=0XF9; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- 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);
-
- }
-
- }
-
-
- //头文件声明区域
- #include
- #include
-
- //变量声明区域
- 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()
- {
- P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序
-
- 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;//消影
- P2=0XC0;P0=DSEG[dseg];//打开控制数码管位选的锁存器,然后选中第一个数码管
- P2=0XFF;P0=SEG[seg];
- Delay(1);
-
-
- }
- #include
- #include
-
- 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_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)
- {
-
- P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化程序,后期详解;
-
-
- while(1)
- {
- SEG1=1,SEG2=2,SEG3=3,SEG4=4,SEG5=5,SEG6=6,SEG7=7,SEG8=8;
- 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)
- {
- P0=0XFF;
- P2=0XC0;P0=0X01; //打开控制数码管位选的锁存器,然后选中第一个数码管
- P2=0XFF;P0=tab[yi]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X02; //打开控制数码管位选的锁存器,然后选中第二个数码管
- P2=0XFF;P0=tab[er]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X04; //打开控制数码管位选的锁存器,然后选中第三个数码管
- P2=0XFF;P0=tab[san]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X08; //打开控制数码管位选的锁存器,然后选中第四个数码管
- P2=0XFF;P0=tab[si]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X10; //打开控制数码管位选的锁存器,然后选中第五个数码管
- P2=0XFF;P0=tab[wu]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X20; //打开控制数码管位选的锁存器,然后选中第六个数码管
- P2=0XFF;P0=tab[liu]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X40; //打开控制数码管位选的锁存器,然后选中第七个数码管
- P2=0XFF;P0=tab[qi]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X80; //打开控制数码管位选的锁存器,然后选中第八个数码管
- P2=0XFF;P0=tab[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
- #include
-
- //#define uchar unsigned char
- //#define uint unsigned int
-
- typedef 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)
- {
-
-
- P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化程序,后期详解;
-
- while(1)
- {
- SEG1=1,SEG2=2,SEG3=3,SEG4=4,SEG5=5,SEG6=6,SEG7=7,SEG8=8;
-
- 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)
- {
- P0=0XFF;
- P2=0XC0;P0=0X01; //打开控制数码管位选的锁存器,然后选中第一个数码管
- P2=0XFF;P0=tab[yi]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X02; //打开控制数码管位选的锁存器,然后选中第二个数码管
- P2=0XFF;P0=tab[er]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
- }
-
- void SEG_Display34(unsigned char san,unsigned char si)
- {
- P0=0XFF;
- P2=0XC0;P0=0X04; //打开控制数码管位选的锁存器,然后选中第三个数码管
- P2=0XFF;P0=tab[san]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X08; //打开控制数码管位选的锁存器,然后选中第四个数码管
- P2=0XFF;P0=tab[si]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
- }
-
- void SEG_Display56(unsigned char wu,unsigned char liu)
- {
- P0=0XFF;
- P2=0XC0;P0=0X10; //打开控制数码管位选的锁存器,然后选中第五个数码管
- P2=0XFF;P0=tab[wu]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X20; //打开控制数码管位选的锁存器,然后选中第六个数码管
- P2=0XFF;P0=tab[liu]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
- }
- void SEG_Display78(unsigned char qi,unsigned char ba)
- {
- P0=0XFF;
- P2=0XC0;P0=0X40; //打开控制数码管位选的锁存器,然后选中第七个数码管
- P2=0XFF;P0=tab[qi]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X80; //打开控制数码管位选的锁存器,然后选中第八个数码管
- P2=0XFF;P0=tab[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
- #include
-
- #define uchar unsigned char
- #define uint unsigned int
-
- 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;
- unsigned char Num = 255 ;
- unsigned char Num_Refresh = 0 ;
-
- 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)
- {
-
- P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化程序,后期详解;
- P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF; //打开第一个数码管,后期详解;
-
- SEG1=11,SEG2=11,SEG3=11,SEG4=11,SEG5=11;
- SEG6=2,SEG7=5,SEG8=5;
- while(1)
- {
-
- if(++Num_Refresh==125)
- {
- Num_Refresh = 0 ;
- Num = Num -1; //Num--;
- SEG6=Num/100,SEG7=Num%100/10,SEG8=Num%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)
- {
- P0=0XFF;
- P2=0XC0;P0=0X01; //打开控制数码管位选的锁存器,然后选中第一个数码管
- P2=0XFF;P0=tab[yi]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X02; //打开控制数码管位选的锁存器,然后选中第二个数码管
- P2=0XFF;P0=tab[er]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
- }
-
- void SEG_Display34(unsigned char san,unsigned char si)
- {
- P0=0XFF;
- P2=0XC0;P0=0X04; //打开控制数码管位选的锁存器,然后选中第三个数码管
- P2=0XFF;P0=tab[san]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X08; //打开控制数码管位选的锁存器,然后选中第四个数码管
- P2=0XFF;P0=tab[si]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
- }
-
- void SEG_Display56(unsigned char wu,unsigned char liu)
- {
- P0=0XFF;
- P2=0XC0;P0=0X10; //打开控制数码管位选的锁存器,然后选中第五个数码管
- P2=0XFF;P0=tab[wu]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X20; //打开控制数码管位选的锁存器,然后选中第六个数码管
- P2=0XFF;P0=tab[liu]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
- }
- void SEG_Display78(unsigned char qi,unsigned char ba)
- {
- P0=0XFF;
- P2=0XC0;P0=0X40; //打开控制数码管位选的锁存器,然后选中第七个数码管
- P2=0XFF;P0=tab[qi]; //打开控制数码管段选的锁存器,然后给上述打开的数码管输出码值
- Delay_MS(1);
-
- P0=0XFF;
- P2=0XC0;P0=0X80; //打开控制数码管位选的锁存器,然后选中第八个数码管
- P2=0XFF;P0=tab[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);
-
- }