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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

帶有LCD顯示的音樂倒數計數器設計文檔

  [復制鏈接]
跳轉到指定樓層
樓主
ID:339580 發表于 2018-5-28 16:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有LCD顯示的音樂倒數計數器

單片機技術是一門不可或缺的技術,對我們將來的工作以及生活和學習都有很密切的聯系。近年來,隨著電子技術和微機計算機的迅速發展,單片機的檔次不斷提高,其應用領域也在不斷的擴大,已在工業控制、尖端科學、智能儀器儀表、日用家電、汽車電子系統、辦公自動化設備、個人信息終端及通信產品中得到了廣泛的應用,成為現代電子系統中最重要的智能化的核心部件。

單片機由CPU、一定容量的RAM和ROM構成,定時、計數和多種接口于一體的微控制器。它體積小,成本低,功能強,廣泛應用于智能產業和工業自動化上。而51系列單片機是各單片機中最為典型和最有代表性的一種。這次設計通過對它的學習、應用,從而達到學習、設計、開發軟、硬的能力。

本設計利用AT89C51單片機結合字符型LCD顯示器設計一個簡易的倒數計數器。用4個按鍵操作來設置當前想要倒計數的時間。做一小段時間倒計數,當倒計數為0時,則發出一段音樂聲響,通知倒計數終了,該做應當做的事。應用 Proteus的ISIS軟件和Keil uVision3來實現該計數器的設計與仿真。該方法仿真效果真實、準確,節省了硬件資源。

該多功能計數器可以應用于一般的生活和工作中,也可以通過改裝,提高性能,增加新功能,從而給人們的生活和工作帶來更多的方便。


目  錄

1 設計概述和要求

1.1 設計概述

1.2 設計要求

2 系統設計

2.1 框圖設計

2.2 元件清單

3軟件設計

3.1 程序流程圖

3.1.1 主程序流程圖

3.1.2 蜂鳴器發聲程序流程圖

3.2 蜂鳴器發聲電路原理

3.3 蜂鳴器發聲程序的關鍵代碼

4 PROTEUS仿真結果

4.1 總體電路仿真結果

4.2 假設倒計時為5秒時的仿真結果

5 總結            

6 附表(本設計所有程序) ………………………………………….14

參考文獻


              1 設計概述和要求

本設計的任務是利用AT89C51單片機結合字符型LCD顯示器設計一個簡易的倒數計數器。做一小段時間倒計數,當倒計數為0時,則發出一段音樂聲響。

1.1 設計概述

20世紀末,電子技術獲得了飛速的發展。在其推動下,現代電子產品幾乎滲透到了社會的各個領域,有力的推動和提高了社會生產力的發展與信息化程度。同時也使現代電子產品性能進一步提升,產品更新換代的節奏也越來越快。

隨著科技的發展和社會的進步,人們對數字鐘的要求越來越高,多功能數字鐘不管在性能還是在樣式上都發生了質的變化。數字鐘實際上是一個對標準頻率進行計數的計數電路,走時精度高,穩定性好,使用方便,不需要經常調校。單片計算機即單片微型計算機,是集CPU,RAM,ROM,定時/計數和多種接口于一體的微控制器。它體積小成本低,功能強,廣泛應用于智能產品和工業自動化上。由于數字集成電路的發展和石英晶體振蕩器的廣泛應用,使得數字鐘的精度遠遠超多老式鐘表,鐘表的數字化給人們生產生活帶來了極大地方便,而且大大的擴展了鐘表原先的報時功能,諸如定時自動報警、0按時自動打鈴、定時廣播、自動啟閉路燈、定時開關烘箱、通斷動力設備、甚至各種定時電氣的自動啟用等,所有這些,都是以數字化為基礎的,因此研究數字鐘及擴大其應用有著非常現實的意義。

本系統采用單片機作為數字鐘的核心控制器,讀取時鐘的值,并通過LCD液晶顯示器顯示出來,而且可以通過按鍵電路控制執行信號,給時鐘賦初值。還可以設置鬧鐘,當計數為0時,發出一陣音樂聲。并可拓展其功能顯示年月日。

1.2設計要求
利用AT89C51單片機結合字符型LCD顯示器設計一個簡易的倒數計數器,可用來煮方便面、煮開水或小睡片刻等。作品先接受用戶輸入的倒數計數時間,然后由用戶啟動作品工作(可用一個閃爍的LED燈指示),當倒計數為0時,則發出一段音樂聲響,通知倒計數終了,該做應當做的事。
定時鬧鐘的基本功能如下。
  • 字符型LCD(16 ? 2)顯示器。
  • 顯示格式為“TIME 分分:秒秒”。

用4個按鍵操作來設置當前想要倒計數的時間。一旦按下鍵則開始倒計數,當計數為0時,發出一陣音樂聲

2 系統設計2.1 框圖設計

本項目的系統設計框圖如圖2-1所示:

圖2-1 系統框圖

由系統框圖可看出,本設計由單片機AT89C51、LCD液晶顯示器、控制鍵盤、蜂鳴器、復位單路和定時器電路幾大模塊構成。

2.2 元件清單

主控單片機采用AT89C51芯片,時鐘模塊選用一12MHZ晶振,產生時鐘脈沖。顯示模塊采用LCD1602,設置部分選用鍵盤按鍵電路,發聲部分選用BUZZER蜂鳴器。還有一些電源、電阻、電容、接地等。

主要元件清單如圖2-2所示:






圖2-2 主要元件清單


AT89C51

AT89C51是一種帶4K字節閃存可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器,俗稱單片機。

主要特性:與MCS-51 兼容 、4K字節可編程閃爍存儲器 、壽命:1000寫/擦循環、數據保留時間:10年 、全靜態工作:0Hz-24MHz 、三級程序存儲器鎖定 、128×8位內部RAM 、32可編程I/O線 、兩個16位定時器/計數器 、5個中斷源 、可編程串行通道 、低功耗的閑置和掉電模式 、片內振蕩器和時鐘電路。


1602LCD

1602液晶模塊內部的控制器共有11條控制指令,如表2-1所示.

表2-1 1602液晶模塊控制指令

序號

指令

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

1

清顯示

0

0

0

0

0

0

0

0

0

1

2

光標返回

0

0

0

0

0

0

0

0

1

*

3

置輸入模式

0

0

0

0

0

0

0

1

I/D

S

4

顯示開/關控制

0

0

0

0

0

0

1

D

C

B

5

光標或字符移位

0

0

0

0

0

1

S/C

R/L

*

*

6

置功能

0

0

0

0

1

DL

N

F

*

*

7

置字符發生存貯器地址

0

0

0

1

字符發生存貯器地址

8

置數據存貯器地址

0

0

1

顯示數據存貯器地址

9

讀忙標志或地址

0

1

BF

計數器地址

10

寫數到CGRAM或DDRAM)

1

0

要寫的數據內容

11

從CGRAM或DDRAM讀數

1

1

讀出的數據內容


鍵盤:

鍵盤采用5個button,分別控制倒計時開始、調分個位、調分十位、調秒個位、調秒十位;另外還加一個總開關用于控制所有電路的通電情況。


蜂鳴器:

用三極管、電阻和speaker組成蜂鳴器電路。蜂鳴器最重要的特點是只要按照極性要求加上合適的直流電壓就可以發出固有頻率的聲音

3軟件設計3.1 程序流程圖3.1.1 主程序流程圖

主程序開始初始化,然后掃描鍵盤、復位電路和計數器。當鍵盤按鍵有按下時,調整計數器值,LCD顯示新值。當復位鍵有按下時,計數器復位為初值,重新倒計數。當計數器值倒計為0時,蜂鳴器發出聲音,計數器停止倒計,程序結束。主程序流程圖如圖3-1所示:

1




電子信息工程專業設計文檔
              3軟件設計3.1 程序流程圖3.1.1 主程序流程圖

主程序開始初始化,然后掃描鍵盤、復位電路和計數器。當鍵盤按鍵有按下時,調整計數器值,LCD顯示新值。當復位鍵有按下時,計數器復位為初值,重新倒計數。當計數器值倒計為0時,蜂鳴器發出聲音,計數器停止倒計,程序結束。主程序流程圖如圖3-1所示:

圖3-1 主程序流程圖

3.1.2 蜂鳴器發聲程序流程圖

  蜂鳴器發聲程序流程圖如圖3-2所示:

                      圖3-2 蜂鳴器發聲程序流程圖

3.2 蜂鳴器發聲電路原理

    對于單片機產生音樂,關鍵是控制頻率的輸出.我們知道,不同的聲音對應不同的頻率,產生有規律的頻率輸出就可以得到相應規律的聲音.有8個基本音符:do﹑re﹑mi﹑fa﹑so﹑la﹑xi﹑do,八個不同的音符對應著不同的頻率.只要我們對照音符輸出相對應的頻率,就可以產生美妙的音樂.本文中采用了T0中斷方式產生不同頻率, 并用按鍵控制音樂的播放和停止。用三極管、電阻和BUZZER組成蜂鳴器電路。蜂鳴器最重要的特點是只要按照極性要求加上合適的直流電壓就可以發出固有頻率的聲音。

3.3 蜂鳴器發聲程序的關鍵代碼

下面是蜂鳴器報警的子程序清單:

FLAG BIT 00H

ORG 00H

START: JB P3.1,START

JNB FLAG,NEXT

MOV R2,#200

DV: CPL P3.7

LCALL DELY500

LCALL DELY500

DJNZ R2,DV

CPL FLAG

NEXT: MOV R2,#200

DV1: CPL P3.7

LCALL DELY500

DJNZ R2,DV1

CPL FLAG

SJMP START

DELY500: MOV R7,#250

LOOP: NOP

DJNZ R7,LOOP

RET

END




4 PROTEUS仿真結果4.1 總體電路仿真結果

總體電路仿真結果如圖4-1所示:


圖4-1 總體電路仿真結果


4.2 假設倒計時為5秒時的仿真如圖4-2所示


圖4-2  假設倒計時設為5秒時的仿真

4、3 時間設置的仿真

設置時間的仿真,例如設置為22分22秒如圖4-3


5 總結

通過此次多功能數字計數器的設計制作,我們將從書本上學到的知識應用于實踐,再次鞏固了我的單片機知識,提高了我的電路仿真設計能力。雖然設計過程中遇到了很多困難,但是在解決這些問題的過程無疑是對自身專業素質的提高。當最終調試成功的時候也是對自己的一種肯定。此次的設計不僅增強了自己在專業設計方面的信息,鼓舞了自己,更是一次興趣的培養,為以后的學習方向明確了重點。

另外在這次設計中我們遇到了不少的問題,針對不同的問題我們采取不同的解決方法,最終一一解決了。在我們遇到不懂得問題時,利用課本上、參考書上的知識,以及網上的資料最終解決問題。和隊友之間相互討論,明白了團隊合作的重要性。

本次項目設計還存在很多不足,比如,LCD的日期顯示還不夠完美,計數功能也不夠詳細等。以后爭取完善這個設計,以提高我們的單片機設計能力。

這里很感謝李曉艷老師給我們的指導和教育,感謝她給我們提供了良好的學習設計環境,也很感謝可愛的伙伴們,讓我覺得團隊的力量很偉大。

                     6 附表(本設計所有程序)


  1. #include <reg51.h>
  2. #include <intrins.h>
  3. sbit rs= P2^4;
  4. sbit rw = P2^5;
  5. sbit ep = P2^6;
  6. sbit k1=P1^4;
  7. sbit k2=P1^5;
  8. sbit k3=P1^6;
  9. sbit k4=P1^7;
  10. sbit k5=P1^3;
  11. sbit speaker=P3^0;
  12. unsigned char code dis1[] = {"The Last Time  "};
  13. unsigned char code dis2[] = {"TIME 00:00"};
  14. unsigned char code dis3[] = {"0123456789"};
  15. unsigned int num=0;
  16. unsigned int miaogw=0;
  17. unsigned int miaosw=0;
  18. unsigned int fengw=0;
  19. unsigned int fensw=0;
  20. unsigned char flag=1;
  21. unsigned char timer0h,timer0l,time;
  22.         //世上只有媽媽好數據表
  23. code unsigned char sszymmh[]={        6,2,3,      5,2,1,      3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
  24.                                       6,2,4,      3,2,2,      5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
  25.                                       6,1,1,      5,2,1,      3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
  26.                                       5,2,1,      6,2,1,      3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
  27.                                       2,2,1,      1,2,1,      6,1,1, 1,2,1, 5,1,6, 0,0,0
  28.                                       };
  29.        // 音階頻率表 高八位
  30. code unsigned char FREQH[]={
  31.                                 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
  32.                                 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
  33.                                 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
  34.                                 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
  35.                                } ;
  36.          // 音階頻率表 低八位
  37. code unsigned char FREQL[]={
  38.                                  0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
  39.                                  0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
  40.                                  0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
  41.                                  0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
  42.                                 };
  43. void delayyy(unsigned char t)
  44.    {
  45.    unsigned char t1;
  46.    unsigned long t2;
  47.    for(t1=0;t1<t;t1++)
  48.    {
  49.     for(t2=0;t2<8000;t2++)
  50.        {
  51.         ;
  52.         }
  53.    }
  54.    TR0=0;
  55. }
  56. void t0int() interrupt 1
  57. {
  58. TR0=0;
  59. speaker=!speaker;
  60. TH0=timer0h;
  61. TL0=timer0l;
  62. TR0=1;
  63. }
  64. void song()
  65. {
  66. TH0=timer0h;
  67. TL0=timer0l;
  68. TR0=1;
  69. delayyy(time);                     
  70. }
  71. void delay(unsigned char ms)
  72. {
  73.               unsigned char i;
  74.               while(ms--)
  75.               {
  76.                                           for(i = 0; i< 250; i++)
  77.                             {
  78.                                           _nop_();
  79.                                           _nop_();
  80.                                           _nop_();
  81.                                 _nop_();
  82.                             }
  83.               }
  84. }
  85. bit lcd_bz()
  86. {
  87. bit result;
  88. rs = 0;
  89. rw = 1;
  90. ep = 1;
  91. _nop_();
  92. _nop_();
  93. _nop_();
  94. _nop_();
  95. result = (bit)(P0 & 0x80);
  96. ep = 0;
  97. return result;
  98. }
  99. void lcd_wcmd(unsigned char cmd)
  100. {
  101. while(lcd_bz());//判斷LCD是否忙碌
  102. rs = 0;
  103. rw = 0;
  104. ep = 0;
  105. _nop_();
  106. _nop_();
  107. P0 = cmd;
  108. _nop_();
  109. _nop_();
  110. ep = 1;
  111. _nop_();
  112. _nop_();
  113. ep = 0;
  114. }
  115. void lcd_pos(unsigned char pos)
  116. {
  117. lcd_wcmd(pos | 0x80);
  118. }
  119. void lcd_wdat(unsigned char dat)
  120. {
  121. while(lcd_bz());//判斷LCD是否忙碌
  122. rs = 1;
  123. rw = 0;
  124. ep = 0;
  125. P0 = dat;
  126. _nop_();
  127. _nop_();
  128. ep = 1;
  129. _nop_();
  130. _nop_();
  131. ep = 0;
  132. }
  133. void lcd_wshuzi(void)
  134. {
  135.               lcd_pos(0x47);
  136.               lcd_wdat(dis3[fensw]);
  137.               lcd_pos(0x48);
  138.               lcd_wdat(dis3[fengw]);
  139.               lcd_pos(0x4A);
  140.               lcd_wdat(dis3[miaosw]);
  141.               lcd_pos(0x4B);
  142.               lcd_wdat(dis3[miaogw]);
  143. }
  144. void lcd_init()                            //LCD初始化
  145. {
  146. lcd_wcmd(0x38);
  147. delay(1);
  148. lcd_wcmd(0x0c);
  149. delay(1);
  150. lcd_wcmd(0x06);
  151. delay(1);
  152. lcd_wcmd(0x01);
  153. delay(1);
  154. }
  155. void keyscan(void)
  156. {
  157.   while(flag)
  158.               {
  159.          if(k1==0)
  160.           {
  161.             delay(10);
  162.           if(k1==0)
  163.             {
  164.             fensw++;
  165.             while(!k1);
  166.             if(fensw==10)
  167.             fensw=0;
  168.             }
  169.           }
  170.         if(k2==0)
  171.           {
  172.             delay(10);
  173.           if(k2==0)
  174.             {
  175.             fengw++;
  176.             while(!k2);
  177.             if(fengw==10)
  178.             fengw=0;
  179.             }
  180.           }
  181.         if(k3==0)
  182.           {
  183.             delay(10);
  184.           if(k3==0)
  185.             {
  186.              miaosw++;
  187.             while(!k3);
  188.             if(miaosw==10)
  189.             miaosw=0;
  190.             }
  191.           }
  192.          if(k4==0)
  193.           {
  194.             delay(10);
  195.           if(k4==0)
  196.             {miaogw++;
  197.             while(!k4);
  198.             if(miaogw==10)
  199.             miaogw=0;
  200.             }
  201.           }
  202.        if(k5==0)
  203.         flag=0;
  204.       lcd_wshuzi();
  205.         }
  206. }
  207. void delay1s(void)
  208. {
  209.         unsigned char h,i,j,k;
  210.          for(h=5;h>0;h--)
  211.          for(i=4;i>0;i--)
  212.          for(j=116;j>0;j--)
  213.          for(k=214;k>0;k--);
  214. }
  215. void main(void)
  216. {
  217. unsigned char j;  unsigned char k,i;
  218. speaker=0;
  219. lcd_init();// 初始化LCD
  220. delay(10);
  221. lcd_pos(0x02);//設置顯示位置
  222. j = 0;
  223. while(dis1[j] != '\0')
  224. {
  225. lcd_wdat(dis1[j]);//顯示字符
  226. j++;
  227. }
  228. while(1)
  229. {
  230. lcd_pos(0x42);// 設置顯示位置
  231. i = 0;
  232. while(dis2[i] != '\0')
  233. {
  234. lcd_wdat(dis2[i]);// 顯示字符
  235. i++;  }
  236. keyscan();
  237. ……………………

  238. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


完整的Word格式文檔51黑下載地址:

帶有LCD顯示的音樂倒數計數器課程設計.doc (807 KB, 下載次數: 131)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:369370 發表于 2018-7-11 11:56 | 只看該作者
6666啊,正好學習
回復

使用道具 舉報

板凳
ID:376216 發表于 2018-12-26 10:11 | 只看該作者

厲害厲害   感謝
回復

使用道具 舉報

地板
ID:458534 發表于 2018-12-30 13:51 | 只看該作者
感謝,用來學習。
回復

使用道具 舉報

5#
ID:458534 發表于 2018-12-30 13:52 | 只看該作者
感謝用來學習
回復

使用道具 舉報

6#
ID:550465 發表于 2019-5-29 19:16 | 只看該作者
感謝啊!
回復

使用道具 舉報

7#
ID:464306 發表于 2019-12-5 09:04 | 只看該作者
感謝!!!!!
回復

使用道具 舉報

8#
ID:769694 發表于 2020-6-10 15:06 | 只看該作者
有沒有仿真
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线欧美 | 国产精品成人久久久久 | 一区二区三区四区国产精品 | 91欧美 | 欧美一级片在线看 | 免费在线观看91 | 日韩在线成人 | 亚洲三区视频 | 热99在线| 久久久久久国产免费视网址 | 国产伦精品一区二区三区精品视频 | 成人国产精品久久久 | 中文字幕视频在线看5 | 欧美操操操 | 久久成人免费 | 秋霞国产| 精品三区| 伦理一区二区 | 久热免费在线 | 亚洲午夜av| 国产91久久精品一区二区 | 国产第一页在线播放 | 日本一区二区三区四区 | 日韩中文字幕视频在线 | 欧美在线观看一区 | 欧美综合久久 | 久久69精品久久久久久久电影好 | 91视频观看 | 成人精品一区二区 | 久久一区二区三区四区五区 | 91精品国产色综合久久 | 久久夜视频| 亚洲高清视频一区二区 | 亚洲精品一区二区三区在线 | 久久久久国产一级毛片高清网站 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 黄网站免费在线 | 亚洲欧美视频一区 | 欧美一级久久 | 我想看一级黄色毛片 | 99色综合 |