欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 基于STC15W4K58S4單片機(jī)的電子萬年歷設(shè)計(jì)源碼與報(bào)告(數(shù)碼管顯示) [打印本頁]

作者: Five-great    時(shí)間: 2018-10-14 14:09
標(biāo)題: 基于STC15W4K58S4單片機(jī)的電子萬年歷設(shè)計(jì)源碼與報(bào)告(數(shù)碼管顯示)
基于STC15W4K58S4單片機(jī)的電子萬年歷(數(shù)碼管顯示)該壓縮包包含源碼TXT文件 源工程文件(Keil uVision4文件)和課程設(shè)計(jì)報(bào)告

電子時(shí)鐘的設(shè)計(jì)
—單片機(jī)綜合設(shè)計(jì)報(bào)告

目錄
1  任務(wù)內(nèi)容
2  系統(tǒng)框圖
3  硬件電路圖
4  軟件流程圖
5  結(jié)束語
附錄1:實(shí)際效果圖
附錄2:源程序
參考文獻(xiàn)


1  任務(wù)內(nèi)容

設(shè)計(jì)一個(gè)基于單片機(jī)的電子萬年歷,能夠在數(shù)碼管顯示時(shí)間、日期、星期、鬧鐘、秒表等信息。并且具備通過獨(dú)立按鍵調(diào)整時(shí)間、日期、鬧鐘、自動(dòng)判閏年、自動(dòng)判斷星期等功能。

通過采用單片機(jī)內(nèi)部定時(shí)器實(shí)現(xiàn)基礎(chǔ)時(shí)間單位的變化與獨(dú)立按鍵輸入

采用C語言編寫主要功能(日歷程序、時(shí)間調(diào)整程序、顯示程序、按鍵掃描程序等),再在Keil uVision4 中進(jìn)行調(diào)試,確保無問題后在實(shí)驗(yàn)電路板上進(jìn)行實(shí)物仿真調(diào)試。

2  系統(tǒng)框圖

圖2-1電子時(shí)鐘總體設(shè)計(jì)框圖


3 硬件電路圖

圖3-1電子時(shí)鐘硬件總電路圖
圖3-2電子時(shí)鐘數(shù)碼管電路圖
圖3-3電子時(shí)鐘獨(dú)立按鍵電路圖
圖3-4電子時(shí)鐘蜂鳴器電路圖

4  軟件流程圖

主程序流程圖:

主函數(shù)中循環(huán)等待按鍵與功能判斷,flag1(key1)為菜單鍵,可選擇3個(gè)功能模塊分別為校準(zhǔn)時(shí)間,秒表和設(shè)置鬧鐘。flag2(key2)為分屏鍵,按一次可循環(huán)顯示年月日和星期(例如:2018-5-29 [2]),按二次為返回。主函數(shù)默認(rèn)狀態(tài)下為顯示時(shí)分秒(例如:20-18-09),同時(shí)自動(dòng)判斷鬧鐘時(shí)間是否到點(diǎn),到點(diǎn)則蜂鳴器發(fā)出聲響,默認(rèn)發(fā)出聲響連續(xù)時(shí)間為1分鐘,也可按下flag3(key3)強(qiáng)制關(guān)閉蜂鳴器。

圖4-1電子時(shí)鐘主程序流程圖

校準(zhǔn)時(shí)間/鬧鐘設(shè)置子流程圖:

校準(zhǔn)時(shí)間功能模塊中flag2(key2)為移位鍵,控制當(dāng)前校準(zhǔn)的日期時(shí)間單位,并且此位會(huì)已局部閃屏的方式反饋給操作者。flag3(key3)與flag4 (key4)分別為加減和減鍵,控制當(dāng)前日期時(shí)間單位的加減操作(設(shè)置鬧鐘模塊與之類似)。

圖4-2電子時(shí)鐘校準(zhǔn)時(shí)間/設(shè)置鬧鐘流程圖

秒表子流程圖:

秒表模塊中flag2(key2)為暫停或計(jì)數(shù)鍵控制秒表的暫停計(jì)時(shí)和開始計(jì)時(shí),flag3(key3)為清零鍵控制秒表計(jì)數(shù)的清零操作。

圖4-3電子時(shí)鐘秒表流程圖

中斷計(jì)時(shí)流程圖:

通過中斷控制進(jìn)行時(shí)間的計(jì)時(shí)操作,不占用CPU,通過芯片內(nèi)部晶振溢出計(jì)時(shí),能夠較精準(zhǔn)的計(jì)時(shí)。軟件程序中從日期時(shí)間單位的最小單位秒開始自動(dòng)逐步更新但前的時(shí)間,年月日和星期。通過軟件程序與硬件的結(jié)合,較好的達(dá)到電子時(shí)鐘的功能和效果。


圖4-4電子時(shí)鐘中斷計(jì)時(shí)流程圖

5  結(jié)束語

在此次電子時(shí)鐘的課程設(shè)計(jì)中,收獲良多。剛拿到課題時(shí),就比較有興趣。大致想了一下思路,就開始著手寫代碼,因?yàn)檫@是第一次使用Keil uVision4軟件編寫程序,對(duì)該軟件的編譯環(huán)境和編碼規(guī)則不太了解。初始階段中運(yùn)行程序出現(xiàn)了許許多多的問題,比如函數(shù)重復(fù)定義,變量重復(fù)定義,數(shù)組溢出,未定義變量,定義函數(shù)未調(diào)用等等,自己的思維不嚴(yán)謹(jǐn)寫完代碼總是一大堆錯(cuò)誤和警告,通過慢慢調(diào)試,查找錯(cuò)誤,并把自己的思維邏輯慢慢完善,最終解決了所有的錯(cuò)誤與警告。時(shí)鐘的大至此我對(duì)Keil uVision4軟件也漸漸從陌生到熟悉。電子時(shí)鐘的大致的框架也基本完成了,但是該電子時(shí)鐘的功能比較單一,并且不太人性化。于是開始版本升級(jí)和優(yōu)化代碼,加入一些其他附帶功能(如:鬧鐘,秒表,顯示星期等)和比較人性化的東西(如:循環(huán)顯示年月日和星期,帶閃屏提示的校準(zhǔn)時(shí)間和設(shè)置鬧鐘,閏年判斷等)。然后,就是上試驗(yàn)箱調(diào)自己的電子時(shí)鐘的實(shí)際效果與功能實(shí)現(xiàn)。第一次下載在實(shí)驗(yàn)箱上運(yùn)行的時(shí)候。很快就發(fā)現(xiàn)了問題,發(fā)現(xiàn)時(shí)間未變化。于是我就開始調(diào)試,發(fā)現(xiàn)管腳分配有問題,改完之后再次下載到實(shí)驗(yàn)版觀察現(xiàn)象。發(fā)現(xiàn)實(shí)際效果與自己所希望的效果完全一樣。看著自己設(shè)計(jì)的電子時(shí)鐘得以實(shí)現(xiàn),還是非常開心的。

回想這一路的設(shè)計(jì)到實(shí)現(xiàn)的過程,我們綜合那些理論知識(shí)來運(yùn)用到設(shè)計(jì)和創(chuàng)新,同時(shí)還讓我們明白了一個(gè)團(tuán)隊(duì)凝聚在一起時(shí)所能發(fā)揮出的巨大潛能! 在此次課程設(shè)計(jì)中我比較擅長(zhǎng)C語言,有一定的編程能力。隊(duì)友比較擅長(zhǎng)報(bào)告文檔的編寫,我們相互合作,一起交流,共同進(jìn)步,完成了課程設(shè)計(jì)。隊(duì)友的編程能力得到了一定的提高,我的報(bào)告文檔編寫能力也得到了提高。此外通過查找大量資料,請(qǐng)教老師,以及不懈的努力,不僅培養(yǎng)了獨(dú)立思考、 動(dòng)手制作的能力,在各種其它能力上也都有了一定的提高。更重要的是,在課程設(shè)計(jì)中,我們學(xué)會(huì)了很多學(xué)習(xí)的方法,知道了理論和實(shí)踐的巨大差別。而這是以后最實(shí)用的,真的是受益匪淺。要面對(duì)社會(huì)的挑戰(zhàn),只有不斷的學(xué)習(xí)、實(shí)踐,再學(xué)習(xí)、再實(shí)踐。同時(shí)在與老師和同學(xué)的交流過程中,互動(dòng)學(xué)習(xí),將知識(shí)融會(huì)貫通。通過自己的努力,將自己的想要達(dá)到的效果都得以實(shí)現(xiàn),做出了一個(gè)包含自己的想法的萬年歷,對(duì)以后的學(xué)習(xí)是一個(gè)莫大的鼓舞,激起了我的學(xué)習(xí)興趣和開發(fā)創(chuàng)新思維。


附錄1:實(shí)際效果圖




圖1-1時(shí)-分-秒 顯示效果圖

圖1-2年-月-日 [星期] 顯示效果圖(循環(huán)顯示)

附錄2:源程序
  1. //********************************************************************************************
  2. //主函數(shù) main.c
  3. //********************************************************************************************
  4. #include "LED_595DISP.h"         
  5. #include "keyboard.h"
  6. #include "timer.h"  
  7. #include <intrins.h>
  8. sbit sound=P1^3;//蜂鳴器(LED燈代替)
  9. unsigned char xdata tem[20] ;//顯示中間轉(zhuǎn)換
  10. unsigned int xdata dy[6][2]={{0,0},{5,6},{8,9},{11,12},{14,15},{17,18}};//校準(zhǔn) 設(shè)置鬧鐘 轉(zhuǎn)換
  11. unsigned int xdata LZX[6];//鬧鐘
  12. unsigned char i,j,bj;
  13. unsigned char wz;//        校準(zhǔn)/設(shè)置  位置
  14. void Date_XS(void);         //日期顯示
  15. void time_XS(void);          //時(shí)間顯示
  16. void Delay500ms(void);//循環(huán)顯示延時(shí)
  17. void Delay21ms();//秒表延時(shí)
  18. void fuz(void);        //附值函數(shù) 用于校準(zhǔn)/設(shè)置
  19. void Date_LZ(void);        //鬧鐘函數(shù)
  20. void Date_JZ(void);        //校準(zhǔn)函數(shù)
  21. int fmq(void);// 蜂鳴器啟動(dòng)判斷
  22. void mbtemr(); //秒表計(jì)時(shí)
  23. void miaobiao(void);
  24. void  main(void)  
  25. {
  26.     Timer0Init();
  27.     while(1)           //任務(wù)主循環(huán)  
  28.   {  Key_scan();     //按鍵識(shí)別
  29.                    //實(shí)時(shí)顯示
  30.                  if(flag1) //菜單鍵
  31.                  {
  32.                        if(flag1==1)Date_JZ(); //功能1 校對(duì)時(shí)間
  33.                            if(flag1==2) miaobiao(); //功能2 秒表
  34.                            if(flag1==3)Date_LZ(); //功能3 設(shè)置鬧鐘
  35.                  }           
  36.                 else if(flag2)Date_XS(); //查看日期 星期
  37.                  else time_XS();          //查看時(shí)間
  38.             //蜂鳴器啟動(dòng)判斷
  39.                 if(fmq())bj=150;
  40.                 if(flag3||flag4)bj=0;  // 蜂鳴器啟器強(qiáng)制關(guān)閉
  41.                  if(bj){sound=0,bj--; } //或響應(yīng)時(shí)間結(jié)束
  42.                   else sound=1;
  43.                  
  44.                  LED_Display();
  45.     }      
  46. }
  47. void time_XS(void)//時(shí)間顯示
  48. {
  49.              tem[0]=Date[3]/10;
  50.                          tem[1]=Date[3]%10;
  51.                          tem[2]=17;
  52.                          tem[3]=Date[4]/10;
  53.                          tem[4]=Date[4]%10;
  54.                          tem[5]=17;
  55.                          tem[6]=Date[5]/10;
  56.                          tem[7]=Date[5]%10;
  57.                   for(i=0;i<8;i++)
  58.                   Dis_buf[i]=tem[i];  
  59.                   Key_scan();     //按鍵識(shí)別
  60.                   LED_Display();  //實(shí)時(shí)顯示

  61. }
  62. void Date_XS(void) //日期  星期顯示
  63. {
  64.              tem[0]=Date[0]/1000;          //年
  65.                          tem[1]=Date[0]%1000/100;
  66.                          tem[2]=Date[0]%100/10;
  67.                          tem[3]=Date[0]%10;
  68.                          tem[4]=17;
  69.                          tem[5]=Date[1]/10;          //月
  70.                          tem[6]=Date[1]%10;
  71.                          tem[7]=17;
  72.                          tem[8]=Date[2]/10;         //日
  73.                          tem[9]=Date[2]%10;
  74.                          tem[10]=16;
  75.                          tem[11]=12;
  76.                          getxq();
  77.                          tem[12]=xq+1;                //星期
  78.                          tem[13]=13;
  79.                  tem[14]=16;
  80.                                   j=0;
  81.                           while(flag2)
  82.                          {
  83.                           for(i=0;i<8;i++)
  84.                     Dis_buf[i]=tem[(i+j)%15];
  85.                           LED_Display();
  86.                          Delay500ms();
  87.                                  j=(j+1)%15;
  88.                          }         
  89. }
  90. void Date_JZ(void)
  91. { unsigned char count1=0;fuz();wz=0;
  92.         while(1)
  93.         {  
  94.              Key_scan();
  95.                  if(flag1!=1){flag2=flag3=flag4=0;break;} //功能鍵(返回鍵)
  96.                  if(flag2){wz=(wz+1)%6;flag2=0;}  //移位鍵
  97.                  if(flag3){Date[wz]++;flag3=0;}          //加鍵
  98.                  if(flag4){Date[wz]--;flag4=0;}         //減鍵
  99.                  //對(duì)更改數(shù)據(jù)進(jìn)行 存儲(chǔ)更新
  100.                  if(wz==1){if(Date[wz]<0)Date[wz]=12;if(Date[wz]>12)Date[wz]=1;}
  101.                  if(wz==2)Date_gx();
  102.                  if(wz==3){if(Date[wz]<0)Date[wz]=23;if(Date[wz]>=24)Date[wz] =0;}
  103.                  if(wz==4||wz==5){if(Date[wz]<0)Date[wz]=59;if(Date[wz]>=60)Date[wz]=0;}
  104.                   //對(duì)更改數(shù)據(jù)進(jìn)行 顯示更新
  105.                   if(wz==0)         //更新 年
  106.                         {
  107.                          tem[0]=Date[0]/1000;
  108.                          tem[1]=Date[0]%1000/100;
  109.                          tem[2]=Date[0]%100/10;
  110.                          tem[3]=Date[0]%10;
  111.                         }
  112.                         else                 //更新其他
  113.                         {tem[dy[wz][0]]=Date[wz]/10;
  114.                          tem[dy[wz][1]]=Date[wz]%10;
  115.                         }
  116.                 //循環(huán)初始化
  117.                         if(wz==2)j=2;
  118.                         else if(wz>=3&&wz<=5)j=11;
  119.                         else j=0;         
  120.                 //循環(huán) 帶閃 顯示
  121.                   for(i=0;i<8;i++)
  122.                   if(count1<5&&wz==0&&(i+j)%20==0)Dis_buf[i]=Dis_buf[i+1]=Dis_buf[i+2]=Dis_buf[i+3]=16,i=3;
  123.                         else if(count1<5&&dy[wz][0]==(i+j)%20)Dis_buf[i]=Dis_buf[i+1]=16,i++;
  124.                           else Dis_buf[i]=tem[(j+i)%20];
  125.                           if(count1==40)count1=0;//每40  顯示 5 單位時(shí)間
  126.                             count1++;
  127.                           LED_Display();  //實(shí)時(shí)顯示
  128.                  
  129.         }
  130. }
復(fù)制代碼
篇幅有限 子函數(shù)與完整程序在壓縮包中



全部資料51hei下載地址:
單片機(jī)電子萬年歷設(shè)計(jì).rar (6.19 MB, 下載次數(shù): 161)


作者: 偶是小仙女呀    時(shí)間: 2019-6-9 10:15
挺不錯(cuò)的呀
作者: redmoon123456    時(shí)間: 2019-7-25 19:17
資料齊全完整,感謝樓主分享
作者: 代碼小王    時(shí)間: 2019-12-23 19:48
厲害丫,真的棒。
作者: emlink    時(shí)間: 2019-12-28 09:05
感謝感謝,這網(wǎng)站太好用了.感謝樓主的分享
作者: touqiqan    時(shí)間: 2024-12-13 17:42
太高級(jí)了,感謝樓主的分享
作者: AAAAAAC    時(shí)間: 2024-12-14 14:55
太厲害了 感謝分享




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1