無標題.jpg (102.84 KB, 下載次數(shù): 0)
下載附件
2024-11-22 21:40 上傳
- #include <reg51.H>
- #define uint unsigned int
- #define uchar unsigned char
- sbit P_HC595_SER = P1^0;
- sbit P_HC595_RCLK = P1^1;
- sbit P_HC595_SRCLK = P1^2;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,0x40};
- uchar data dis_buf[8];
- uchar shi=12,fen=59,miao=30;
- uint cnt;
- bit flag;
- /**************** 向HC595發(fā)送一個字節(jié)函數(shù) ******************/
- void Send_595(uchar dat)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- dat <<= 1;
- P_HC595_SER = CY; //溢出位賦值數(shù)據(jù)輸出端
- P_HC595_SRCLK = 1; //移位時鐘
- P_HC595_SRCLK = 0;
- }
- }
- /**************** 向HC595發(fā)送2個字節(jié)驅(qū)動碼 ******************/
- void DisplayScan()
- {
- static uchar i;
- Send_595(~(0x01<<i));//向HC595發(fā)送位碼
- Send_595(table[dis_buf[i]]);//向HC595發(fā)送段碼
- P_HC595_RCLK = 1;//鎖存輸出數(shù)據(jù)
- P_HC595_RCLK = 0;
- i++;
- i%=8;
- }
- void TimerInit() //定時器0初始化
- {
- TMOD = 0x01;
- TH0 = (65536-2000)/256; //2ms初值
- TL0 = (65536-2000)%256;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void main()
- {
- P_HC595_SRCLK = 0;//初始化移位時鐘端
- P_HC595_RCLK = 0;//初始化鎖存輸出端
- dis_buf[0]=shi/10;//初始化顯示緩存
- dis_buf[1]=shi%10;
- dis_buf[2]=16;
- dis_buf[3]=fen/10;
- dis_buf[4]=fen%10;
- dis_buf[5]=16;
- dis_buf[6]=miao/10;
- dis_buf[7]=miao%10;
- TimerInit();
- while(1)
- {
- if(flag)
- {
- flag=0;
- dis_buf[0]=shi/10;
- dis_buf[1]=shi%10;
- dis_buf[3]=fen/10;
- dis_buf[4]=fen%10;
- dis_buf[6]=miao/10;
- dis_buf[7]=miao%10;
- DisplayScan();
- }
- }
- }
- void Timer0() interrupt 1
- {
- TH0 = (65536-2000)/256;
- TL0 = (65536-2000)%256;
- cnt++;
- if(cnt>=500)
- {
- cnt = 0;
- miao++;
- if(miao == 60)
- {
- miao = 0;
- fen++;
- if(fen==60)
- {
- fen = 0;
- shi++;
- if(shi==24)
- {
- shi=0;
- }
- }
- }
- }
- flag=1;
- }
復(fù)制代碼
|