單片機(jī)C語(yǔ)言實(shí)例-332-數(shù)碼時(shí)鐘設(shè)計(jì)
//實(shí)例66:數(shù)碼時(shí)鐘設(shè)計(jì)
#include<reg51.h> // 包含51單片機(jī)寄存器定義的頭文件
unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //control shape
unsigned char port[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char int_time ; //中斷次數(shù)計(jì)數(shù)變量
unsigned char second; //秒計(jì)數(shù)變量
unsigned char minute; //分鐘計(jì)數(shù)變量
unsigned char hour; //小時(shí)計(jì)數(shù)變量
/////////////////////////////////////////////////////
void delay(void) //延時(shí)函數(shù),延時(shí)約0.6ms
{
unsigned char j;
for(j=0;j<200;j++)
;
}
/******************************************************************
函數(shù)功能:顯示秒的子程序
入口參數(shù):s
********************************************************************/
void DisplaySecond(unsigned char s)
{
P2=0xbf; //P2.6引腳輸出低電平, DS6點(diǎn)亮
P0=Tab[s/10]; //顯示十位
delay();
P2=0x7f; //P2.7引腳輸出低電平, DS7點(diǎn)亮
P0=Tab[s%10]; //顯示個(gè)位
delay();
P2=0xff; //關(guān)閉所有數(shù)碼管
}
/******************************************************************
函數(shù)功能:顯示分鐘的子程序
入口參數(shù):m
********************************************************************/
void DisplayMinute(unsigned char m)
{
P2=0xf7; // P2.3引腳輸出低電平, DS3點(diǎn)亮
P0=Tab[m/10];//顯示個(gè)位
delay();
P2=0xef; // P2.4引腳輸出低電平, DS4點(diǎn)亮
P0=Tab[m%10];
delay();
P2=0xdf; //P2.5引腳輸出低電平, DS5點(diǎn)亮
P0=0xbf; //分隔符“-”的段碼
delay();
P2=0xff; //關(guān)閉所有數(shù)碼管
}
/******************************************************************
函數(shù)功能:顯示小時(shí)的子程序
入口參數(shù):h
********************************************************************/
void DisplayHour(unsigned char h)
{
P2=0xfe; //P2.0引腳輸出低電平, DS0點(diǎn)亮
P0=Tab[h/10]; //顯示十位
delay();
P2=0xfd; //P2.1引腳輸出低電平, DS1點(diǎn)亮
P0=Tab[h%10]; //顯示個(gè)位
delay();
P2=0xfb; //P2.2引腳輸出低電平, DS2點(diǎn)亮
P0=0xbf; //分隔符“-”的段碼
delay();
P2=0xff; //關(guān)閉所有數(shù)碼管
}
/******************************************************************
函數(shù)功能:主函數(shù)
********************************************************************/
void main(void)
{
TMOD=0x01; //使用定時(shí)器T0
EA=1; //開中斷總允許
ET0=1; //允許T0中斷
TH0=(65536-46083)/256; //定時(shí)器高八位賦初值
TL0=(65536-46083)%256; //定時(shí)器低八位賦初值
TR0=1;
int_time=0; //中斷計(jì)數(shù)變量初始化
second=0; //秒計(jì)數(shù)變量初始化
minute=0; //分鐘計(jì)數(shù)變量初始化
hour=0; //小時(shí)計(jì)數(shù)變量初始化
while(1)
{
DisplaySecond(second); //調(diào)用秒顯示子程序
delay();
DisplayMinute(minute); //調(diào)用分鐘顯示子程序
delay();
DisplayHour(hour);
delay();
}
}
/******************************************************************
函數(shù)功能:定時(shí)器T0的中斷服務(wù)子程序
********************************************************************/
void interserve(void ) interrupt 1 using 1 //using Time0
{
int_time++;
if(int_time==20)
{
int_time=0; //中斷計(jì)數(shù)變量清0
second++; //秒計(jì)數(shù)變量加1
}
if(second==60)
{
second=0; //如果秒計(jì)滿60,將秒計(jì)數(shù)變量清0
minute++; //分鐘計(jì)數(shù)變量加1
}
if(minute==60)
{
minute=0; //如果分鐘計(jì)滿60,將分鐘計(jì)數(shù)變量清0
hour++; //小時(shí)計(jì)數(shù)變量加1
}
if(hour==24)
{
hour=0; //如果小時(shí)計(jì)滿24,將小時(shí)計(jì)數(shù)變量清0
}
TH0=(65536-46083)/256; //定時(shí)器重新賦初值
TL0=(65536-46083)%256;
}
更多詳情參考附件文檔
+08:00C134聯(lián)盟網(wǎng)6356.png (3 KB, 下載次數(shù): 3)
下載附件
保存到相冊(cè)
2022-3-29 10:14 上傳
游客,如果您要查看本帖隱藏內(nèi)容請(qǐng) 回復(fù)
|