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
- }
- }
復制代碼 |