?? 18_01_1.c
字號:
/*
;***************************************************************************
; 此實驗實現簡易的數字鐘,通過數碼管顯示出來
; 學習數碼管的動態(tài)掃描原理及方法
; 掌握定時器T0的TMOD控制寄存器的使用方法及初值的計算;
; 掌握定時器T0的溢出中斷工作原理及方法
; supermcu@126.com
; www.supermcu.com
; SP0602-S52單片機學習實驗開發(fā)系統(tǒng)
;***************************************************************************
*/
#include <REGX51.H>
#define LEDDATAPORT P0
#define LEDBITPORT P2
const unsigned char LEDDATA[]=
{
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,
0x00,0x40,0x38,0x37,
};
unsigned char LEDBuffer[8]={0,0,17,0,0,17,0,0};
unsigned char ScanLEDCount;
struct ClockStruct
{
unsigned char Hour;
unsigned char Minute;
unsigned char Second;
unsigned int Count;
unsigned char RunFlag;
};
struct ClockStruct Clock;
void main(void)
{
TMOD=0x01;
TH0=(65536-1843)/256;
TL0=(65536-1843)%256;
ET0=1;
TR0=1;
EA=1;
while(1);
}
void timer0(void) interrupt 1
{
TH0=(65536-1843)/256;
TL0=(65536-1843)%256;
LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]];
LEDBITPORT=ScanLEDCount;
ScanLEDCount++;
if(ScanLEDCount==sizeof(LEDBuffer))ScanLEDCount=0;
Clock.Count++;
if((Clock.Count%500)==0)
{
if(LEDBuffer[2]==17)
{
LEDBuffer[2]=16;
LEDBuffer[5]=16;
}
else
{
LEDBuffer[2]=17;
LEDBuffer[5]=17;
}
}
if(Clock.Count==1000)
{
Clock.Count=0;
Clock.Second++;
if(Clock.Second==60)
{
Clock.Second=0;
Clock.Minute++;
if(Clock.Minute==60)
{
Clock.Hour++;
if(Clock.Hour==24)Clock.Hour=0;
}
}
LEDBuffer[0]=Clock.Second%10;
LEDBuffer[1]=Clock.Second/10;
LEDBuffer[3]=Clock.Minute%10;
LEDBuffer[4]=Clock.Minute/10;
LEDBuffer[6]=Clock.Hour%10;
LEDBuffer[7]=Clock.Hour/10;
}
}
/*
;***************************************************************************
; 在開發(fā)板上運行顯示的格式為"HH-MM-SS"
;***************************************************************************
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -