51單片機機關數位管0-9循環秒計數
- 51單片機:
、AT89C52
74HC245、`74HC595、機關共陰數位管、
- Proteus仿真
執行個體代碼
/*********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
}
}
相關代碼解釋
-
看到這個有點反應懵,i%=10;
i%=10 等于 if(i>=10)i=0; 其作用就是歸零。