亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
基于單片機的電子時鐘proteus仿真設計
[打印本頁]
作者:
tim2017
時間:
2017-8-17 16:20
標題:
基于單片機的電子時鐘proteus仿真設計
有proteus的仿真,還有源程序。
有興趣的朋友可以一起學習!!
0.png
(23.66 KB, 下載次數: 119)
下載附件
2017-8-17 18:03 上傳
0.png
(55.36 KB, 下載次數: 114)
下載附件
2017-8-17 18:03 上傳
單片機源程序如下:
#include <reg52.h>
#include "ds1302.h"
#include "key.h"
#define uchar unsigned char
#define uint unsigned int
bit WATCH_TIME=1; //數碼管顯示時間標志位,默認情況下顯示時間
bit WATCH_DATE=0; //數碼管顯示日期標志位
bit SET_TIME=0; //數碼管顯示調時時的在調時間
bit SET_DATE=0; //數碼管顯示在調日期
bit SET_CLOK=0; //數碼管顯示在調鬧鐘的數值
bit CLK; //開鬧鐘標志位
sbit led=P2^1;
sbit wela=P2^2;
sbit dula=P2^3;
sbit beef=P2^4;
sbit tom=P2^0;
//uchar tab_date[14]="2012-11-06 TUE";//表示年月日星期
//uchar tab_time[8]="00:00:00";//表示時分秒
uchar tab_t[6],tab_c[6],tab_d[6],date[6],time[6]; //用來顯示調節時間、鬧鐘、日期時顯示相應數據
uchar tiao,second;//調時或設置鬧鐘時,相應的時分秒跳動
uchar code tabdu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*共陰極數*/
uchar code tabwe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
uchar keyval,tiao=2;
uchar hour,min,sec;
uchar year,month,day;
uchar clkh,clkm,clks;
void delay(uint t)
{
uint x,y;
for(x=0;x<t;x++)
for(y=0;y<40;y++);
}
//------------------------------------------
// 數據轉換
//------------------------------------------
void trans()
{
date[0]=tab_1302[6]/10; //年十位
date[1]=tab_1302[6]%10; //年個位
date[2]=tab_1302[4]/10; //月十位
date[3]=tab_1302[4]%10; //月個位
date[4]=tab_1302[3]/10; //日十位
date[5]=tab_1302[3]%10; //日個位
time[0]=tab_1302[2]/10; //小時十位
time[1]=tab_1302[2]%10; //小時個位
time[2]=tab_1302[1]/10; //分十位
time[3]=tab_1302[1]%10; //分個位
time[4]=tab_1302[0]/10; //秒十位
time[5]=tab_1302[0]%10; //秒個位
}
void Getval(uchar hour1,uchar min1,uchar sec1)
{
tab_t[0]=hour1/10;
tab_t[1]=hour1%10;
tab_t[2]=min1/10;
tab_t[3]=min1%10;
tab_t[4]=sec1/10;
tab_t[5]=sec1%10;
}
void Getdate(uchar year1,uchar month1,uchar day1)
{
tab_d[0]=year1/10;
tab_d[1]=year1%10;
tab_d[2]=month1/10;
tab_d[3]=month1%10;
tab_d[4]=day1/10;
tab_d[5]=day1%10;
}
void clkinit()
{
tab_c[0]=2;
tab_c[1]=4;
tab_c[2]=0;
tab_c[3]=0;
tab_c[4]=0;
tab_c[5]=0;
}
void Getclok()
{
tab_c[0]=clkh/10;
tab_c[1]=clkh%10;
tab_c[2]=clkm/10;
tab_c[3]=clkm%10;
tab_c[4]=clks/10;
tab_c[5]=clks%10;
}
void dsptime() //顯示實時時間
{
uchar i;
led=0;
for(i=0;i<6;i++)
{
P3=tabwe[i];
P0=tabdu[time[i]];
delay(5);
}
}
void dspdate() //顯示日期
{
uchar i;
led=1;
for(i=0;i<6;i++)
{
P3=tabwe[i];
P0=tabdu[date[i]];
delay(5);
}
}
void setdisp(uchar tab_set[]) //數碼管顯示當前設置相應的數值并跳動
{
uchar i;
for(i=0;i<6;i++)
{
switch(tiao)
{
case 0:if(i==0||i==1)
{
if(second<8)
{
P3=tabwe[i];
P0=tabdu[tab_set[i]];
}
}
else
{
P3=tabwe[i];
P0=tabdu[tab_set[i]];
}break;
case 1:if(i==2||i==3)
{
if(second<8)
{
P3=tabwe[i];
P0=tabdu[tab_set[i]];
}
}
else
{
P3=tabwe[i];
P0=tabdu[tab_set[i]];
}break;
case 2:if(i==4||i==5)
{
if(second<8)
{
P3=tabwe[i];
P0=tabdu[tab_set[i]];
}
}
else
{
P3=tabwe[i];
P0=tabdu[tab_set[i]];
}break;
}
delay(5);
}
}
void settime() //設置時間
{
SET_TIME=1;
SET_DATE=0;
WATCH_TIME=0;
hour=time[0]*10+time[1];
min=time[2]*10+time[3];
sec=time[4]*10+time[5];
while(1)
{
keyval=Getkey();
switch(keyval)
{
case KEY_MU:tiao++;tiao=tiao%3;break; //調時
case KEY_UP:if(tiao==0){hour++;if(hour==24) hour=0;}
if(tiao==1){min++;if(min==60) min=0;}
if(tiao==2){sec++;if(sec==60) sec=0;};
break;
case KEY_DN:if(tiao==0){hour--;if(hour==255) hour=23;}
if(tiao==1){min--;if(min==255) min=59;}
if(tiao==2){sec--;if(sec==255) sec=59;};
break;
case KEY_OK:tab1_1302[2]=hour;tab1_1302[1]=min;tab1_1302[0]=sec;ds1302_init();SET_TIME=0;WATCH_TIME=1;tiao=1;return;break;
case KEY_BK:SET_TIME=0;WATCH_TIME=1;tiao=1;return;
}
}
}
void setdate() //設置日期
{
uchar keyval;
SET_TIME=0;
SET_DATE=1;
WATCH_DATE=0;
year=date[0]*10+date[1];
month=date[2]*10+date[3];
day=date[4]*10+date[5];
while(1)
{
keyval=Getkey();
switch(keyval)
{
case KEY_MU:tiao++;tiao=tiao%3;break;
case KEY_UP:if(tiao==0){year++;if(year==100) year=0;}
if(tiao==1){month++;if(month==13) month=0;}
if(tiao==2){day++;if(day==32) day=0;};
break;
case KEY_DN:if(tiao==0){year--;if(year==255) year=99;}
if(tiao==1){month--;if(month==0) month=12;}
if(tiao==2){day--;if(day==0) day=31;};
break;
case KEY_OK:tab1_1302[6]=year;tab1_1302[4]=month;tab1_1302[3]=day;
ds1302_init();SET_DATE=0;WATCH_TIME=1;tiao=2;led=0;return;
break;
case KEY_BK:SET_DATE=0;WATCH_TIME=1;tiao=2;led=0;return;
}
}
}
void setclok() //設置鬧鐘
{
clkh=tab_c[0]*10+tab_c[1];
clkm=tab_c[2]*10+tab_c[3];
clks=tab_c[4]*10+tab_c[5];
SET_CLOK=1;
tiao=0;
while(1)
{
keyval=Getkey();
switch(keyval)
{
case KEY_MU:tiao++;tiao=tiao%2;break;
case KEY_UP:if(tiao==0){clkh++;if(clkh>=24) clkh=0;}
if(tiao==1){clkm++;if(clkm==60) clkm=0;};
break;
case KEY_DN:if(tiao==0){clkh--;if(clkh==255) clkh=23;}
if(tiao==1){clkm--;if(clkm==255) clkm=59;};
break;
case KEY_OK:SET_CLOK=0;WATCH_TIME=1;CLK=1;tiao=1;return;break;
case KEY_BK:clkh=24;clkm=0;clks=0;SET_CLOK=0;CLK=0;WATCH_TIME=1;tiao=1;return;
}
}
}
void smg()
{
if(WATCH_TIME)
dsptime(); //顯示時間
else if(WATCH_DATE)
dspdate(); //顯示日期
else if(SET_TIME)
{
Getval(hour,min,sec);
setdisp(tab_t); //顯示在調時間
}
else if(SET_DATE)
{
Getdate(year,month,day);
setdisp(tab_d); //顯示在調日期
}
else if(SET_CLOK)
{
Getclok();
setdisp(tab_c); //顯示在調鬧鐘
}
}
void dealkey(uchar key)
{
switch(key)
{
case KEY_MU:if(WATCH_DATE)
{
led=1;
setdate();
}
else
settime();
break;
case KEY_CK:WATCH_TIME=0;WATCH_DATE=0;setclok();break;
case KEY_TD:WATCH_TIME=~WATCH_TIME;WATCH_DATE=~WATCH_DATE;break;//時間與日期的切換
}
}
void feng()//鬧鐘
{
if(clkh==tab_1302[2]&&clkm==tab_1302[1])
tom=0;
if(KEY_CK==Getkey())
{
tom=1;
CLK=0;
}
}
void main()
{
uchar num;
TMOD=0X01; //T0工作方式1
TH0=(65536-10000)/256;
TL0=(65536-10000)%256; //10毫秒中斷一次
EA=1;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
基于單片機的電子時鐘仿真.7z
(43.07 KB, 下載次數: 71)
2017-8-17 16:20 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
tao87512
時間:
2017-8-21 16:01
小白來學習一下,謝謝分享
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1