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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8716|回復(fù): 5
收起左側(cè)

數(shù)字電子時(shí)鐘設(shè)計(jì)報(bào)告-單片機(jī)原理與應(yīng)用課程大作業(yè)

[復(fù)制鏈接]
ID:328014 發(fā)表于 2018-5-28 01:37 | 顯示全部樓層 |閱讀模式

《單片機(jī)原理與應(yīng)用》課程大作業(yè)


數(shù)字電子時(shí)鐘

學(xué)院:信息與通信工程學(xué)院

專業(yè):光電信息科學(xué)與工程            

班級:15050341               

學(xué)號:1505034138


一、系統(tǒng)功能介紹

電子時(shí)鐘是一種利用數(shù)字電路來顯示秒、分、時(shí)的計(jì)時(shí)裝置,與傳統(tǒng)的機(jī)械鐘相比,它具有走時(shí)準(zhǔn)確、顯示直觀、無機(jī)械傳動裝置等優(yōu)點(diǎn),因而得到廣泛應(yīng)用。隨著人們生活環(huán)境的不斷改善和美化,在許多場合可以看到數(shù)字電子鐘。

電子鐘亦稱數(shù)字顯示鐘,是一種用數(shù)字電路技術(shù)實(shí)現(xiàn)時(shí)、分、秒計(jì)時(shí)的裝置,與機(jī)械時(shí)鐘相比,直觀性為其主要顯著特點(diǎn),且因非機(jī)械驅(qū)動,具有更長的使用壽命,相較石英鐘的石英機(jī)芯驅(qū)動,更具準(zhǔn)確性。

利用單片機(jī)和數(shù)碼管顯示電路呈現(xiàn)出設(shè)計(jì)要求,4位數(shù)碼管前兩位顯示小時(shí)00-23,后兩位顯示分鐘00-69,一秒鐘閃爍一次,閃爍60次為一分鐘。K1是功能鍵調(diào)節(jié)時(shí)間并移位選擇,K2是加數(shù)鍵,K3是減數(shù)鍵。將程序下載到單片機(jī)內(nèi),給單片機(jī)上電,由于初始值設(shè)的是0x00,所以數(shù)碼管顯示0000,并且后兩位數(shù)碼管每一秒閃爍一下。按K1鍵暫停閃爍并開始選擇數(shù)碼管,按下K2、K3鍵校準(zhǔn)時(shí)間。

二、原理介紹

(1)以STC15W4K32S4_PDIP40單片機(jī)為控制核心,用單片機(jī)內(nèi)部定時(shí)器為時(shí)鐘源,設(shè)計(jì)電子時(shí)鐘,使用4位數(shù)碼管顯示時(shí)、分,后兩位數(shù)碼管(分)的閃爍顯示秒。

(2)顯示格式為:“XXXX”

(3)用3個(gè)功能鍵操作來進(jìn)行對時(shí),用K1--K3鍵定義描述功能即:

K1--功能鍵,默認(rèn)0是執(zhí)行時(shí)鐘程序,按一下調(diào)整秒,按第二次是調(diào)整分,按第三次是調(diào)整時(shí),再按一下變成0執(zhí)行默認(rèn)時(shí)鐘程序;

K2--加一鍵,如果功能鍵按的是調(diào)整秒的,秒就加一;如果功能鍵按的是調(diào)整分的,分就加一;如果功能鍵按的是調(diào)整時(shí)的,時(shí)就加一;

K3--減一鍵,如果功能鍵按的是調(diào)整秒的,秒就減一;如果功能鍵按的是調(diào)整分的,分就減一;如果功能鍵按的是調(diào)整時(shí)的,時(shí)就減一;

三、模塊設(shè)計(jì)(核心器件介紹、電路設(shè)計(jì)、程序設(shè)計(jì))
1、核心器件介紹

STC15W4K32S4_PDIP40單片機(jī):

(1)STC15W4K32S4系列單片機(jī)中包含中央處理器(CPU)、程序存儲器(Flash)、數(shù)據(jù)存儲器(SRAM)、定時(shí)器/計(jì)數(shù)器、內(nèi)部掉電喚醒專用定時(shí)器、I/O口、比較器、看門狗、高速異步串行通信端口UART,高速同步串行端口SPI,片內(nèi)高精度R/C時(shí)鐘及高可靠復(fù)位等模塊。STC15W4K32S4系列的單片機(jī)集成了一組(各自獨(dú)立6路)增強(qiáng)型的PWM波形發(fā)生器。PWM波形發(fā)生器內(nèi)部有一個(gè)15位的PWM計(jì)數(shù)器供6路PWM使用,用戶可以設(shè)置每路PWM的初始電平。另外,PWM波形發(fā)生器為每路PWM又設(shè)計(jì)了兩個(gè)用于控制波形翻轉(zhuǎn)的計(jì)數(shù)器T1/T2,可以非常靈活的每路PWM的高低電平寬度,從而達(dá)到對PWM的占空比以及PWM的輸出延遲進(jìn)行控制的目的。由于6路PWM是各自獨(dú)立的,且每路PWM的初始狀態(tài)可以進(jìn)行設(shè)定,所以用戶可以將其中的任意兩路配合起來使用,即可實(shí)現(xiàn)互補(bǔ)對稱輸出以及死區(qū)控制等特殊應(yīng)用。

(2)STC15W4K32S4系列增強(qiáng)型PWM輸出端口定義如下:

[PWM2:P3.7, PWM3:P2.1, PWM4:P2.2, PWM5:P2.3, PWM6:P1.6, PWM7:P1.7]

每路PWM的輸出端口都可使用特殊功能寄存器位CnPINSEL分別獨(dú)立的切換到第二組

[PWM2_2:P2.7, PWM3_2:P4.5, PWM4_2:P4.4, PWM5_2:P4.2, PWM6_2:P0.7, PWM7_2:P0.6]

(3)優(yōu)點(diǎn):

①增強(qiáng)型 8051 CPU,1T,單時(shí)鐘/機(jī)器周期,速度比普通8051快8-12倍。

②大容量4096(4K)字節(jié)片內(nèi)RAM數(shù)據(jù)存儲器

③內(nèi)部高可靠復(fù)位,ISP編程時(shí)8級復(fù)位門檻電壓可選,可徹底省掉外部復(fù)位電路。

④工作頻率范圍:0MHz ~ 28MHz,相當(dāng)于普通8051的0MHz~336MHz。

圖一  電路圖

2、電路設(shè)計(jì)



圖二 按鍵部分                      圖三 復(fù)位電路

(1)按鍵部分(圖二):

    K1--功能鍵:默認(rèn)0是執(zhí)行時(shí)鐘程序,按一下調(diào)整秒,按第二次是調(diào)整分,按第三次是調(diào)整時(shí),再按一下變成0執(zhí)行默認(rèn)時(shí)鐘程序;

    K2--加一鍵:如果功能鍵按的是調(diào)整秒的,秒就加一;如果功能鍵按的是調(diào)整分的,分就加一;如果功能鍵按的是調(diào)整時(shí)的,時(shí)就加一;

K3--減一鍵:如果功能鍵按的是調(diào)整秒的,秒就減一;如果功能鍵按的是調(diào)整分的,分就減一;如果功能鍵按的是調(diào)整時(shí)的,時(shí)就減一;

(2)復(fù)位電路(圖三):

包括上電自動復(fù)位和按鍵復(fù)位兩種方式。上電瞬間,RC電路充電,RST引線端出現(xiàn)正脈沖,只要RST端保持10ms以上的高電平,就能使單片機(jī)有效地復(fù)位。其中R1選擇10KΩ的電阻,電容器一般選擇10μF。 按下K4鍵時(shí)鐘設(shè)置歸零。

圖四 1602液晶部分

此電路中1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)接口,各引腳接口說明如下表所示:

編號

符號

引腳說明

編號

符號

引腳說明

1

VSS

電源地

9

D2

數(shù)據(jù)

2

VDD

電源正極

10

D3

數(shù)據(jù)

3

VL

液晶顯示偏壓

11

D4

數(shù)據(jù)

4

RS

數(shù)據(jù)/命令選擇

12

D5

數(shù)據(jù)

5

R/W

讀/寫選擇

13

D6

數(shù)據(jù)

6

E

使能信號

14

D7

數(shù)據(jù)

7

D0

數(shù)據(jù)




8

D1

數(shù)據(jù)




引腳接口說明:

第1腳:VSS為地電源;

第2腳:VDD接5V正電源;

第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地電源時(shí)對比度最高,對比度過高時(shí)會 產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度。

第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。

第5腳:R/W為讀寫信號線,高電平 時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RA為低電平R/W為高電平時(shí)可以讀忙信號,當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。

第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí)讀取信息,液晶模塊執(zhí)行命令。

第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。

圖五 晶振電路

單片機(jī)內(nèi)部的振蕩電路是一個(gè)高增益反向放大器,引線X1和X2分別是放大器的輸入端和輸出端。單片機(jī)內(nèi)部雖然有振蕩電路,但要形成時(shí)鐘,外部還需附加電路。他的時(shí)鐘產(chǎn)生方式有兩種:內(nèi)部時(shí)鐘電方式和外部時(shí)鐘方式。由于外部時(shí)鐘方式用于多片單片機(jī)組成的系統(tǒng)中,所以此處選用內(nèi)部時(shí)鐘方式。即利用其內(nèi)部的振蕩電路在X1和X2引線上外接定時(shí)元件,內(nèi)部振蕩電路產(chǎn)生自激振蕩。


四、總結(jié)

經(jīng)過此次單片機(jī)作業(yè)的設(shè)計(jì),通過完成一個(gè)電子時(shí)鐘設(shè)計(jì)的過程,我學(xué)到了很多東西!

這樣實(shí)戰(zhàn)的設(shè)計(jì)過程是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識、發(fā)現(xiàn)、提出、分析、和解決實(shí)際問題。鍛煉實(shí)踐能力的重要環(huán)節(jié),是對學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察。此次設(shè)計(jì)的過程中發(fā)現(xiàn)了很多自己知識方面的欠缺,通過查找資料等方式去彌補(bǔ)。隨著科學(xué)技術(shù)發(fā)展的日新月異,單片已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域,在生活中可以說是無處不在,因此作為二十一世紀(jì)的大學(xué)生來說掌握單片機(jī)的開發(fā)技術(shù)是十分重要的。以前課程設(shè)計(jì)是一個(gè)組設(shè)計(jì)一個(gè)課題,當(dāng)自己通過查資料詢問等方式完成一個(gè)自己的課題時(shí)感覺真的很充實(shí)。


單片機(jī)源碼:

  1. #include <reg51.h>
  2. #include <stdio.h>
  3. #define uchar unsigned  char
  4. #define uint unsigned int
  5. sbit RS=P2^0;
  6. sbit RW=P2^1;
  7. sbit E=P2^2;
  8. sbit k1=P1^0;
  9. sbit k2=P1^1;
  10. sbit k3=P1^2;
  11. uchar shuzhu[]={"beijing time"};//定義字符串
  12. uchar shuzhu3[]={"2017"};//定義字符串
  13. uchar shuzhu2[]={"xx:xx:xx"};//時(shí)鐘數(shù)組一共8個(gè)字符,程序的重點(diǎn)
  14. uchar q,fla,num,x;
  15. signed char m,f,s;
  16. void delay(uchar x)//延時(shí)函數(shù)   
  17. {
  18.    uchar a,b;
  19.    for(a=0;a<x;a++)
  20.       for(b=0;b<120;b++);
  21. }
  22. void key(void)//按鍵掃描        
  23. {
  24.    if(k1==0)//模式
  25.    {
  26.       delay(5);
  27.       if(k1==0)
  28.       {
  29.               num++;//num是功能鍵的變量,默認(rèn)是0執(zhí)行時(shí)鐘程序,按一下調(diào)整秒,按第二次是調(diào)整分,按第三次調(diào)整時(shí),再按一下變成0執(zhí)行默認(rèn)時(shí)鐘程序
  30.               if(num>3)
  31.                   num=0;
  32.               while(k1==0);
  33.               }
  34.       }
  35.    if(k2==0)//判斷加一的按鍵有無按下
  36.    {
  37.       delay(5);
  38.       if(k2==0)
  39.       {
  40.               if(num==1)//如果功能鍵按的是調(diào)整秒的,秒就加一
  41.               {
  42.                   m++;
  43.                   if(m==60)
  44.                   {
  45.                     m=0;
  46.                   }
  47.                   }
  48.               if(num==2)//如果功能鍵按的是調(diào)整分的,分就加一
  49.               {
  50.                   f++;
  51.                   if(f==60)
  52.                   {
  53.                     f=0;
  54.                   }
  55.                   }
  56.               if(num==3)//如果功能鍵按的是調(diào)整時(shí)的,時(shí)就加一
  57.               { s++;
  58.                   if(s==24)  
  59.                      s=0;
  60.               }
  61.               while(k2==0);
  62.               }
  63.       }
  64.    if(k3==0)//判斷減一的按鍵有無按下
  65.    {
  66.       delay(5);
  67.       if(k3==0)
  68.       {
  69.               if(num==1)//同上
  70.               {
  71.                      m--;
  72.                   if(m<0)
  73.                      m=59;
  74.               }
  75.               if(num==2)
  76.               {
  77.                   f--;
  78.                   if(f<0)
  79.                      f=59;
  80.               }
  81.               if(num==3)
  82.               {
  83.                   s--;
  84.                   if(s<0)
  85.                      s=23;
  86.               }
  87.                 while(k3==0);
  88.               }
  89.       }
  90. }
  91. void write_command(uchar x)//寫指令函數(shù)
  92. {
  93.    RS=0;
  94.    RW=0;
  95.    P0=x;
  96.    E=1;
  97.    delay(5);
  98.    E=0;
  99. }
  100. void write_data(uchar x)//寫數(shù)據(jù)函數(shù)
  101. {
  102.    RS=1;
  103.    RW=0;
  104.    P0=x;
  105.    E=1;
  106.    delay(5);
  107.    E=0;
  108. }
  109. void init()//初始化1602函數(shù)
  110. {
  111.    write_command(0x38);
  112.    write_command(0x08);
  113.    write_command(0x01);
  114.    write_command(0x06);
  115.    write_command(0x0c);
  116. }
  117. void pos(uchar x,uchar y)//要寫入的位置函數(shù)
  118. {
  119.    x&=0x0f;
  120.    if(y==1)
  121.    write_command(0x80+x);
  122.    if(y==2)
  123.    write_command(0x80+0x40+x);
  124. }
  125. void xssz(void)//把時(shí)間賦給顯示數(shù)組
  126. {
  127.     shuzhu2[0]=s/10+'0';//加‘0’是為了把時(shí)間的數(shù)變成ASCII碼
  128.     shuzhu2[1]=s%10+'0';
  129.     shuzhu2[3]=f/10+'0';
  130.     shuzhu2[4]=f%10+'0';
  131.     shuzhu2[6]=m/10+'0';
  132.     shuzhu2[7]=m%10+'0';
  133. }
  134. void main(void)//主函數(shù)
  135. {
  136.     uchar k,a,b;
  137.     EA=1;
  138.     ET0=1;
  139.     ET1=1;
  140.     TMOD=0X11;
  141.     TH0=(65535-50000)/256;
  142.     TL0=(65535-50000)%256;
  143.     TH1=(65535-50000)/256;
  144.     TL1=(65535-50000)%256;
  145.     TR0=1;
  146.     fla=1;//閃爍標(biāo)志位
  147.    init();//初始化1602
  148.     pos(2,1);//設(shè)置顯示位置
  149.      for(k=0;k<12;k++)
  150.      {
  151.               write_data(shuzhu[k]);//固定顯示16個(gè)字符beijing time
  152.       }
  153.       pos(0,2);//設(shè)置顯示位置
  154.      for(a=0;a<4;a++)
  155.      {
  156.               write_data(shuzhu3[a]);//固定顯示4個(gè)字符2016
  157.      }
  158.       while(1)//無限循環(huán)
  159.     {
  160.        key();//判斷有誤按鍵按下
  161.        pos(7,2);//設(shè)置顯示位置
  162.        for(b=0;b<8;b++)
  163.               {
  164.                  write_data(shuzhu2[b]); //讓1602顯示時(shí)鐘數(shù)組里的內(nèi)容
  165.               }   
  166.        switch(num)//判斷功能鍵按下所對應(yīng)的功能
  167.        {
  168.                 case 0 : TR0=1;TR1=0;//默認(rèn)無按下狀態(tài)num值是0,正常的時(shí)鐘功能。
  169.                          xssz();
  170.                                if(fla==0)
  171.                                   shuzhu2[5]=' ';//修改時(shí)鐘數(shù)組的內(nèi)容讓分號:的閃爍
  172.                                if(fla==1)
  173.                                   shuzhu2[5]=':';  //修改時(shí)鐘數(shù)組的內(nèi)容讓分號:的閃爍
  174.                                                             break;  
  175.                 case 1 : TR0=0;TR1=1;  //當(dāng)功能鍵按的第一下,把定時(shí)器0關(guān)掉,開啟定時(shí)器1,讓秒閃爍
  176.                          shuzhu2[5]=':';   //恒定顯示分號:
  177.                                if(fla==1)
  178.                                {
  179.                                   shuzhu2[6]=' '; //在時(shí)鐘數(shù)組秒的位置寫入空格,讓秒的位置閃爍
  180.                                   shuzhu2[7]=' ';//
  181.                                }
  182.                                   if(fla==0)
  183.                                   xssz();
  184.                                                             break;
  185.                 case 2 : TR0=0; TR1=1; //當(dāng)功能鍵按的第二下,把定時(shí)器0關(guān)掉,開啟定時(shí)器1,讓分閃爍
  186.                          shuzhu2[5]=':';  
  187.                                if(fla==1)
  188.                                {
  189.                                   shuzhu2[3]=' '; //在時(shí)鐘數(shù)組分的位置寫入空格,讓分的位置閃爍
  190.                                   shuzhu2[4]=' ';
  191.                                }
  192.                                if(fla==0)
  193.                          xssz();
  194.                                                       break;                    
  195.                 case 3 : TR0=0; TR1=1; //當(dāng)功能鍵按的第三下,把定時(shí)器0關(guān)掉,開啟定時(shí)器1,讓時(shí)閃爍
  196.                          shuzhu2[5]=':';
  197.                                if(fla==1)
  198.                                {
  199.                                   shuzhu2[0]=' '; //在時(shí)鐘數(shù)組時(shí)的位置寫入空格,讓時(shí)的位置閃爍
  200.                                   shuzhu2[1]=' ';
  201.                                }
  202.                                if(fla==0)
  203.                                   xssz();
  204.                                                             break;
  205.        }  //switch的括號
  206.     }//while的括號
  207. }//main函數(shù)的括號
  208. void ds0() interrupt 1//秒自增
  209. {
  210.    TH0=(65535-50000)/256;
  211.    TL0=(65535-50000)%256;
  212.     q++;
  213.     if(q==10)//閃爍標(biāo)志位
  214.        fla=!fla;
  215.     if(q==20)
  216.     {
  217.        q=0;
  218.        m++;
  219. ……………………

  220. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
11.png

全部資料51hei下載地址:
http://www.zg4o1577.cn/bbs/dpj-120295-1.html


回復(fù)

使用道具 舉報(bào)

ID:339635 發(fā)表于 2018-5-28 11:45 | 顯示全部樓層
老哥,你是不是四川某高校的啊?
回復(fù)

使用道具 舉報(bào)

ID:339635 發(fā)表于 2018-5-28 12:04 | 顯示全部樓層
我正好也做這個(gè)作業(yè),1號就要交了,奈何下載不了
回復(fù)

使用道具 舉報(bào)

ID:1020093 發(fā)表于 2023-2-11 13:43 | 顯示全部樓層
你好,想問一下,如果需要實(shí)現(xiàn)開始、暫停和清零功能需要怎么修改代碼
回復(fù)

使用道具 舉報(bào)

ID:405044 發(fā)表于 2023-2-11 18:32 | 顯示全部樓層
這個(gè)芯片是可以在proteus中仿真的
回復(fù)

使用道具 舉報(bào)

ID:579397 發(fā)表于 2023-2-12 01:57 | 顯示全部樓層
在系統(tǒng)功能介紹和原理介紹都是寫使用數(shù)碼管顯示,但在模塊設(shè)計(jì)就寫1602。這樣的設(shè)計(jì)報(bào)告是認(rèn)真的嗎?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区三区在线 | 人人天天操 | 日韩免费视频一区二区 | 亚州av在线 | 精品视频一区二区三区 | 精品国产一区二区三区性色av | 成人福利网站 | 日本特黄a级高清免费大片 国产精品久久性 | 亚洲精品无 | 欧美精品乱码久久久久久按摩 | yeyeav| 日韩免费福利视频 | 精品亚洲一区二区 | 日韩欧美中文 | 午夜精品在线 | 欧美视频在线播放 | 在线观看亚洲专区 | 天天爽综合网 | 中文字幕一区在线 | 日韩视频―中文字幕 | 精品1区 | 91影院 | 婷婷综合五月天 | 99精品视频在线观看 | 亚洲福利 | 国产精品久久久久久久久久久久冷 | 91tv在线观看 | 亚洲444eee在线观看 | 欧美一级欧美一级在线播放 | 国产精品久久久久久久久久久久久 | 狠狠干av| 亚洲免费视频在线观看 | 亚洲精选一区二区 | 亚洲欧美少妇 | 在线免费国产视频 | 国内精品久久久久久久影视简单 | 国产九九精品 | 色婷婷综合久久久中文字幕 | 亚洲一区二区三区在线免费观看 | 日韩视频精品在线 | 国产精品久久久久久婷婷天堂 |