標(biāo)題:
單片機(jī)數(shù)字鐘(兩個(gè)定時(shí)器,優(yōu)先級(jí))
[打印本頁(yè)]
作者:
會(huì)飛的魚(yú)1710
時(shí)間:
2018-11-14 16:22
標(biāo)題:
單片機(jī)數(shù)字鐘(兩個(gè)定時(shí)器,優(yōu)先級(jí))
數(shù)字鐘電路原理圖如下:
QQ圖片20181114162140.png
(15.17 KB, 下載次數(shù): 41)
下載附件
效果圖
2018-11-14 16:21 上傳
單片機(jī)源程序如下:
#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit k1 = P0^0;//按鍵調(diào)時(shí)間加一 秒
sbit k2 = P0^1; //分
sbit k3 = P0^2; //時(shí)
sbit k4 = P0^7; //暫停
char code smduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, //共陽(yáng)
0x80,0x90,0xbf}; //0-9和-
uchar ms = 0,sec = 0,min =0,hour = 12;//定義變量
uchar i = 0;
/**************延時(shí)函數(shù),有參******/
void delay(uchar h)//延時(shí)xms
{
uchar k;
for(;h > 0;h--)
{
for(k = 110;k > 0;k--);
}
}
/********定時(shí)器初始化************/
void csh()
{
TMOD = 0x11;//T0,T1工作方式1
TH1 = (65536 - 2500) / 256; //給初值 T1給2.5ms
TL1 = (65536 - 2500) % 256;
TH0 = (65536 - 50000) / 256; //T0給50ms
TL0 = (65536 - 50000) % 256;
//開(kāi)中斷
ET1 = 1;
ET0 = 1;
EA = 1;
//二級(jí)中斷嵌套令T0 50ms優(yōu)先
PT0 = 1;
//開(kāi)定時(shí)器
TR0 = 1;
TR1 = 1;
}
/****************按鍵函數(shù)*******/
void key()
{
if(k1 == 0) //秒
{
delay(10);//延時(shí)10ms
if(k1 == 0)
{
if(sec > 59) sec = 0;
else sec++;
}
while(k1 == 0);
}
if(k2 == 0)//分
{
delay(10);//延時(shí)10ms,
if(k2 == 0)
{
if(min > 59) min = 0;
else min++;
}
while(k2 == 0);
}
if(k3 == 0) //時(shí)
{
delay(10);//延時(shí)10ms
if(k3 == 0)
{
if(hour > 23) hour = 0;
else hour++;
}
while(k3 == 0);
}
if(k4 == 0)
{
delay(10);//延時(shí)10ms
if(k4 == 0)
{
TR0 = 0;
TR1 = 0;
}
while(k4 == 0);
}
}
/***********定時(shí)器T0中斷(產(chǎn)生時(shí)間數(shù)據(jù))*********/
void i_time() interrupt 1
{
TH0 = (65536 - 50000) / 256; //初值
TL0 = (65536 - 50000) % 256;
if(ms > 19) //1s時(shí)間到
{
ms = 0;
if(sec >59) //1min時(shí)間到
{
sec = 0;
if (min>59)//1h到
{
min = 0;
if(hour > 23) hour = 0;
else hour++;
}
else min++;
}
else sec++;
}
else ms++;//50ms中斷計(jì)數(shù)
}
/***********定時(shí)器T1中斷(產(chǎn)生動(dòng)態(tài)掃描)*********/
void t_display() interrupt 3
{
TH1 = (65536 - 2500) / 256;//給初值 T1給2.5ms
TL1 = (65536 - 2500) % 256;
i++;
if(i > 7) i =0;
switch(i)
{
case 0:P3 = 0x00; P2 = smduan[sec % 10]; P3 = 0x01; //第0次中斷,顯示秒個(gè)位
break;
case 1: P3 = 0x00;P2 = smduan[sec / 10]; P3 = 0x02; //第1次中斷,顯示秒十位
break;
case 2:P3 = 0x00; P2 = smduan[10]; P3 = 0x04; //第2次中斷,顯示-
break;
case 3:P3 = 0x00; P2 = smduan[min % 10]; P3 = 0x08; //第3次中斷,顯示分個(gè)位
break;
case 4: P3 = 0x00;P2 = smduan[min / 10]; P3 = 0x10; //第4次中斷,顯示分十位
break;
case 5: P3 = 0x00;P2 = smduan[10]; P3 = 0x20; //第5次中斷,顯示-
break;
case 6:P3 = 0x00; P2 = smduan[hour % 10]; P3 = 0x40; //第6次中斷,顯示時(shí)個(gè)位
break;
case 7:P3 = 0x00; P2 = smduan[hour / 10]; P3 = 0x80; //第7次中斷 ,顯示時(shí)十位
break;
}
}
/***************主函數(shù)************/
main()
{
csh();
while(1)
{
key();
}
}
復(fù)制代碼
所有資料51hei提供下載:
KEIL.zip
(25.43 KB, 下載次數(shù): 33)
2018-11-14 16:21 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1