04-共阳数码管的动态显示

共阳数码管的动态显示

20231003194142

20231003194643

代码如下:

copy
#include <REGX52.H> void Display_Dynamic(); unsigned char month = 1; void Delay_ms(unsigned int xms) { unsigned int i,j; for(i = 0;i<xms;i++) { for(j=0;j<299;j++); } } void Delay(unsigned char t) { while(t--) { // 此代替了中断,没有这一步会出问题 Display_Dynamic(); } } void _74HC138(unsigned char n) { switch(n) { case 4: // LED使能 P2 = (P2 &0x1f)|0x80; break; case 5: // 蜂鸣器/继电器 P2 = (P2 &0x1f)|0xa0; break; case 6: // 数码管位选 P2 = (P2 &0x1f)|0xc0; break; case 7: // 数码管段选 P2 = (P2 &0x1f)|0xe0; break; case 0: P2 = (P2 &0x1f)|0x00; break; } } void SystemInit(void) { _74HC138(5); P0 = 0x00; _74HC138(4); P0= 0xff; } void Nixie(unsigned char Location,Number) { unsigned int code num[11] ={ 0xc0, // 0 1100 0000 0xf9, // 1 1111 1001 abged 为0 0xa4, // 2 1010 0100 0xb0,//3 0x99,//4 0x92,//5 0x82,//6 0xf8,//7 0x80,//8 0x90,//9 0xbf }; switch(Location) { case 1: _74HC138(6); P0=0x01;break; case 2: _74HC138(6); P0=0x02;break; case 3: _74HC138(6); P0=0x04;break; case 4: _74HC138(6); P0=0x08;break; case 5: _74HC138(6); P0=0x10;break; case 6: _74HC138(6); P0=0x20;break; case 7: _74HC138(6); P0=0x40;break; case 8: _74HC138(6); P0=0x80;break; } _74HC138(7); P0 = num[Number]; Delay_ms(5); P0 = 0xFF; } // 数码显示函数 void Display_Dynamic() { Nixie(1,2); // 2 Delay_ms(2); Nixie(2,0); // 0 Delay_ms(2); Nixie(3,1); // 1 Delay_ms(2); Nixie(4,8); // 8 Delay_ms(2); Nixie(5,10); // - 1011 1111 Delay_ms(2); Nixie(6,10); // - 1011 1111 Delay_ms(2); Nixie(7,month/10); // 十位 Delay_ms(2); Nixie(8,month%10); // 个位 Delay_ms(2); } void main() { unsigned char i,j; SystemInit(); while(1) { Display_Dynamic(); month++; //Delay_ms(500); if(month > 12) { month = 1; } // 此为上述的延迟函数 Delay(100); } }
posted @   夏日清凉~  阅读(65)  评论(0编辑  收藏  举报
相关博文:
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起