1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| /\*\*\*\*\*\*\*\*\*51单片机单位数码管0-9循环秒计数\*\*\*\*\*\*\*\*\*\*\*/ #include <reg51.H> #define uint unsigned int #define uchar unsigned char sbit HC595_DIO = P1^0; sbit HC595_SCLK = P1^1; sbit HC595_RCLK = P1^2;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共阴数码管段码0~f 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar code dis_buf[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴数码管位码
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*1ms延时子程序(12MHz)\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ void delayms(uint k) { uint i,j; for(i=k;i>0;i--) for(j=125;j>0;j--); } /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 向HC595发送一个字节函数 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ void Send\_595(uchar dat) { uchar i; for(i=0;i<8;i++) { HC595_DIO=(dat&0x80)>>7;//由高位到低位赋值数据输出端 HC595_SCLK = 1; //移位时钟 HC595_SCLK = 0; dat <<= 1; //dat左移一位 } } /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 数码管显示函数 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ void DisplayScan() { static uchar i=0; Send\_595(dis_buf[i]);//向HC595发送位码(共阴数码管) Send\_595(table[i]); //向HC595发送段码(共阴数码管) // Send\_595(~dis\_buf[i]);//向HC595发送位码(共阳数码管) // Send\_595(~table[i]); //向HC595发送段码(共阳数码管) HC595_RCLK = 1; //锁存输出数据 HC595_RCLK = 0; i++; i%=10; }
void main() { HC595_SCLK = 0; //初始化移位时钟端 HC595_RCLK = 0; //初始化锁存输出端 while(1) { DisplayScan(); //数码管显示函数 delayms(1000); //延时1ms } }
|