欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
簡易單片機電子鐘時鐘 AD格式電路圖+仿真+代碼
[打印本頁]
作者:
jill110
時間:
2019-1-6 10:44
標題:
簡易單片機電子鐘時鐘 AD格式電路圖+仿真+代碼
可用于單片機學習
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(19.07 KB, 下載次數: 32)
下載附件
2019-1-12 18:55 上傳
0.png
(39.3 KB, 下載次數: 27)
下載附件
2019-1-12 18:55 上傳
單片機源程序如下:
/************************************************************
作品名字:簡易聲光報時時鐘
功能:六位數碼管顯示時分秒,整點半點報時 ,夜間只有燈光提醒
二十四小時制
到整點時長鳴1次,LED閃爍10次
到半點時短促鳴響1次,LED閃爍5次
制作說明:P0接數碼管段選,P2低6位接數碼管位
**************************************************************/
#include<reg52.h> //頭文件
#define uc unsigned char //宏定義
#define ui unsigned int //宏定義
sbit LED=P3^3;//定義LED
sbit key1=P3^4;//定義調小時
sbit key2=P3^5;//定義調分鐘
sbit key3=P3^6;//定義秒清零
sbit beep=P3^7;//設蜂鳴器
uc min,hour,sec,led,num; //無符號字符型變量
bit bdata hourLED,halfLED,hourbeep,halfbeep; //位變量
uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*0,1,2,3,4,5,6,7,8,9,.*///共陰極編碼
void delay(ui x)//1ms延時函數
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<121;j++);
}
void display()//掃描顯示函數,高位到低位
{
P0=tab[hour/10];//給小時的十位送形
P2=0xdf;//11011111 //位選
delay(1); //延時動態掃描
P2=0xff; //關閉位選
P0=(tab[hour%10])|0x80;//給第二位后加“點
P2=0xef;//11101111
delay(1);
P2=0xff;
P0=tab[min/10];
P2=0xf7;//11110111
delay(1);
P2=0xff;
P0=(tab[min%10])|0x80;//給第四位后加“點”
P2=0xfb;//11111011
delay(1);
P2=0xff;
P0=tab[sec/10];
P2=0xfd;//11111101
delay(1);
P2=0xff;
P0=tab[sec%10];
P2=0xfe;//11111110
delay(1);
P2=0xff;
}
void keyscan()//鍵盤掃描,開關接地
{
if(key1==0) //如果小時加按鍵按下
{
delay(5); //延時去抖
if(key1==0) //確定是否按鍵
{
hour++; //小時加一
if(hour==24) //如果小時等于24
hour=0; //小時歸零
}
while(!key1) display();//判斷是否松開
}
if(key2==0) //如果分鐘加按鍵按下
{
delay(5); //延時去抖
if(key2==0) //確定是否按鍵
{
min++; //分鐘加一
if(min==60)// 如果分鐘等于60
min=0; //分鐘歸零
}
while(!key2) display();//判斷是否松開
}
if(key3==0)//判斷調整秒按鍵
{
delay(5); //延時去抖
if(key3==0) //確定是否按鍵
{sec=0;} //秒清零
while(!key3) display();//判斷是否松開
}
}
void strike()//報時函數
{
if((hour>6)&&(hour<22))//判斷大于6點并且小于22點
{
if(sec==0)//以下判斷是否整點
{
if(min==0)//如果秒和分都等于0
{
hourbeep=1; //那么蜂鳴器和小燈位開啟
hourLED=1;
}
else if(min==30)//如果分鐘等于30
{
if(num<10) //閃5下響一聲
halfbeep=1;
halfLED=1;
}
}
}
else //小于6點和大于22點的時候
{
if(sec==0)//以下判斷是否整點
{
if(min==0)//如果分鐘等于0
hourLED=1; //led位開
else if(min==30)//如果分鐘=0
halfLED=1;//進行半點報時
}
}
}
void init()//初始化函數
{
sec=0;//一通電,顯示12:30:00,蜂鳴器響一下
min=30;
hour=12;
TMOD=0x01;//設置定時器為定時器0工作方式為1
TH0=(65536-50000)/256; //賦初值
TL0=(65536-50000)%256; //賦初值
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1; //啟動定時器0
}
void main()//主函數
{
init();//初始化
while(1) //主循環
{
display(); //顯示
keyscan();//掃描是否有鍵按下
strike();//報時函數
}
}
void time0() interrupt 1 //定時器中斷
{
TH0=(65536-50000)/256;//重賦初值
TL0=(65536-50000)%256;//重賦初值
num++;
if((num%10==0)&&(hourLED==1)) //整點報時
{
led++;
LED=~LED;//取反實現閃爍
if(led==20) //閃10次
{
led=0; //之后關閉閃爍
LED=1;
hourLED=0;
}
}
else if((num%10==0)&&(halfLED==1))//半點報時
{
led++;
LED=~LED; //取反實現閃爍
if(led==10)//閃5次
{
led=0; //關閉閃爍
LED=1;
halfLED=0;
}
}
if(hourbeep==1) //蜂鳴器響標志位
{
if(num==1)
beep=0;
if(num==20) //長響次之后
{
beep=1; //關閉
hourbeep=0;
}
}
else if(halfbeep==1) //蜂鳴器響標志位
{
if(num<10)
beep=0;
if(num==10) //短響之后
{
beep=1; //關閉
halfbeep=0;
}
}
if(num==20) //計時20次為1s時間
{
num=0;
sec++; //秒加一
if(sec==60)//如果秒等于60
{
sec=0; //秒歸零
min++; //分鐘加一
if(min==60)//如果分鐘等于60
{
min=0; //分鐘歸零
hour++; //小時加一
if(hour==24) //如果小時等于24
{hour=0;}//小時歸零
}
}
}
}
復制代碼
所有資料51hei提供下載:
簡易時鐘.7z
(218.54 KB, 下載次數: 28)
2019-1-12 18:57 上傳
點擊文件名下載附件
簡易時鐘 電子鐘
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1