你們可以看看,我也做的不太哈
課程設計任務書 課程名稱:單片機原理與應用 設計題目:C51系列單片機時(鬧)鐘 專業:電子信息工程班級: 學生姓名:學號: 起迄日期: 指導教師: 劉國亮
Protues仿真電路
0.002.jpg (40.98 KB, 下載次數: 99)
下載附件
2017-6-28 00:17 上傳
電子鐘功能
0.003.jpg (42.87 KB, 下載次數: 84)
下載附件
2017-6-28 00:17 上傳
日期顯示
0.004.jpg (41.94 KB, 下載次數: 65)
下載附件
2017-6-28 00:17 上傳
鬧鐘顯示及鬧鐘開關顯示位 右側1為鬧鈴開 0為關
0.005.jpg (41.43 KB, 下載次數: 105)
下載附件
2017-6-28 00:17 上傳
四個獨立按鍵實現功能切換及各功能設置 設置時設置位閃爍
0.006.jpg (38.76 KB, 下載次數: 79)
下載附件
2017-6-28 00:17 上傳
0.png (31.82 KB, 下載次數: 81)
下載附件
2017-6-28 00:13 上傳
0.png (44.27 KB, 下載次數: 64)
下載附件
2017-6-28 00:12 上傳
單片機源程序如下:
- #include
- #define uchar unsigned char
- #define uint unsigned int
- #define play P0
- sbit LSA=P1^0;
- sbit LSB=P1^1;
- sbit LSC=P1^2;
- sbit led=P2^2; //鬧鐘檢測
- sbit k1=P2^7;// 功能切換
- sbit k2=P2^6;//設置加
- sbit k3=P2^5;// 設置減
- sbit k4=P2^4; //設置位選
- sbit beet=P1^5; //蜂鳴器輸出口
- uchar y;//按鍵松開
- uchar kai;//鬧鐘開啟標志
- uchar she;//設置標志
- uchar t;//時間計數
- uchar num;//功能切換
- uchar fen;
- uchar shi;
- uchar miao;
- uchar yue;
- uchar nian;
- uchar ri;
- uchar shijian[8];
- uchar shi1; //鬧鈴時
- uchar fen1; //鬧鈴分
- unsigned char code shuma[12]={
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //數碼管顯示數組0到9
- 0x7f,0x6f,0x40,0x00};
- uchar brunyue[12]={31,28,31,30,31,30,31,31,30,31,30,31};
- uchar runyue[12]={31,29,31,30,31,30,31,31,30,31,30,31};
- void zhongshe();
- void qishe();
- void naoshe();
- void shezhi();
- void delay10ms(void) //誤差 0us
- {
- unsigned char a,b,c;
- for(c=1;c>0;c--)
- for(b=38;b>0;b--)
- for(a=130;a>0;a--);
- }
- void naozhong()
- { uint a,m;
- if((shi1==shi)&&(fen1==fen)&&(kai%2))
- { for(m=20;m>0;m--)
- for(a=10;a>0;a--)
- if((k1==0)||(k2==0)||(k3==0)||(k4==0))
- { kai=0;break; }
- else
- beet=~beet;
- }
- }
- void plays() //輸出顯示
- {
- unsigned char i;
- unsigned int j;
- for(i=0;i<8;i++)
- {
- switch(i) //位選,選擇點亮的數碼管,
- {
- case(0):
- LSA=0;LSB=0;LSC=0; break;//顯示第0位
- case(1):
- LSA=1;LSB=0;LSC=0; break;//顯示第1位
- case(2):
- LSA=0;LSB=1;LSC=0; break;//顯示第2位
- case(3):
- LSA=1;LSB=1;LSC=0; break;//顯示第3位
- case(4):
- LSA=0;LSB=0;LSC=1; break;//顯示第4位
- case(5):
- LSA=1;LSB=0;LSC=1; break;//顯示第5位
- case(6):
- LSA=0;LSB=1;LSC=1; break;//顯示第6位
- case(7):
- LSA=1;LSB=1;LSC=1; break;//顯示第7位
- }
- play=shuma[shijian[i]];
- if(t>50)
- { switch(she)
- {
- case(3):
- if((i==0)||(i==1))
- play=0x00; break;
- case(2):
- if((i==3)||(i==4))
- play=0x00; break;
- case(1):
- if((i==6)||(i==7))
- play=0x00; break;
- }
- }
- j=10; //掃描間隔時間設定
- while(j--);
- play=0x00;//消隱
- }
- }
- void nao() //鬧鐘賦值
- { shijian[7]=kai;
- shijian[6]=11;
- shijian[5]=11;
- shijian[4]=fen1%10;
- shijian[3]=fen1/10;
- shijian[2]=10;
- shijian[1]=shi1%10;
- shijian[0]=shi1/10;
- }
- void rili() //日期賦值
- { shijian[7]=ri%10;
- shijian[6]=ri/10;
- shijian[5]=10;
- shijian[4]=yue%10;
- shijian[3]=yue/10;
- shijian[2]=10;
- shijian[1]=nian%10;
- shijian[0]=nian/10;
- }
- void zhong() //電子鐘賦值
- { shijian[7]=miao%10;
- shijian[6]=miao/10;
- shijian[5]=10;
- shijian[4]=fen%10;
- shijian[3]=fen/10;
- shijian[2]=10;
- shijian[1]=shi%10;
- shijian[0]=shi/10;
- }
- void InitTimer0(void)
- {
- TMOD = 0x01;
- TH0 = 0x0D8;
- TL0 = 0x0F0;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void shezhi() //功能設置函數
- { if((she!=0)&&((k2==0)||(k3==0)))
- { delay10ms();
- if((she!=0)&&((k2==0)||(k3==0)))
- {
- switch(num)
- { case(0):
- zhongshe(); break;
- case(1):
- qishe(); break;
- case(2):
- naoshe();break;
- }
- }
- }
- }
- void main()
- {
- num=0;kai=1;she=0;
- fen1=59;shi1=23;
- miao=0;fen=58; shi=23;
- ri=19; yue=12; nian=13;
- InitTimer0();
- while(1)
- {
- if(k1==0)
- {delay10ms();
- if(k1==0)
- {num=(num+4)%3;
- she=0;}
- led=~led;
- while(!k1) ;}
- if(k4==0)
- {delay10ms();
- if(k4==0)
- she=(she+5)%4;
- while(!k4) ;
- }
- shezhi();
- naozhong();
- plays();
-
- }
- }
- void Timer0Interrupt(void) interrupt 1
- {
- TH0 = 0x0D8;
- TL0 = 0x0F0;
- t++;
- if(t==100)
- { t=0;
- miao++;
- if(miao>59)
- { miao=0;
- fen++;
- if(fen>59)
- {
- fen=0;
- shi++;
- if(shi>23)
- {
- shi=0;
- ri++;
- if(nian%4==0)
- { if(ri>runyue[yue-1])
- { ri=1;
- yue++; }
- if(yue>12)
- { yue=1;
- nian++; }
- }
- else
- {if(ri>brunyue[yue-1])
- {
- ri=0;
- yue++;
- }
- if(yue>12)
- {
- yue=0;
- nian++ ;
- }
- }
- }
- }
- }
- }
- switch(num)
- {
- case(0):
- zhong();break;
- case(1):
- rili();break;
- case(2):
- nao();break;
- default: zhong();
- }
- }
- void zhongshe()
- { switch(she)
- {
- case(1):
- miao=0;InitTimer0();break;
- case(2):
- if(k2==0)
- fen=(fen+61)%60;
- else
- fen=(fen+59)%60;
- break;
- case(3):
- if(k2==0)
- shi=(shi+25)%24;
- else
- shi=(shi+23)%24;
- break;
- }
- while((!k2)||(!k3)) ;
- }
- void naoshe()
- { switch(she)
- {
- case(1):
- if(kai==1)
- kai=0;
- else kai=1; break;
- case(2):
- if(k2==0)
- fen1=(fen1+61)%60;
- else
- fen1=(fen1+59)%60;
- break;
- case(3):
- if(k2==0)
- shi1=(shi1+25)%24;
- else
- shi1=(shi1+23)%24;
- break;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
電子鐘.zip
(174.61 KB, 下載次數: 113)
2017-6-27 22:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|