stc锁存时钟要等两个字节发送完毕才能送出,给你一个示例参考。
- #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%=8;
- }
- void main()
- {
- HC595_SCLK = 0; //初始化移位时钟端
- HC595_RCLK = 0; //初始化锁存输出端
- while(1)
- {
- DisplayScan(); //数码管显示函数
- delayms(1); //延时1ms
- }
- }
复制代码 |