欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
基于單片機(jī)數(shù)碼管顯示的鬧鐘
[打印本頁(yè)]
作者:
zhoushiling
時(shí)間:
2019-10-3 10:46
標(biāo)題:
基于單片機(jī)數(shù)碼管顯示的鬧鐘
/***********************************************************
名稱:基于AT89S52數(shù)碼管系統(tǒng)測(cè)試程序
要求:流水燈電路測(cè)試,數(shù)碼管電路測(cè)試,獨(dú)立式鍵盤電路測(cè)試,蜂鳴器電路測(cè)試
作者:劉楊
時(shí)間:2012年12月12日
電路描述:S1到S8一鍵一功能;P3口連接LED流水燈;數(shù)碼管驅(qū)動(dòng)電路采用74HC573;P1口連接獨(dú)立式鍵盤;P0口,P2口分別控制數(shù)碼管位和段;
************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit S1=P1^0; //流水燈順時(shí)針流水
sbit S2=P1^1; //流水燈逆時(shí)針
sbit S3=P1^2; //數(shù)碼管顯示數(shù)字0-7
sbit S4=P1^3; //顯示數(shù)字鐘
sbit S5=P1^4; //流水燈逆時(shí)針
sbit S6=P1^5; //數(shù)碼管顯示數(shù)字0-7
sbit S7=P1^6;
sbit S8=P1^7; //顯示數(shù)字鐘
sbit P3_1=P3^1; //蜂鳴器報(bào)警控制端
uchar code discode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF};
uchar code discode0[]={0x92,0x86,0xC6,0xC6,0xC1,0x92};
uchar code discode1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x3F};
uchar disbitcode[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar disbuf[8]={0,0,10,0,0,10,0,0};
uchar disbuf0[8]={0,0,10,0,0,10,0,0};
uchar disbuf1[8]={0,0,10,0,0,10,0,0};//顯示緩沖區(qū)
uchar cent,second,minite,hour,second1,minite1,hour1;
/*函數(shù)申明*/
void display(void);
void ini(void);
void t0(void);
/*************延時(shí)程序**************/
void delay(uint m)
{
while(--m);
}
/*************初始化程序**************/
void ini(void)
{
TMOD=0x01;
TH0=(65536-46082)/256;
TL0=(65536-46082)%256;
ET0=1;
EA=1;
}
/************緩存程序****************/
void hccx()
{
disbuf1[0]=disbuf[0]=second%10;
disbuf1[1]=disbuf[1]=second/10;
disbuf1[3]=disbuf[3]=minite%10;
disbuf1[4]=disbuf[4]=minite/10;
disbuf1[6]=disbuf[6]=hour%10;
disbuf1[7]=disbuf[7]=hour/10;
}
/***********暫停程序****************/
void zd (void)
{
uchar i;
//hccx();
for(i=0;i<8;i++)
{
P0=discode[disbuf[i]];
P2=disbitcode[i];
delay(100);
}
}
/************鬧鐘初始化程序*********/
void naozhong (void)
{
uchar i;
disbuf0[0]=second1%10; //更新顯示緩沖區(qū)
disbuf0[1]=second1/10;
disbuf0[3]=minite1%10;
disbuf0[4]=minite1/10;
disbuf0[6]=hour1%10;
disbuf0[7]=hour1/10;
for(i=0;i<8;i++)
{
P0=discode[disbuf0[i]];
P2=disbitcode[i];
delay(100);
}
}
/***********開(kāi)機(jī)顯示畫(huà)面********/
void shuma()
{
while((S1==1)&&(S2==1))
{
P0=0X8C;
P2=0X01;
}
}
/*************顯示程序**************/
void display(void)
{
uchar i;
for(i=0;i<8;i++)
{
P0=discode[disbuf[i]];
P2=disbitcode[i];
delay(100);
}
}
/*******設(shè)置成功畫(huà)面***********/
void succer(void)
{
uchar i;
disbuf0[0]=second1%10; //更新顯示緩沖區(qū)
disbuf0[1]=second1/10;
disbuf0[3]=minite1%10;
disbuf0[4]=minite1/10;
disbuf0[6]=hour1%10;
disbuf0[7]=hour1/10;
for(i=0;i<6;i++)
{
P0=discode0[i];
P2=disbitcode[i];
delay(100);
}
}
/**************鬧鐘顯示程序*********/
void naoxian(void)
{
uchar i;
for(i=0;i<8;i++)
{
P0=0xff;
P0=discode1[disbuf[i]];
P2=disbitcode[i];
delay(100);
}
}
/***********調(diào)整顯示程序**********/
void tzcx0()
{
uchar i;
for(i=0;i<8;i++)
{
P0=discode[disbuf1[i]];
P2=disbitcode[i];
delay(100);
}
}
/*************中斷程序**************/
void t0(void) interrupt 1 using 0 //用第0組寄存器
{
cent++;
if(cent==20)
{
cent=0;
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
disbuf[0]=second%10; //更新顯示緩沖區(qū)
disbuf[1]=second/10;
disbuf[3]=minite%10;
disbuf[4]=minite/10;
disbuf[6]=hour%10;
disbuf[7]=hour/10;
}
TH0=(65536-46082)/256;
TL0=(65536-46082)%256;
}
/************按鍵掃描程序*****************/
uchar keyscan()
{
uchar tmp; //列號(hào),行號(hào)
P1=0xff; //發(fā)全行0掃描碼
if((P1&0xff)!=0xff) //若有鍵按下
{
delay(1000); // 延時(shí)去抖
if((P1&0xff)!=0xff) //有鍵按下
{
tmp=(P1&0xff);
do{}while((P1&0xff)!=0xff);
tmp=~tmp;
return (tmp); //還回鍵值
}
}
return (0); //無(wú)鍵按下,還回0
}
/**************主程序************/
void main(void)
{
uchar i,a=0,b=0,c=0,d=0,e=0,f=0,v,nu=0,num=0,n=0;
ini();
shuma();
v=keyscan();
if(v==1||v==2||v==16||v==32||v==64||v==128)
{
while(1)
{
v=keyscan();
switch(v)
{
case 1:
P3=0xff;
P2=0x00;
TR0=1; /*開(kāi)始時(shí)鐘測(cè)試*/
while(v==1||v==0)
{
delay(10);
display();
v=keyscan(); //調(diào)鍵掃描程序
}
break;
case 2:
while(v==2||v==0) /*暫停測(cè)試*/
{
ET0=0;
delay(10);
hccx();
zd();
v=keyscan(); //調(diào)鍵掃描程序
}
break;
case 16:
while(v==16||(v==0)) /*調(diào)整測(cè)試*/
{
if(num<3) num++;
else {num=1;}
v=0;
while((num==1)&&(v==0))
{
hccx();
while(a==0)
{
for(i=0;i<8;i++)
{
P0=discode[disbuf1[i]];
P2=disbitcode[i];
delay(100);
}
a=keyscan();
}
while(a==4) /*數(shù)碼管顯示數(shù)字0-7測(cè)試*/
{
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
hccx();
tzcx0(); //掃描間隙延時(shí)
a=keyscan(); //調(diào)鍵掃描程序
}
while(a==8) /*顯示數(shù)字鐘測(cè)試*/
{
second--;
if(second<=0)
{
second=59;
minite--;
if(minite<=0)
{
minite=59;
hour--;
if(hour<=0)
{
hour=23;
}
}
}
hccx();
tzcx0(); //掃描間隙延時(shí)
a=keyscan(); //調(diào)鍵掃描程序
}
v=keyscan();
}
while(num==2&&v==0)
{
hccx();
while(b==0)
{
for(i=0;i<8;i++)
{
P0=discode[disbuf1[i]];
P2=disbitcode[i];
delay(100);
}
b=keyscan();
}
while(b==4) /*數(shù)碼管顯示數(shù)字0-7測(cè)試*/
{
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
hccx();
tzcx0(); //掃描間隙延時(shí)
b=keyscan(); //調(diào)鍵掃描程序
}
while(b==8) /*顯示數(shù)字鐘測(cè)試*/
{
minite--;
if(minite<=0)
{
minite=59;
hour--;
if(hour<=0)
{
hour=23;
}
}
hccx();
tzcx0(); //掃描間隙延時(shí)
b=keyscan(); //調(diào)鍵掃描程序
}
v=keyscan();
}
while(num==3&&v==0)
{
hccx();
while(c==0)
{
for(i=0;i<8;i++)
{
P0=discode[disbuf1[i]];
P2=disbitcode[i];
delay(100);
}
c=keyscan();
}
while(c==4) /*數(shù)碼管顯示數(shù)字0-7測(cè)試*/
{
hour++;
if(hour==24)
{
hour=0;
}
hccx();
tzcx0(); //掃描間隙延時(shí)
c=keyscan(); //調(diào)鍵掃描程序
}
while(c==8) /*顯示數(shù)字鐘測(cè)試*/
{
hour--;
if(hour<=0)
{
hour=23;
}
hccx();
tzcx0(); //掃描間隙延時(shí)
c=keyscan(); //調(diào)鍵掃描程序
}
v=keyscan();
}
}
break;
case 32: /*數(shù)碼管各段循環(huán)測(cè)試*/
while(v==32||v==0)
{
ET0=1;
num=0;
a=b=c=0;
display();
v=keyscan(); //調(diào)鍵掃描程序
}
break;
case 64:
while(v==64||v==0)
{
if(nu<3) nu++;
else {nu=1;}
v=0;
while(nu==1&&v==0)
{
while(d==0)
{
naozhong();
d=keyscan();
}
while(d==4) /*數(shù)碼管顯示數(shù)字0-7測(cè)試*/
{
second1++;
if(second1==60)
{
second1=0;
minite1++;
if(minite1==60)
{
minite1=0;
hour1++;
if(hour1==24)
{
hour1=0;
}
}
}
naozhong();
//naoxian(); //掃描間隙延時(shí)
d=keyscan(); //調(diào)鍵掃描程序
}
while(d==8) /*顯示數(shù)字鐘測(cè)試*/
{
second1--;
if(second1<=0)
{
second1=59;
minite1--;
if(minite1<=0)
{
minite1=59;
hour1--;
if(hour1<=0)
{
hour1=23;
}
}
}
naozhong();
//naoxian(); //掃描間隙延時(shí)
d=keyscan(); //調(diào)鍵掃描程序
}
v=keyscan();
}
while(nu==2&&v==0)
{
while(e==0)
{
naozhong();
e=keyscan();
}
while(e==4) /*數(shù)碼管顯示數(shù)字0-7測(cè)試*/
{
minite1++;
if(minite1==60)
{
minite1=0;
hour1++;
if(hour1==24)
{
hour1=0;
}
}
naozhong();
// naoxian(); //掃描間隙延時(shí)
e=keyscan(); //調(diào)鍵掃描程序
}
while(e==8) /*顯示數(shù)字鐘測(cè)試*/
{
minite1--;
if(minite1<=0)
{
minite1=59;
hour1--;
if(hour1<=0)
{
hour1=23;
}
}
naozhong();
//naoxian(); //掃描間隙延時(shí)
e=keyscan(); //調(diào)鍵掃描程序
}
v=keyscan();
}
while(nu==3&&v==0)
{
while(f==0)
{
naozhong();
f=keyscan();
}
while(f==4) /*數(shù)碼管顯示數(shù)字0-7測(cè)試*/
{
hour1++;
if(hour1==24)
{
hour1=0;
}
naozhong();
//naoxian(); //掃描間隙延時(shí)
f=keyscan(); //調(diào)鍵掃描程序
}
while(f==8) /*顯示數(shù)字鐘測(cè)試*/
{
hour1--;
if(hour1<=0)
{
hour1=23;
}
naozhong();
//naoxian(); //掃描間隙延時(shí)
f=keyscan(); //調(diào)鍵掃描程序
}
v=keyscan();
}
}
break;
case 128:
P3=0XFF;
while(v==128||v==0)
{
if(n<2) n++;
else { n=1;}
v=0;
while(n==1&&v==0)
{
succer();
v=keyscan();
}
while(n==2&&v==0)
{
hccx();
if(( disbuf0[0]==disbuf[0])&&(disbuf0[1]==disbuf[1])&&(disbuf0[3]==disbuf[3])&&(disbuf0[4]==disbuf[4])&&(disbuf0[6]==disbuf[6])&&(disbuf0[7]==disbuf[7]))
P3_1=0;
naoxian();
v=keyscan();
}
}
break;
}
}
}
}
復(fù)制代碼
鬧鐘.zip
2019-10-3 10:45 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
48.65 KB, 下載次數(shù): 4, 下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1