STC12C2052AD單片機(jī)控制的數(shù)碼管時(shí)鐘,數(shù)碼管是共陽(yáng)4位時(shí)鐘數(shù)碼管,由于使用單片機(jī)真驅(qū),電路比較簡(jiǎn)單,且使用的材料和工具也很簡(jiǎn)單,用數(shù)碼管顯示,單片機(jī)控制,兩個(gè)按鍵調(diào)時(shí),蜂鳴器整點(diǎn)報(bào)時(shí)。所需要的元件如下:
材料有以下這些:
STC12C2052AD單片機(jī)一片
黃色共陽(yáng)4位時(shí)鐘數(shù)碼管一塊
6mm×6mm按鍵兩個(gè)
杜邦線插針2p兩個(gè)
無(wú)源蜂鳴器一個(gè)
20腳+14腳芯片座各一個(gè)
洞洞板一塊(截取一小部分)
100歐電阻4個(gè)
程序如下:
/************************************************************************************/
#include 《STC12C2052AD.h》 //聲明頭文件
sbit key1=P3^4; //按鍵接口定義
sbit key2=P3^5; //按鍵接口定義
sbit speaker=P3^7; //蜂鳴器接口定義
/************************************************************************************/
unsigned char code LED[10]={0x20,0xA7,0x90,0x82,0x07,0x42,0x40,0xA6,0x00,0x02};//數(shù)碼管段位碼定義
unsigned int time; //全局秒基準(zhǔn)定義
/*-------------------------------------延時(shí)函數(shù)-------------------------------------*/
void delayms (unsigned int a){
unsigned int i;
while( --a != 0){
for(i = 0; i 《 600; i++);
}
}
/*----------------------------------蜂鳴器驅(qū)動(dòng)函數(shù)----------------------------------*/
void beep (void)
{
unsigned char i=30;
while(i--)
{
speaker=~speaker;
delayms(3);
}
}
/*----------------------------------數(shù)碼管驅(qū)動(dòng)函數(shù)----------------------------------*/
void display (unsigned char hour,min)
{
unsigned char H1,H2,M1,M2;
P3=0xf8; //數(shù)碼管位選
P1 = LED[H1]; //數(shù)碼管段選
delayms (2); //掃描延時(shí)
P3=0xf4; //數(shù)碼管位選
P1 = LED[H2]; //數(shù)碼管段選
delayms (2); //掃描延時(shí)
P3=0xf2; //數(shù)碼管位選
P1 = LED[M1]; //數(shù)碼管段選
delayms (2); //掃描延時(shí)
P3=0xf1; //數(shù)碼管位選
P1 = LED[M2]; //數(shù)碼管段選
delayms (2); //掃描延時(shí)
/*--------------------------------------分定義--------------------------------------*/
M1=min/10;//取分十位
min=min%10;//取余
M2=min;//取分個(gè)位
/*--------------------------------------時(shí)定義--------------------------------------*/
H1=hour/10;//取時(shí)十位
hour=hour%10;//取余
H2=hour;//取時(shí)個(gè)位
}
/*-----------------------------------按鍵去抖函數(shù)-----------------------------------*/
void qudou (unsigned char hour,min)
{
unsigned char i;
for(i=0;i《25;i++){//循環(huán)顯示,等于鍵盤去抖的功能
display (hour,min);
}
}
/*--------------------------------------主函數(shù)--------------------------------------*/
void main(void)
{
////定時(shí)器初始設(shè)置
TMOD=0x01;//定時(shí)器工作方式1
TH0=0x3C;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號(hào)
TL0=0xB0;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號(hào)
ET0=1;//開定時(shí)器中斷
EA=1;//開總中斷
TR0=1;//啟動(dòng)定時(shí)器
/*************************************************************************************/
while(1)
{
unsigned char hour,min;//定義時(shí)分
display (hour,min);//調(diào)用顯示函數(shù)
if (time》59)//60秒向分進(jìn)1
{
time=0;
min++;
}
if (min》59)//60分向時(shí)進(jìn)1
{
min=0;
hour++;
beep ();
}
if (hour》23)//24時(shí)時(shí)分秒清零
{
hour=0;
min=0;
time=0;
}
/*-----------------------------------按鍵判斷程序-----------------------------------*/
if(key1==0)
qudou (hour,min);
if (key1==0) {hour++;}
if(key2==0)
qudou (hour,min);
if (key2==0) {min++;}
}
}
/*-----------------------------------中斷服務(wù)程序-----------------------------------*/
void Timer0_Routine(void) interrupt 1
{
unsigned char a;
TH0=0x3C;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號(hào)
TL0=0xB0;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號(hào)
a++;//定時(shí)器循環(huán)計(jì)數(shù)20次為一秒
if (a==20){//定時(shí)器循環(huán)計(jì)數(shù)20次為一秒
a=0;//次數(shù)清零,從新循環(huán)計(jì)數(shù)
time++;//秒加一
}
}
/************************************************************************************/
-
單片機(jī)
+關(guān)注
關(guān)注
6044文章
44631瀏覽量
639097 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1887瀏覽量
91465 -
時(shí)鐘程序
+關(guān)注
關(guān)注
0文章
15瀏覽量
7657
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論