欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機數字鐘仿真
[打印本頁]
作者:
3183627184
時間:
2018-7-2 17:50
標題:
單片機數字鐘仿真
數字鐘仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(27.56 KB, 下載次數: 41)
下載附件
2018-7-3 02:05 上傳
0.png
(13.87 KB, 下載次數: 32)
下載附件
2018-7-3 02:06 上傳
單片機源程序如下:
#include<reg51.h> //包含51單片機的頭文件
unsigned char code teble[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//包含數碼位碼
unsigned char code table[10]={0Xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0Xf8,0X80,0X90};//數碼管斷碼
unsigned char shijian[6]={0,0,0,0,0,0};//時間顯示
unsigned char shijian2[6]={0,0,0,0,0,0};//星期顯示
unsigned char nyr[6]={0,0,0,0,0,0}; //年月日顯示
unsigned char nyr1[6]={0,0,0,0,0,0};
void zh(); //狀態函數
void display(); //顯示函數
void week();//星期顯示
void miaobiao();//秒表顯示
unsigned char keysc();//按鍵模塊
void mDelay(unsigned int Delay); //延遲函數
unsigned char hour,sec,minute;//定義小時,分鐘,秒
unsigned char day=22,month=05,year=18; //定義day month ,year
unsigned char i,w,year1,j,se,fe,mi; //定義i,w,year1,j,se,fe,mi.
sbit k1=P1^4;//按鍵k1=P1.0;
sbit k2=P1^1;//按鍵k1=P1.1;
sbit k3=P1^2; //按鍵k1=P1.21;
sbit k4=P1^3;//按鍵k1=P1.3;
unsigned char display_state=0;
unsigned char keysc() //按鍵模塊
{if(!k1) //判斷按鍵按下
{mDelay(5); //延時消抖
if(!k1)
while(!k1) display(); //判斷按鍵是否按下返回,因為按下時k1=0即!k1=1,display是消閃爍,一起來控制按下按鍵為一次的變量
return 1;
}
if(!k2) //判斷按鍵按下
{mDelay(5); //延時消抖
if(!k2)
while(!k2) display(); //判斷按鍵是否按下返回,因為按下時k1=0即!k1=1,display是消閃爍,一起來控制按下按鍵為一次的變量
return 2;
}
if(!k3)
{mDelay(5);
if(!k3)
while(!k3) display(); //同上所示
return 3;
}
if(!k4)
{mDelay(5);
if(!k4)
while(!k4) display(); //如上所示
return 4;
}
return 0;
}
void display() //顯示模塊
{unsigned char k; //定義k
unsigned char y; //定義y
unsigned char data1; //定義data1
if(display_state==0)
{
for(k=0;k<6;k++) //使得k等于0到6
{y=0x00;
if(k==2||k==4) y=0x80;
P2=0X00;
data1=shijian[k];
P0=table[data1]-y;
P2=teble[k];
mDelay(2);
}
}
if(display_state==1)
{
for(k=0;k<6;k++)
{y=0x00;
if(k==2||k==4) y=0x80;
P2=0X00;
data1=nyr[k];
P0=table[data1]-y;
P2=teble[k];
mDelay(2);
}
}
if(display_state==2)
{for(k=0;k<6;k++)
{y=0x00;
if(k==2||k==4) y=0x80;
P2=0X00;
data1=nyr1[k];
P0=table[data1]-y;
P2=teble[k];
mDelay(2);
}
}
if(display_state==3)
{for(k=0;k<6;k++)
{y=0x00;
if(k==2||k==4) y=0x80;
P2=0X00;
data1=shijian2[k];
P0=table[data1]-y;
P2=teble[k];
mDelay(2);
}
}
}
void mDelay(unsigned int Delay)
{unsigned int k;
for(;Delay>0;Delay--)
{for(k=0;k<54;k++);
}
}
void t0() interrupt 1 //外部中斷0
{
TH0=55536/256;
TL0=55536%256;
i++;
}
void t1() interrupt 3 //定時器中斷1
{TH0=55536/256;
TL0=55536%256;
j++;
}
void zh() //轉換模塊
{
if(i==100)
{ i=0;sec++;
if(sec==60) {sec=0;minute++;}
if(minute==60) {minute=0;hour++;}
if(hour==24) {hour=0;day++;}
if(day==31) {day=0;month++;}
if(month==12) {month=0;year++;}
if(year==99) {year=0;}
if(month==1||month==5||month==7||month==8||month==10||month==12)
if(day==31){day=0;month++;}
if(month==3||month==4||month==6||month==9||month==11)
if(day==30){day=0;month++;}
if(month==12){month=0;year++;}
if(year/4==0)if(month==2)if(day==29)
{day=0;month++;}
else if(month==2)if(day==28)
{day=0;month++;}
}
if(display_state==0)
shijian[0]=sec%10;
shijian[1]=sec/10;
shijian[2]=minute%10;
shijian[3]=minute/10;
shijian[4]=hour%10;
shijian[5]=hour/10;
if(display_state==1)
nyr[0]=day%10;
nyr[1]=day/10;
nyr[2]=month%10;
nyr[3]=month/10;
nyr[4]=year%10;
nyr[5]=year/10;
if(display_state==3)
shijian2[0]=j%10;
shijian2[1]=j/10;
shijian2[2]=se%10;
shijian2[3]=se/10;
shijian2[4]=fe%10;
shijian2[5]=fe/10;
}
void week() //星期顯示模塊
{if(month==1||month==2)
{month+=12;
year--;
}
year1=year+2000;
if(month==1||month==2) {month+=12; year1--;}
w=(day+2*month+3*(month+1)/5+year1+year1/4-year1/100+year1/400)%7;
nyr1[0]=w+2;
}
void miaobiao()
{ if(j==100)
{se++;j=0; j=0; }
if(se==60){ fe++;se=0;
}
shijian2[0]=j%10;
shijian2[1]=j/10;
shijian2[2]=se%10;
shijian2[3]=se/10;
shijian2[4]=fe%10;
shijian2[5]=fe/10;
}
void main()
{
unsigned char key; //定義key
unsigned char mun=0;//定義mun
TMOD=0X01;
TH0=55536/256;
TL0=55536%256;
TR0=1;
EA=1;
ET0=1; //采用定時器0的方式0;
TMOD=0X11;
TH0=55536/256;
TL0=55536%256;
TR1=0;
EA=1;
ET1=1; //采用定時器1的方式工作方式1
while(1) //循環
{
week(); //星期顯示
zh(); //狀態庫
display(); //顯示模塊
miaobiao(); //秒表顯示
key=keysc(); //使得key等于按鍵的值
zh(); //狀態顯示
display(); //顯示
switch(key)
{
case 1:if(display_state==0)//如果display_state==0等于0
{TR0=0;mun++;if(mun>3) {mun=0;TR0=1;}}//讓定時器0停止工作如果mun大于3那么定時器從新開始;
if(display_state==1) //如果display_state==0等于1那么執行以下代碼
{TR0=0;mun++;if(mun>3) {mun=0;TR0=1;}} break;
case 2:if(display_state==0) //如果display_state==0等于0
{
if(mun==1) {sec++; if(sec==60) sec=00;} //如果mun等于1,秒加加,當秒加到60的時候秒等于0
if(mun==2) {minute++; if(minute==60) minute=00;} //如果mun等于1,。分加加,當分加到60的時候分等于0
if(mun==3) {hour++; if(hour==24) hour=00;} //如果hour等于1,shi加加,當shi加到60的時候秒等于0
}
if(display_state==1)
{
if(mun==1) {day++; if(day==32)day=00;}
if(mun==2) {month++; if(month==12) month=00;}
if(mun==3) {year++; if(year==99) year=00;}
}
if(display_state==2) //display_state等于2的時候
{
if(mun==1) {w++; if(w==7)day=01;} //并且mun等于1的時候w++,當w等于
}
if(display_state==3)
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
新建文件夾 (2).rar
(57.66 KB, 下載次數: 29)
2018-7-2 17:50 上傳
點擊文件名下載附件
數字鐘
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1