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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8937|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:137190 發(fā)表于 2016-9-27 16:17 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


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



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




.系統(tǒng)調(diào)試過程

通過上面的硬件設(shè)計和軟件設(shè)計過程,設(shè)計的工作已經(jīng)基本完成,接下來的工作就是對所設(shè)計好的應(yīng)用系統(tǒng)進行調(diào)試。通過調(diào)試可以檢查出系統(tǒng)出現(xiàn)的一些錯誤,從而進行下一步的修改。

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

圖 5-1  protel原理圖

圖5-2  ERC電氣規(guī)則檢查結(jié)果

                                  圖5-3 PCB圖

(2)程序調(diào)試

程序經(jīng)過調(diào)試顯示“0錯誤,0警告”。表示程序調(diào)試通過。

圖5-3  程序調(diào)試通過示意圖

(3)protues調(diào)試

圖5-4 protues仿真圖

結(jié) 論

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

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

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

致 謝

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


源程序:
  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按鍵被按下的標(biāo)記變量,K2num-K2按鍵被按下的標(biāo)記變量,K3num=0-K3按鍵被按下的標(biāo)記變量
  5. uchar code table[]="  TIMING CLOCK";        //定義初始上電時液晶默認顯示狀態(tài)
  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;        //發(fā)光二極管控制端
  14. sbit beep=P2^4;   //蜂鳴器控制端
  15. sbit relay=P2^5;                //繼電器控制端
  16. void delay(uint z)        //延時函數(shù)
  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)        //液晶寫命令函數(shù)
  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)                //液晶寫數(shù)據(jù)函數(shù)
  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)        //液晶寫時分秒函數(shù)
  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()                //初始化函數(shù)
  52. {        
  53.         uint num;        //寫液晶的循環(huán)控制變量
  54.         aa=0;                //中斷次數(shù)標(biāo)志
  55.         K1num=0;        //K1按鍵被按下的標(biāo)記變量
  56.         K2num=0;        //K2按鍵被按下的標(biāo)記變量
  57.         K3num=0;        //K3按鍵被按下的標(biāo)記變量
  58.         K4num=0;
  59.         flag1=1;        //控制lcd屏刷新的變量
  60.         flag2=1;        //控制鬧鐘響鬧和繼電器開啟關(guān)閉的標(biāo)記
  61.         flag3=1;        //控制鬧鐘響起時,按下K4停止鬧鐘響鬧的標(biāo)記
  62.         led=1;           //發(fā)光二極管初始化
  63.         relay=0;        //繼電器初始化
  64.         N=100;                //系統(tǒng)啟動時,鬧鐘時間到發(fā)出的聲音為連續(xù)三次發(fā)出“嘩”的一聲
  65.         miao=0;                //系統(tǒng)初始化時間
  66.         fen=0;
  67.         shi=0;
  68.         fen1=1;                //初始化鬧鐘的時間
  69.         shi1=0;
  70.         beep=0;                //蜂鳴器初始化
  71.         lcden=0;        //液晶使能端初始化
  72.         write_com(0x38);        //1602液晶初始化,設(shè)置16*2顯示。5*7點陣,8位數(shù)據(jù)接口
  73.         write_com(0x0c);        //設(shè)置開顯示,不顯示光標(biāo)        
  74.         write_com(0x06);        //寫一個字符后地址指針自動加1
  75.         write_com(0x01);        //顯示清0,數(shù)據(jù)指針清0
  76.         write_com(0x80);        //將數(shù)據(jù)指針定位到第一行,第一個字處
  77.         for(num=0;num<15;num++)                //顯示鬧鐘標(biāo)示: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;        //設(shè)置定時器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()                //鍵盤掃描函數(shù)
  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;                //關(guān)閉計數(shù)器0
  106.                                 write_com(0x80+0x40+9);                //第一次按下光標(biāo)定位到分鐘位置
  107.                                 write_com(0x0f);         //光標(biāo)開始閃爍               
  108.                         }
  109.                 }
  110.         }


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

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

  157.         if(K1num==1||K3num==1)        //當(dāng)設(shè)置時間或鬧鐘時,K3被按下設(shè)置完成。
  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);        //取消光標(biāo)閃
  168.                                 TR0=1;        //啟動定時器使時鐘開始走
  169.                                 flag1=1;        //flag=1.則修改系統(tǒng)時間時液晶顯示的系統(tǒng)時間值,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松開顯示當(dāng)前時間
  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);        //光標(biāo)定位到小時位置
  193.                         K3num=1;
  194.                         while(!K1);
  195.                         shi1++;         //則調(diào)整定時的時加1
  196.                         if(shi1==24)        //若滿24后將清零
  197.                         shi1=0;
  198.                         write_sfm(5,shi1);        //每調(diào)節(jié)一次送液晶顯示一下
  199.                         write_com(0x80+0x40+6);        //顯示位置重新回到調(diào)節(jié)處
  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);                //光標(biāo)定位到分鐘位置
  209.                         K3num=1;
  210.                         while(!K2);
  211.                         fen1++;         //則調(diào)整分加1
  212.                         if(fen1==60)        //若滿60后將清零
  213.                         fen1=0;
  214.                         write_sfm(8,fen1);        //每調(diào)節(jié)一次送液晶顯示一下
  215.                         write_com(0x80+0x40+9);        //顯示位置重新回到調(diào)節(jié)處
  216.                 }
  217.         }
  218.         

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

  243. void clock()        //        鬧鐘函數(shù) K4—鬧鈴ON/OFF的狀態(tài)設(shè)置,設(shè)置為ON時連續(xù)三次發(fā)出“嘩”的一聲,設(shè)置為OFF發(fā)出“嘩”的一?
  244. {
  245.         if((fen==fen1)&&(shi==shi1)&&(flag2==1)&&(K4num==0))                //鬧鐘的響鬧控制                                
  246.         {
  247.                 beep=1;                //此時鬧鐘響起,連續(xù)三次發(fā)出嘩的一聲
  248.                 relay=1;        //鬧鐘時間到,則繼電器啟動
  249.                 flag3=0;        //置flag3=0,表示此時鬧鐘響起,按下K4鍵執(zhí)行停止鬧鐘響鬧語句
  250.                 delay(100);        //這些語句是為了使鬧鐘響起時,發(fā)出連續(xù)三次嘩的聲音
  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;                //此時鬧鐘響起,發(fā)出嘩的一聲
  265.                 relay=1;        //鬧鐘時間到,則繼電器啟動
  266.                 flag3=0;        //置flag3=0,表示此時鬧鐘響起,按下K4鍵執(zhí)行停止鬧鐘響鬧語句
  267.         }
  268.         else
  269.         {
  270.                 beep=0;
  271.                 relay=0;
  272.         }
  273. }
  274. void main()                        //主函數(shù)
  275. {        
  276.         
  277.         init();//初始化子程序
  278.         while(1)
  279.         {        
  280.                 keyscan();
  281.                 clock();
  282.         }
  283. }

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

  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鍵鬧鐘關(guān)閉,此處應(yīng)重置該變量,使下一次鬧鐘時間來到時,鬧鐘仍然可以響起
  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);}        //小時發(fā)生變化則立即吸入屏幕顯示
  309.                                 }
  310.                                 if(flag1==1)
  311.                                 {write_sfm(8,fen);}        //分鐘發(fā)生變化則立即吸入屏幕顯示
  312.                         }
  313.                         
  314.                 }        

  315. }

復(fù)制代碼



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

使用道具 舉報

沙發(fā)
ID:206457 發(fā)表于 2017-6-2 16:21 | 只看該作者
參考學(xué)習(xí)下~謝謝
回復(fù)

使用道具 舉報

板凳
ID:265141 發(fā)表于 2017-12-22 09:33 | 只看該作者
有聯(lián)系方式嗎?
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

6#
ID:432516 發(fā)表于 2018-11-24 19:09 | 只看該作者
參考學(xué)習(xí)下
回復(fù)

使用道具 舉報

7#
ID:435622 發(fā)表于 2018-11-30 08:29 來自觸屏版 | 只看該作者
原理圖打不開
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产第1页 | 亚洲成人高清 | www国产成人 | 青青草视频网 | 国产高清免费视频 | 精品一区二区三区四区在线 | 又爽又黄axxx片免费观看 | 一级做a爰片性色毛片16 | 蜜桃在线视频 | 99精品免费在线观看 | 久久99精品国产 | 黄色成人免费在线观看 | 亚洲精品一区二区三区四区高清 | 97超碰免费 | 国产精品不卡视频 | 99久热在线精品视频观看 | 四虎永久免费影院 | 午夜一区二区三区在线观看 | 久久综合激情 | 精品久久久久久久久久久 | 欧美一区二区三区在线播放 | 久久久久一区二区三区 | 亚洲网站在线观看 | 欧美激情精品久久久久久 | 国产日韩亚洲欧美 | 中文字幕丁香5月 | 国产视频91在线 | 一区二区三区国产精品 | 欧美日韩国产传媒 | 国产精品精品视频一区二区三区 | 午夜免费看视频 | 久久久久国产精品一区二区 | 国产一区二区三区四区五区3d | 一级片免费在线观看 | 国产一级片91 | 国精产品一区一区三区免费完 | 97久久超碰| 久久极品 | 国产综合久久 | 久久精品国产一区老色匹 | 亚洲婷婷一区 |