久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8839|回復: 7
打印 上一主題 下一主題
收起左側

帶LCD顯示的定時鬧鐘設計報告 帶PCB 原理圖 源程序

[復制鏈接]
跳轉到指定樓層
樓主


設計報告,pcb,源碼等所有資料打包下載:
帶LCD顯示的定時鬧鐘.zip (1.08 MB, 下載次數: 133)



------------------------------------------------------------------------




.系統調試過程

通過上面的硬件設計和軟件設計過程,設計的工作已經基本完成,接下來的工作就是對所設計好的應用系統進行調試。通過調試可以檢查出系統出現的一些錯誤,從而進行下一步的修改。

(1)在Protel 99 SE中,對硬件電路圖進行ERC電氣規則檢查。

圖 5-1  protel原理圖

圖5-2  ERC電氣規則檢查結果

                                  圖5-3 PCB圖

(2)程序調試

程序經過調試顯示“0錯誤,0警告”。表示程序調試通過。

圖5-3  程序調試通過示意圖

(3)protues調試

圖5-4 protues仿真圖

結 論

單片機是一門應用性很強的學科,課程設計是培養我們綜合運用所學知識,發現、提出、分析和解決實際問題,鍛煉實踐能力的重要環節,是對我們實際工作能力的具體訓練和考察過程。雖然在做課程設計以前已經系統的把單片機課本認真的學習了一下,但是在剛拿到設計任務書時還是有點一頭霧水,不知道該從哪里下手。令人欣慰的是經過一周的學習,雖然過程很艱辛,但是總算實現了定時鬧鐘的功能,所有的努力都很值得。這一周的大部分時間都在研究程序怎么處理,在這個過程中加深了我對匯編語言命令的應用,而且也更加了解到軟硬件配套的重要性。

通過這次課程設計,使我們對這們功課有了更深刻的認識和了解。首先對于硬件電路的工作原理有了進一步系統的學習,同樣就有了進一步的認識,使我懂得了理論與實際相結合的重要性,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,才能提高自己的實際動手能力和獨立思考的能力。其次軟件在這次設計中也有不足之處,比如音樂的響聲不連續,但又不知道從哪個地方入手解決這個問題,這要求在以后的學習中,拓寬自己的知識面,解決設計的不足之處。

總之,通過這次課程設計不僅使我鞏固了本課程所學的基本知識,還使我們具有了撰寫科研報告的初步訓練能力,我相信這些能力在我們以后的工作或者是再學習中一定會起到不小的作用,一切的辛苦和艱難都是值得的。

致 謝

在陳飛老師的指導下,我完成了本次設計。本設計從選題到完成,都得到了陳老師細心的指導。另外,本設計的完成也離不開其他老師和各位同學給我的建議和幫助,是他們讓我明白了團隊合作的精神。當然,這之中也有我自己的努力。這次課程設計最令我高興的是:遇到困難,翻閱書本解決困難的同時鞏固了已學知識,也學到了新知識。在此,我謹向陳飛老師和幫助過我的老師和同學們,表示崇高的敬意和衷心的感謝!


源程序:
  1.                                                                                                 #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. uint miao,fen,fen1,shi,shi1,flag1,flag2,flag3,aa,K1num,K2num,K3num,K4num,N;        //K1num-K1按鍵被按下的標記變量,K2num-K2按鍵被按下的標記變量,K3num=0-K3按鍵被按下的標記變量
  5. uchar code table[]="  TIMING CLOCK";        //定義初始上電時液晶默認顯示狀態
  6.         
  7. sbit K1=P1^0;        //四個按鍵
  8. sbit K2=P1^1;
  9. sbit K3=P1^2;
  10. sbit K4=P1^3;
  11. sbit rs=P2^0;
  12. sbit lcden=P2^2;
  13. sbit led=P2^3;        //發光二極管控制端
  14. sbit beep=P2^4;   //蜂鳴器控制端
  15. sbit relay=P2^5;                //繼電器控制端
  16. void delay(uint z)        //延時函數
  17. {
  18.         uint x,y;
  19.         for(x=z;x>0;x--)
  20.                 for(y=110;y>0;y--);
  21. }

  22. void write_com(uchar com)        //液晶寫命令函數
  23. {
  24.         rs=0;
  25.         lcden=0;
  26.         P0=com;
  27.         delay(5);
  28.         lcden=1;
  29.         delay(5);
  30.         lcden=0;        
  31. }

  32. void write_date(uchar date)                //液晶寫數據函數
  33. {
  34.         rs=1;
  35.         lcden=0;
  36.         P0=date;
  37.         delay(5);
  38.         lcden=1;
  39.         delay(5);
  40.         lcden=0;        
  41. }

  42. void write_sfm(uchar add,uchar date)        //液晶寫時分秒函數
  43. {
  44.         uchar shi,ge;
  45.         shi=date/10;
  46.         ge=date%10;
  47.         write_com(0x80+0x40+add);
  48.         write_date(0x30+shi);
  49.         write_date(0x30+ge);
  50. }

  51. void init()                //初始化函數
  52. {        
  53.         uint num;        //寫液晶的循環控制變量
  54.         aa=0;                //中斷次數標志
  55.         K1num=0;        //K1按鍵被按下的標記變量
  56.         K2num=0;        //K2按鍵被按下的標記變量
  57.         K3num=0;        //K3按鍵被按下的標記變量
  58.         K4num=0;
  59.         flag1=1;        //控制lcd屏刷新的變量
  60.         flag2=1;        //控制鬧鐘響鬧和繼電器開啟關閉的標記
  61.         flag3=1;        //控制鬧鐘響起時,按下K4停止鬧鐘響鬧的標記
  62.         led=1;           //發光二極管初始化
  63.         relay=0;        //繼電器初始化
  64.         N=100;                //系統啟動時,鬧鐘時間到發出的聲音為連續三次發出“嘩”的一聲
  65.         miao=0;                //系統初始化時間
  66.         fen=0;
  67.         shi=0;
  68.         fen1=1;                //初始化鬧鐘的時間
  69.         shi1=0;
  70.         beep=0;                //蜂鳴器初始化
  71.         lcden=0;        //液晶使能端初始化
  72.         write_com(0x38);        //1602液晶初始化,設置16*2顯示。5*7點陣,8位數據接口
  73.         write_com(0x0c);        //設置開顯示,不顯示光標        
  74.         write_com(0x06);        //寫一個字符后地址指針自動加1
  75.         write_com(0x01);        //顯示清0,數據指針清0
  76.         write_com(0x80);        //將數據指針定位到第一行,第一個字處
  77.         for(num=0;num<15;num++)                //顯示鬧鐘標示:TIMING CLOCK
  78.         {
  79.                         write_date(table[num]);
  80.                         delay(10);
  81.         }
  82.         write_com(0x80+0x40+7);//寫出時間顯示部分的兩個冒號
  83.         write_date(':');

  84.         write_sfm(8,fen);        //送去液晶顯示秒,分,時
  85.         write_sfm(5,shi);
  86.         TMOD=0x01;        //設置定時器0為工作方式1
  87.         TH0=(65536-50000)/256;                //定時器裝初值
  88.         TL0=(65536-50000)%256;
  89.         EA=1;        //開總中斷
  90.         ET0=1;        //開定時器0中斷
  91.         TR0=1;        //啟動定時器0

  92. }

  93. void keyscan()                //鍵盤掃描函數
  94. {        
  95.         if(K1==0&&K3num==0)                //判斷K1按下,按下前沒有按下K3鍵,則開始修改時間
  96.         {
  97.                 delay(5);
  98.                 if(K1==0&&K1num==0)
  99.                 {        
  100.                         
  101.                         K1num=1;        
  102.                         while(!K1)                //判斷是否松開按鍵,后同
  103.                         if(K1num==1)
  104.                         {
  105.                                 TR0=0;                //關閉計數器0
  106.                                 write_com(0x80+0x40+9);                //第一次按下光標定位到分鐘位置
  107.                                 write_com(0x0f);         //光標開始閃爍               
  108.                         }
  109.                 }
  110.         }


  111.         if(K3==0&&K3num==0&&K1num==0)                //判斷K3首次被按下,則設置鬧鐘
  112.         {
  113.                 delay(5);        //延時消抖,后同
  114.                 if(K3==0)
  115.                 {        
  116.                         flag1=0;
  117.                         write_com(0x80+0x40+9);                //第一次按下光標定位到分鐘位置
  118.                         while(!K3);
  119.                         K3num=1;
  120.                         write_sfm(8,fen1);        //送去液晶顯示定時的分,時
  121.                         write_sfm(5,shi1);
  122.                         write_com(0x0f);        //光標開始閃爍
  123.                         write_com(0x80+0x40+9);        //顯示位置回到調節處
  124.                 }
  125.         }

  126.         if(K1==0&&K1num==1)                //判斷K1按下,修改系統時間的小時
  127.         {
  128.                 delay(5);
  129.                 if(K1==0)
  130.                 {        
  131.                         write_com(0x80+0x40+6);        //光標定位到小時位置
  132.                         K1num=1;        //置K1num=1
  133.                         while(!K1);
  134.                         shi++;         //則調整時加1
  135.                         if(shi==24) shi=0;        //若滿24后將清零
  136.                         write_sfm(5,shi);        //每調節一次送液晶顯示一下
  137.                         write_com(0x80+0x40+6);        //顯示位置重新回到調節處
  138.                 }
  139.                
  140.         }               
  141.         
  142.         
  143.         if(K2==0&&K1num==1)                //判K2按下,修改系統時間的分鐘
  144.         {
  145.                 delay(5);
  146.                 if(K2==0)
  147.                 {        
  148.                         write_com(0x80+0x40+9);                //光標定位到分鐘位置
  149.                         K1num=1;
  150.                         while(!K2);
  151.                         fen++;         //則調整分加1
  152.                         if(fen==60)        fen=0;//若滿60后將清零
  153.                         write_sfm(8,fen);        //每調節一次送液晶顯示一下
  154.                         write_com(0x80+0x40+9);        //顯示位置重新回到調節處
  155.                 }
  156.         }

  157.         if(K1num==1||K3num==1)        //當設置時間或鬧鐘時,K3被按下設置完成。
  158.         {
  159.                 if(K3==0)                //判斷K3按下
  160.                 {
  161.                         delay(5);
  162.                         if(K3==0)
  163.                         {
  164.                                 K1num=0;
  165.                                 K3num=0;
  166.                                 while(!K3);
  167.                                 write_com(0x0c);        //取消光標閃
  168.                                 TR0=1;        //啟動定時器使時鐘開始走
  169.                                 flag1=1;        //flag=1.則修改系統時間時液晶顯示的系統時間值,flag=0,則為修改鬧鐘時間時,屏幕顯示的是修改鬧鐘時間的值
  170.                                 write_sfm(8,fen);//送去液晶顯示分,時
  171.                                 write_sfm(5,shi);
  172.                         }
  173.                 }
  174.         }
  175.         if(K2==0&&K1num==0&&K3num==0)        //K2被按下時顯示定時時間
  176.         {
  177.                 delay(5);
  178.                 if(K2==0)
  179.                 {        
  180.                         write_sfm(8,fen1);        //送去液晶顯示定時的分,時
  181.                         write_sfm(5,shi1);
  182.                         while(!K2);        
  183.                         write_sfm(8,fen);        //K2松開顯示當前時間
  184.                         write_sfm(5,shi);

  185.                 }
  186.         }


  187.         if(K1==0&&K3num==1)                //修改小時,判斷K1鍵按下,K3num=1,表示K3按鍵按下,則此時修改的是鬧鐘時間的小時
  188.         {        
  189.                 delay(5);
  190.                 if(K1==0)
  191.                 {        
  192.                         write_com(0x80+0x40+6);        //光標定位到小時位置
  193.                         K3num=1;
  194.                         while(!K1);
  195.                         shi1++;         //則調整定時的時加1
  196.                         if(shi1==24)        //若滿24后將清零
  197.                         shi1=0;
  198.                         write_sfm(5,shi1);        //每調節一次送液晶顯示一下
  199.                         write_com(0x80+0x40+6);        //顯示位置重新回到調節處
  200.                 }
  201.         }
  202.         
  203.         if(K2==0&&K3num==1)                //卸螷2按下,修改鬧鐘時間的分鐘
  204.         {
  205.                 delay(5);
  206.                 if(K2==0)
  207.                 {        
  208.                         write_com(0x80+0x40+9);                //光標定位到分鐘位置
  209.                         K3num=1;
  210.                         while(!K2);
  211.                         fen1++;         //則調整分加1
  212.                         if(fen1==60)        //若滿60后將清零
  213.                         fen1=0;
  214.                         write_sfm(8,fen1);        //每調節一次送液晶顯示一下
  215.                         write_com(0x80+0x40+9);        //顯示位置重新回到調節處
  216.                 }
  217.         }
  218.         

  219.         if(K4==0&&flag3==0)                //當鬧鐘響起時,按下K4停止響鬧,當鬧鐘響起時候flag3置為1
  220.         {
  221.                 delay(5);
  222.                 if(K4==0)
  223.                 {        
  224.                         flag2=0;
  225.                         flag3=1;        //此處需置flag3為1,否則鬧鐘沒有響起的時候按下K4鍵,程序會執行此句
  226.                 }
  227.         }
  228.         if(K4==0&&flag3==1&&K4num==0)        //K4按下設置鬧鐘的狀態為ON或OFF,flag3=1,表示鬧鐘此時沒響起。K4num==0,表示此時為ON狀態。
  229.         {
  230.                 delay(5);
  231.                 {
  232.                         K4num=1;        
  233.                 }
  234.         }
  235.         if(K4==0&&flag3==1&&K4num==1)        //K4按下設置鬧鐘的狀態為ON或OFF,flag3=1,表示鬧鐘此時沒響起。K4num==1,表示此時為OFF狀態。
  236.         {
  237.                 delay(5);
  238.                 {
  239.                         K4num=0;        
  240.                 }
  241.         }        
  242. }

  243. void clock()        //        鬧鐘函數 K4—鬧鈴ON/OFF的狀態設置,設置為ON時連續三次發出“嘩”的一聲,設置為OFF發出“嘩”的一?
  244. {
  245.         if((fen==fen1)&&(shi==shi1)&&(flag2==1)&&(K4num==0))                //鬧鐘的響鬧控制                                
  246.         {
  247.                 beep=1;                //此時鬧鐘響起,連續三次發出嘩的一聲
  248.                 relay=1;        //鬧鐘時間到,則繼電器啟動
  249.                 flag3=0;        //置flag3=0,表示此時鬧鐘響起,按下K4鍵執行停止鬧鐘響鬧語句
  250.                 delay(100);        //這些語句是為了使鬧鐘響起時,發出連續三次嘩的聲音
  251.                 beep=0;
  252.                 delay(100);
  253.                 beep=1;
  254.                 delay(100);
  255.                 beep=0;
  256.                 delay(100);
  257.                 beep=1;
  258.                 delay(100);
  259.                 beep=0;
  260.                 delay(300);
  261.         }
  262.         else if((fen==fen1)&&(shi==shi1)&&(flag2==1)&&(K4num==1))                //鬧鐘的響鬧控制                                
  263.         {
  264.                 beep=1;                //此時鬧鐘響起,發出嘩的一聲
  265.                 relay=1;        //鬧鐘時間到,則繼電器啟動
  266.                 flag3=0;        //置flag3=0,表示此時鬧鐘響起,按下K4鍵執行停止鬧鐘響鬧語句
  267.         }
  268.         else
  269.         {
  270.                 beep=0;
  271.                 relay=0;
  272.         }
  273. }
  274. void main()                        //主函數
  275. {        
  276.         
  277.         init();//初始化子程序
  278.         while(1)
  279.         {        
  280.                 keyscan();
  281.                 clock();
  282.         }
  283. }

  284. void time0() interrupt 1        //定時器0中斷服務程序
  285. {
  286.         TH0=(65536-50000)/256;        //定時器重新裝入數值
  287.         TL0=(65536-50000)%256;
  288.         aa++;        //中斷次數累加                        

  289.         if(aa==20)        //20次50毫秒為1秒
  290.         {               
  291.                 aa=0;
  292.                 miao++;
  293.                 led=~led;
  294.                 if(miao==60)
  295.                         {
  296.                                 miao=0;
  297.                                 fen++;
  298.                                 flag2=1;//鬧鐘響起時按下K4鍵鬧鐘關閉,此處應重置該變量,使下一次鬧鐘時間來到時,鬧鐘仍然可以響起
  299.                                 if(fen==60)
  300.                                 {
  301.                                         fen=0;
  302.                                         shi++;
  303.                                         if(shi==24)
  304.                                         {
  305.                                                 shi=0;
  306.                                         }
  307.                                         if(flag1==1)
  308.                                         {write_sfm(5,shi);}        //小時發生變化則立即吸入屏幕顯示
  309.                                 }
  310.                                 if(flag1==1)
  311.                                 {write_sfm(8,fen);}        //分鐘發生變化則立即吸入屏幕顯示
  312.                         }
  313.                         
  314.                 }        

  315. }

復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:206457 發表于 2017-6-2 16:21 | 只看該作者
參考學習下~謝謝
回復

使用道具 舉報

板凳
ID:265141 發表于 2017-12-22 09:33 | 只看該作者
有聯系方式嗎?
回復

使用道具 舉報

地板
ID:407230 發表于 2018-10-10 22:24 | 只看該作者
很不錯的參考
回復

使用道具 舉報

5#
ID:414426 發表于 2018-11-7 18:56 | 只看該作者
運行不得。。。。
回復

使用道具 舉報

6#
ID:432516 發表于 2018-11-24 19:09 | 只看該作者
參考學習下
回復

使用道具 舉報

7#
ID:435622 發表于 2018-11-30 08:29 來自手機 | 只看該作者
原理圖打不開
回復

使用道具 舉報

8#
ID:413630 發表于 2018-12-25 15:05 | 只看該作者
牛牛牛
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品99久久久久久宅男 | 国产一级免费视频 | 久久精品91 | 97精品国产手机 | 午夜一区二区三区在线观看 | 国产精品久久久久久久久久免费看 | 国产精品毛片一区二区在线看 | 美女黄网站视频免费 | 日韩成人在线播放 | 欧美性网 | 欧美精品网站 | 亚洲成人综合在线 | 日韩av中文 | 欧美男人天堂 | 亚洲午夜精品一区二区三区他趣 | 亚洲欧美v| 亚洲精品一区在线观看 | 日本欧美黄色片 | 亚洲视频二 | 国产一区二区精品在线观看 | 人人做人人澡人人爽欧美 | 亚洲第一av | 三级av在线| 国产亚洲精品精品国产亚洲综合 | 日韩在线精品视频 | 999视频| 亚洲在线中文字幕 | 日本高清中文字幕 | 午夜一区二区三区在线观看 | 婷婷色国产偷v国产偷v小说 | 亚洲风情在线观看 | www.788.com色淫免费 | 精品日本久久久久久久久久 | 日韩有码在线观看 | 国产精品视频在线播放 | 国产一级电影在线观看 | 久久久毛片 | 精品成人| 精品国产一区二区三区av片 | 免费视频一区二区 | 欧美电影免费网站 |