亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 單片機(jī)發(fā)光二極管及數(shù)碼管的編程控制實(shí)驗(yàn) 帶程序 [打印本頁]

作者: 小景是神仙吖    時間: 2019-6-13 09:26
標(biāo)題: 單片機(jī)發(fā)光二極管及數(shù)碼管的編程控制實(shí)驗(yàn) 帶程序
1.1設(shè)計(jì)目的

(1)加強(qiáng)對單片機(jī)和C語言的認(rèn)識,充分掌握和理解設(shè)計(jì)各部分

的工作原理、設(shè)計(jì)過程、選擇芯片器件、模塊化編程等多項(xiàng)知識。

(2)用單片機(jī)模擬實(shí)現(xiàn)具體應(yīng)用,使個人設(shè)計(jì)能夠真正使用。

(3)把理論知識與實(shí)踐相結(jié)合,充分發(fā)揮個人能力,并在實(shí)踐中鍛煉。

(4)提高利用已學(xué)知識分析和解決問題的能力。

(5)提高實(shí)踐動手能力。

1.2控制要求

(1)用七只發(fā)光二極模擬工業(yè)控制中的7道工序,高電平點(diǎn)亮,每道工序用定時器進(jìn)行工序間的順序轉(zhuǎn)換。

(2)與此同時運(yùn)用動態(tài)掃描和定時器1在數(shù)碼管上顯示出從765432開始以1/10秒的速度遞減至765398,并保持顯示此數(shù)。

1.3系統(tǒng)總體方案設(shè)計(jì)


設(shè)計(jì)主要流程:



圖1-1 課程設(shè)計(jì)總流



2.控制系統(tǒng)原理分析

2.1硬件部分分析
2.1.1 89C51單片機(jī)引腳圖及引腳功能介紹

本次實(shí)習(xí)的中斷功能就是基于89C51單片機(jī)的基礎(chǔ)上實(shí)現(xiàn)的,首先來簡單認(rèn)識一下,它的引腳如圖2-1所示:

圖2-1 89C51引腳示意圖


2.1.2顯示系統(tǒng)工作原理

LED顯示電路:

           

                           圖2-2 LCD顯示電路

LCD顯示電路,由U33的74HC245驅(qū)動,以顯示電平狀態(tài)。高電平為“1”狀態(tài),點(diǎn)亮發(fā)光二極管。對于74HC245,實(shí)物圖如下

圖2-3 74HC24實(shí)物圖

                        圖2-4 74LS245結(jié)構(gòu)圖

引腳定義:

第1腳DIR,為輸入輸出端口轉(zhuǎn)換用,DIR=“1”高電平時信號由“A”端輸入“B”端輸出,DIR=“0”低電平時信號由“B”端輸入“A”端輸出。

第2~9腳“A”信號輸入輸出端,A0=B0,A7=B7,A0與B0是一組,如果DIR=“1”O(jiān)E=“0”則A1輸入B1輸出,其它類同。如果DIR=“0”O(jiān)E=“0”則B1輸入A1輸出,其它類同。

第11~18腳“B”信號輸入輸出端,功能與“A”端一樣,不再描述。

第19腳OE,若該腳為“1”A/B端的信號將不導(dǎo)通,只有為“0”時A/B端才被啟用,該腳也就是起到開關(guān)的作用。

第10腳GND,電源地。

第20腳VCC,電源正極。

      

                            圖2-5 顯示電路結(jié)構(gòu)圖

八段數(shù)碼管顯示電路由8155的PB0、PB1經(jīng)74LS164“串轉(zhuǎn)并”后輸出得到。6位位碼由8155 的PA0口輸出,經(jīng)uA2003反向驅(qū)動后,選擇相應(yīng)顯示位。74LS164是串行輸入并行輸出轉(zhuǎn)換電路,串行輸入的數(shù)據(jù)位由8155的PB0控制,時鐘位由8155的PB1控制輸出。

寫程序時,只要向數(shù)據(jù)位地址輸出數(shù)據(jù),然后向時鐘位地址輸出一高一低兩個電平就可以將數(shù)據(jù)位置到74LS164中,并且實(shí)現(xiàn)移位。向顯示位選通地址輸出高電平就可以點(diǎn)亮相應(yīng)的顯示位。

  

                    圖2-6 74LS164引腳結(jié)構(gòu)圖

  引腳信息:            

符號

引腳

說明

DSA

1

數(shù)據(jù)輸入

DSB

2

數(shù)據(jù)輸入

Q0~Q3

3~6

輸出

GND

7

地 (0 V)

CP

8

時鐘輸入(低電平到高電平邊沿觸發(fā))

/M/R

9

中央復(fù)位輸入(低電平有效)

Q4~Q7

10~13

輸出

VCC

14

正電源


功能概述:

74LS164是8位邊沿觸發(fā)式移位寄存器,串行輸入數(shù)據(jù),然后并行輸出。數(shù)據(jù)通過兩個輸入端(DSA 或 DSB)之一串行輸入;任一輸入端可以用作高電平使能端,控制另一輸入端的數(shù)據(jù)輸入。兩個輸入端或者連接在一起,或者把不用的輸入端接高電平,一定不要懸空。時鐘 (CP)每次由低變高時,數(shù)據(jù)右移一位,輸入到 Q0, Q0 是兩個數(shù)據(jù)輸入端(DSA和 DSB)的邏輯與,它將上升時鐘沿之前保持一個建立時間的長度。主復(fù)位 (MR) 輸入端上的一個低電平將使其它所有輸入端都無效,非同步地清除寄存器,強(qiáng)制所有的輸出為低電平。

字段碼:

        

圖2-7 數(shù)碼管數(shù)字代碼表


2.2軟件設(shè)計(jì)流程圖
                         圖2-8 設(shè)計(jì)流程圖

    P1口的P1.0~P1.6接七只發(fā)光二極管,P1.7接報(bào)警器,P3.4接開工啟動開關(guān),P3.2接外部故障輸入模擬開關(guān)。

   主程序流程圖:當(dāng)程序啟動,開啟中斷,并使P1、P3口初始化,當(dāng)給start開始信號即P3.4得電時,運(yùn)行主程序中使發(fā)光二極管得電的程序,從L0至L7,按順序每次只點(diǎn)亮一只二極管,并延時一段時間,然后點(diǎn)亮下一只二極管,當(dāng)?shù)谄咧欢䴓O管得電延時完成后,程序跳轉(zhuǎn)到工序1開始的地方,按此規(guī)律從工序1到工序7依次循環(huán)進(jìn)行下去。

   中斷服務(wù)子程序:當(dāng)外部故障輸入模擬開關(guān)即P3.3得電時,運(yùn)行中斷子程序,先使P1=0x00即關(guān)閉輸出保護(hù)現(xiàn)場,speak=1使報(bào)警器報(bào)警。然后判斷故障情況,如果故障清除,則恢復(fù)現(xiàn)場跳出中斷子程序回到主程序;如果故障沒有清除,則報(bào)警器繼續(xù)報(bào)警直至故障清除。


3.程序分析
3.1順序控制程序

#include "reg51.h"

#define WORD unsigned int

#define BYTE unsigned char

sbit Speak=P1^7;          P1.7對應(yīng)報(bào)警開關(guān),用P1.7對應(yīng)的得電信號來改變是否故障

sbit Start              =              P3^4;         定義P3口的P3.4為啟動開關(guān)

sbit test              =              P1^0;        /*定義變量,報(bào)警P1.7;啟動P3.4;外部故障開關(guān)P3.3*/

void delay(WORD time)

{

              WORD i;

              for(i=0;i<=time;i++);

}                          /*延時中斷程序*/

void ErroBl (void) interrupt 2 using 1

{

        P1=0X00;                           

                            {

                                          Speak=1;

                                          delay(200);

                                          Speak=0;

                                          delay(100);

                            }

}                         /*外部故障中斷報(bào)警程序,循環(huán)報(bào)警*/

void main()              主函數(shù)

{

              IE=0x84;

              IP=0x04;

    PSW=0x00;            /*輔助繼電器賦值,允許外部中斷;優(yōu)先級別最高*/

              while(1)             循環(huán)

        {

        if(Start==1)         /*啟動信號*/

              {        P1=0X01;     /*工序一*/給P1口賦值為00000001,即工序1對應(yīng)的燈得電,燈亮。

           delay(6000); /*工序一延時*/采用延時程序,是得電信號延時,即燈亮延時6000后滅。

               其他燈的亮滅只是對賦值進(jìn)行更改,來達(dá)到讓7個燈互相交替亮滅。

程序分析說明:

    P3.4為開工啟動開關(guān),高電平啟動。在主程序中P1 = 0xff表示高電平有效啟動;IT0 = 0;表示Enable EX0,外部中斷INT0低電平有效;EX0 = 1;表示中斷標(biāo)志位為1時,允許INT0中斷;EA = 1;表示中斷總控制開關(guān),為1時CPU允許中斷;在while語句中,P1 = 0xfe;表示從右第一個燈亮;Delay(1000);表示延時1S;往后以此類推。但是在Delay(1000);表示進(jìn)入延時函數(shù)調(diào)用。其中while (cnt-- !=0)表示從1000往下減1。

3.2數(shù)碼管顯示程序

顯示設(shè)計(jì)程序是在八段數(shù)碼顯示設(shè)計(jì)程序的基礎(chǔ)上加以修改得到的。按要求高三位是固定不變的,只需要變化低三位。在低三位遞減到指定數(shù)據(jù)時,保持固定不變。



  1. <font style="font-size: 12pt">#include<absacc.h>
  2. #define LEDLen 6
  3. #define mode 0x03;
  4. #define CAddr XBYTE[0xe100]/* 控制字地址 */
  5. #define OUTBIT XBYTE[0xe101]/*  位控制口 */
  6. #define CLK164 XBYTE[0xe102]/* 段控制口(接164時鐘位) */
  7. #define DAT164 XBYTE[0xe102] /* 段控制口(接164數(shù)據(jù)位) */
  8. #define IN     XBYTE[0xe103] /* 鍵盤讀入口 */
  9. unsigned char LEDBuf[LEDLen];  /* 顯示緩沖 */
  10. code unsigned char LEDMAP[] = {  /* 八段管顯示碼 */
  11.   0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
  12.   0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
  13. };

  14. void Delay(unsigned char CNT)  /*延時中斷程序*/
  15. {
  16.   unsigned char i;
  17.   while (CNT-- !=0)
  18.     for (i=100; i !=0; i--);
  19. }
  20. 如何保證最后停在7654398,在前面建立一個無限循環(huán)程序,當(dāng)滿足一定條件是跳入該程序就能保證顯示數(shù)碼管把持不變,下面是該程序。
  21. void display()       /*按要求最后顯示765398,并用無限循環(huán)保持不變*/
  22. {   
  23.               while(1) {
  24.                 unsigned char j;
  25.               LEDBuf[0] = LEDMAP[(7) & 0x0f];   /*六個八段數(shù)碼管依次賦值*/
  26.      LEDBuf[1] = LEDMAP[(6) & 0x0f];
  27.      LEDBuf[2] = LEDMAP[(5) & 0x0f];
  28.      LEDBuf[3] = LEDMAP[(3) & 0x0f];
  29.               LEDBuf[4] = LEDMAP[(9) & 0x0f];
  30.               LEDBuf[5] = LEDMAP[(8) & 0x0f];
  31.                               for(j=0; j<30; j++)   /*延時*/        
  32.                  DisplayLED();         /*顯示上面賦值數(shù)據(jù)*/
  33.                               }
  34. }
  35. 如何讓數(shù)碼管由765432逐漸遞減到7654398,下面是主函數(shù)的編寫,循環(huán)的編寫,來滿足要求。
  36. void main()                   主函數(shù)
  37. {
  38.    unsigned char i=2;
  39.    unsigned char m;
  40.    unsigned char j;
  41.    unsigned char n=3;
  42.    unsigned char k=4;        /*定義變量*/
  43.       CAddr = mode;
  44.    while(1) {
  45.      LEDBuf[0] = LEDMAP[(m+7) & 0x0f];     /*八段數(shù)碼管依次賦值*/
  46.      LEDBuf[1] = LEDMAP[(m+6) & 0x0f];
  47.      LEDBuf[2] = LEDMAP[(m+5) & 0x0f];
  48.      LEDBuf[3] = LEDMAP[(k) & 0x0f];  
  49.      i--;                                   /*個位逐漸減1*/
  50. LEDBuf[4] = LEDMAP[(n) & 0x0f];       /*十位八段數(shù)碼管賦值*/
  51.               if(i==0)                         /*當(dāng)個位減小為0時,十位減1。同時給個{                                       位賦值9*/
  52.               n--;
  53.               i=9;
  54.               }
  55.               LEDBuf[5] = LEDMAP[(i) & 0x0f];
  56.               if(n==0&&i==1) {                 /*當(dāng)十位個位同時減小到0時,百位減1;
  57.     k--;                               同時給個位和十位賦值9*/
  58.               i=9;
  59.               n=9;
  60.               }                                         
  61.     for(j=0; j<30; j++)
  62.                  DisplayLED();      /* 顯示該次循環(huán)所得數(shù)據(jù) */
  63.      if(k==3&&i==8)   /*當(dāng)減小到765398時,進(jìn)去子程序display無限循環(huán)顯示   
  64.      display();                    765398*/
  65.    }
  66. }</font>
復(fù)制代碼


4.運(yùn)行調(diào)試
4.1軟件調(diào)試過程

    點(diǎn)開軟件,進(jìn)入程序編譯系統(tǒng)。點(diǎn)擊菜單欄“項(xiàng)目”,選擇下拉框里面的“新項(xiàng)目”。如下圖4-1所示。                        




圖 4-1 新建項(xiàng)目

   新建項(xiàng)目是要選擇“Atmel”下拉框中的“AT89C51”然后點(diǎn)擊確定。如下圖

                           圖4-2 目標(biāo)選擇設(shè)備

    新建項(xiàng)目之后,需要點(diǎn)擊“新建一個文件”在項(xiàng)目目錄下新建程序編譯文件。

之后點(diǎn)擊保存,需要注意的是保存時文檔名稱后面要加“.c”。如下圖。                              

   



圖4-3 新建程序編譯文件

文件建好之后,就可以開始編寫程序了。編寫程序時注意減少不必要的編寫錯誤,注意語句后面的分號是否需要;每個程序段的前大括號和后大括號相對應(yīng)。這樣在編譯過程中能減少很多工作。

添加文件到組,編寫程序完成后。右鍵單擊源代碼組1。選擇添加文件到組“源代碼組1”,出現(xiàn)如圖所示對話框,選擇剛建立的編譯程序文件到源代碼組1,完成添加。


圖 4-4 編譯重建目標(biāo)文

編寫完程序添加到組之后開始調(diào)試,首先檢查程序是否有錯誤,單擊“編譯當(dāng)前文件”,如果輸出窗口中顯示沒有錯誤,那么接著單擊“重建所有目標(biāo)文件”;如果編譯過程中出現(xiàn)錯誤,那么需要按照輸出窗口中提示的錯誤改正之后再重建文件。



圖 4-5 設(shè)置調(diào)試接口

重建目標(biāo)文件之后需要先設(shè)置好通訊借口,計(jì)算機(jī)需要與硬件設(shè)備向通訊,需要設(shè)置合理的通訊方式。本調(diào)試中使用(U):Keil Monitor-51 driver,保護(hù)接口選擇Com3,波特率選用38400,其他默認(rèn)。



通訊方式選擇后啟動調(diào)試,單擊菜單欄中“啟動/停止調(diào)試(D)”開始調(diào)試。然后可選擇運(yùn)行到指定位置來檢驗(yàn)程序是否能正常運(yùn)行。一直檢查無誤后,可直接點(diǎn)擊“運(yùn)行”觀察實(shí)驗(yàn)現(xiàn)象。

4.2安裝調(diào)試及方法

(1)P3.4連K1,P3.3連K2,P1.0—P1.6分別連到L1—L7,P1.7連SIN(電子音響輸入端)。

(2)K1開關(guān)撥在上面,K2撥在上面。

(3)用連續(xù)方式從起始地址0580H開始運(yùn)行程序(輸入0580后按EXEC鍵),此時應(yīng)在等待開工狀態(tài)。

(4)K1撥至下面(顯低電平),各道工序應(yīng)正常運(yùn)行。

(5)K2撥至下面(低電平),應(yīng)有聲音報(bào)警(人為設(shè)置故障)。

(6)K2撥至上面(高電平),即排除故障,程序應(yīng)從剛才報(bào)警的那道工序繼續(xù)執(zhí)行。


4.3 結(jié)果分析

實(shí)驗(yàn)中延時的時間的計(jì)算為DELAY1t=20*125*200*12*2/12000000=1S; 分別代表的含義為:20、125、200是循環(huán)的次數(shù)相乘,12代表一個指令周期為12個機(jī)器周期,2代表該指令周期為雙指令周期,12000000表示晶振的頻率,也是機(jī)器周期。

在實(shí)驗(yàn)中可以觀察到VL1~VL7依次按照1~7秒間隔循環(huán)亮起。在故障出現(xiàn)時能夠保護(hù)現(xiàn)場,待故障消除后從現(xiàn)場又開始循環(huán)。

數(shù)碼管上顯示出從765432開始以1/10秒的速度遞減至765398,并保持顯示此數(shù)。


5.總結(jié)

通過本設(shè)計(jì),我們大家對單片機(jī)的工作原理以及運(yùn)用要求有了更進(jìn)一步的了解,對我們的動手能力,編程能力都有很大的幫助。這次課程設(shè)計(jì)的控制要求有兩個,一個是用七只發(fā)光二極管模擬工業(yè)控制中的7道工序,高電平點(diǎn)亮,每道工序用定時器進(jìn)行工序間的順序轉(zhuǎn)換。另一個是在第一個的基礎(chǔ)上運(yùn)用動態(tài)掃描和定時器1在數(shù)碼管上顯示出從765432開始以1/10秒的速度遞減至765398,并保持顯示此數(shù)。我們首先收集了大量的資料,查找有關(guān)集成芯片和器件的文獻(xiàn),只有對各種元器件有了充分的了解之后我們在實(shí)際的操作才會更快。

在完成第一個發(fā)光二極管的控制要求時,程序全部正確在走,硬件連接也全部正確,但是燈卻一直是全亮的,搞不懂怎么回事。把老師請來了才知道,是我們設(shè)置的燈的閃光時間太短,就是說燈是按照要求在點(diǎn)亮,但是由于點(diǎn)亮的速度太快,肉眼分辨不出它是否熄滅過,看起來就像一直在亮。可見如果不對整個設(shè)計(jì)的每一個細(xì)節(jié)都了解的清清楚楚的話,哪怕你做對了,你都搞不懂這是怎么回事。這告訴我們,以后無論在工作還是在生活中,都要認(rèn)真對待每一個細(xì)節(jié),不能得過且過,不求甚解。

在編程方面一直是我的弱項(xiàng),好多程序我都搞不明白,這個時候我都會盡量去問同學(xué),在課程設(shè)計(jì)的過程中,同學(xué)之間的相互幫助是相當(dāng)重要的,有時自己的一個坎半天都過不去,但是說不定同學(xué)的一個點(diǎn)撥,我們就通了。所以,我們要學(xué)會團(tuán)結(jié)協(xié)作,這樣,才會事半功倍。這次的設(shè)計(jì)教會我們的不止是專業(yè)知識,在生活道理上也教會了很多,讓我們終生受益。


完整的Word格式文檔51黑下載地址:
單片機(jī)原理及應(yīng)用設(shè)計(jì)報(bào)告設(shè)計(jì)格式評分標(biāo)準(zhǔn)裝訂首頁.docx (504.83 KB, 下載次數(shù): 6)





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