|
可实现代码如下: #include"reg52.h" #include<intrins.h> #define u16 unsigned int #define u8 unsigned char //74ls164IO口定义 sbit CLK=P2^6; sbit DAT=P2^7; // u8 code tab[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};//0-9 全灭,无小数 u8 code tab1[]={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08,0xfe};//共阳数码管,带小数 u16 code Data[]={323,456,789}; //函数声明 void dispbyte(u8 byte); void dispbyte1(u8 Byte); void Delay_ms(u16 z); void Display(u16 number); //主函数 void main() { u8 h; while(1) { for(h=0;h<3;h++) { Display(Data[h]); Delay_ms(3000); // Display(222); // Delay_ms(3000); } } } //数码管显示函数 void Display(u16 number) { u8 bai,shi,ge; Delay_ms(5); bai = number/100; dispbyte(bai); Delay_ms(5); shi = number%100/10; dispbyte1(shi); Delay_ms(5); ge = number%10; dispbyte(ge); Delay_ms(5); } //发送数据函数 void dispbyte(u8 byte) { u8 num,d; num = tab[byte]; for(d=0;d<8;d++) { CLK = 0; DAT=num&0x01; CLK =1; num>>=1; } } void dispbyte1(u8 Byte) { u8 num,d; num = tab1[Byte]; for(d=0;d<8;d++) { CLK = 0; DAT=num&0x01; CLK =1; num>>=1; } } //延时函数 void Delay_ms(u16 ms) { u8 i; for(;ms!=0;ms--) for(i=0;i<250;i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } |
|
为什么我自己给自己写评论都要被删除啊 |
| 已经解决 |
|
第二个程序的IO口设置忘记改了,也是 sbit CLK=P2^6; sbit DAT=P2^7; |
|
将段码更改了一下: tab[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff} 第一个数码管还是现实8,其余两个分别现实1,1 2,2 |