單片機課程設(shè)計——自動滾動廣告牌的設(shè)計_第1頁
單片機課程設(shè)計——自動滾動廣告牌的設(shè)計_第2頁
單片機課程設(shè)計——自動滾動廣告牌的設(shè)計_第3頁
單片機課程設(shè)計——自動滾動廣告牌的設(shè)計_第4頁
單片機課程設(shè)計——自動滾動廣告牌的設(shè)計_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、單片機課程設(shè)計 題 目: 自動滾動廣告牌 所在院系: 機電汽車工程學院 專 業(yè): 機101-4班 學 號: 姓 名: 完成日期: 指導教師: 目錄一、 課程設(shè)計任務(wù)書二、 設(shè)計項目簡介 (一)設(shè)計思路 (二)任務(wù)分工三、 設(shè)計過程 (一)電路原理圖及各器件原理介紹 (二)程序模塊四、 程序框圖五、 程序清單六、 系統(tǒng)功能簡介 (一)產(chǎn)品的功能簡介 (二)產(chǎn)品使用方法 (三)產(chǎn)品性能簡介七、 產(chǎn)品說明書八、 總結(jié)一、 課程設(shè)計任務(wù)書基于單片機的自動滾動廣告牌的設(shè)計廣告牌有四張宣傳彩頁,卷入一卷軸,依次來回顯示每一頁,每一頁顯示的時間相同。本設(shè)計以MCS-51系列單片機為核心,采用常用電子器件設(shè)計

2、,自行設(shè)計電源。設(shè)計廣告彩頁的顯示時間長度,時間一到就用直流電動機旋轉(zhuǎn)控制彩頁切換,用一臺直流電動機控制廣告彩頁的旋轉(zhuǎn)(正轉(zhuǎn)/反轉(zhuǎn))。用一個光敏電阻傳感器測量光強度,當光線較暗的時候啟動背景燈。設(shè)置三個按鍵:手動/自動切換、手動正轉(zhuǎn)和手動反轉(zhuǎn),用一個發(fā)光二極管顯示手動/自動狀態(tài)。設(shè)置若干個位置控制行程開關(guān),設(shè)置彩頁的顯示位置。按鍵輸入采用中斷方式。二、 設(shè)計項目簡介設(shè)計思路(1)選用ATMEL公司的AT89C51單片機。·與MCS-51 兼容·4K字節(jié)可編程FLASH存儲器·壽命:1000寫/擦循環(huán)·數(shù)據(jù)保留時間:10年·全靜態(tài)工作:0Hz-2

3、4MHz·三級程序存儲器鎖定·128×8位內(nèi)部RAM·32可編程I/O線·兩個16位定時器/計數(shù)器·5個中斷源·可編程串行通道·低功耗的閑置和掉電模式·片內(nèi)振蕩器和時鐘電路(2)通過I/O口直接控制廣告彩頁的切換,通過程序?qū)崿F(xiàn)顯示延時,通過debug確定準確延時時間長度。(3)通過掃描按鍵實現(xiàn)監(jiān)測自動與手動、正轉(zhuǎn)與反轉(zhuǎn)按鍵狀態(tài)。由于選用單片機沒有足夠的外部中斷,且掃描按鍵的方法更加簡潔,故此處違背了設(shè)計任務(wù)書,希望可以得到諒解。(4)利用比較器設(shè)計光感電路(仿真中使用電位器模擬光敏電阻),提供光線信號。通

4、過I/O口輸出信號,控制背景燈驅(qū)動器(仿真中使用74HC573驅(qū)動一拍黃色LED小燈模擬),進而控制背景燈開關(guān)。(5)利用L298驅(qū)動器驅(qū)動直流電機,通過I/O口信號控制L298輸出信號,進而控制電機正轉(zhuǎn),反轉(zhuǎn)及停轉(zhuǎn)的狀態(tài)。(6)通過I/O口信號直接控制“手動/自動”狀態(tài)顯示指示燈亮滅。(7)使用四個行程開關(guān)(仿真中使用按鍵模擬)在自動狀態(tài)下控制電機正轉(zhuǎn),反轉(zhuǎn)及停轉(zhuǎn)。通過掃描按鍵的方式實現(xiàn)監(jiān)測行程開關(guān)狀態(tài)。(8)設(shè)計外部晶振及復位電路。(9)由于以上任務(wù)較簡單,較早完成了任務(wù),經(jīng)過組內(nèi)商議,為挑戰(zhàn)一下自己,決定添加溫度檢測并顯示的功能。通過DS18b20芯片完成溫度檢測,A/D轉(zhuǎn)換,使用串口通

5、信單片機將檢測的溫度讀取,經(jīng)數(shù)據(jù)轉(zhuǎn)換,并通過I/O口顯示在四位共陰極數(shù)碼管上。任務(wù)分工分四個工段:獨立模塊功能單獨設(shè)計電路、程序,仿真;各模塊整合,調(diào)試,仿真;修整,優(yōu)化,添加擴展及附加功能;整理產(chǎn)品說明書、課程報告及其他材料。分三個小組:任務(wù)分工表:第一小組第二小組第三小組工段一按鍵模塊電機驅(qū)動模塊行程開關(guān)監(jiān)測自動展示程序光感模塊背景燈模塊工段二電路原理圖仿真電路圖程序整合程序調(diào)試提前整理產(chǎn)品說明書工段三添加擴展及附加功能修整,優(yōu)化整理產(chǎn)品說明書,確定初稿工段四修正產(chǎn)品說明書,整理課程報告及其他材料。三、 設(shè)計過程電路原理圖及各器件原理介紹(1)整體電路圖展示(2) 各模塊原理介紹1. 光感

6、比較電路U3=RV1URV1+R2 U2=R3UR3+R1光線越強RV1越小,U3越小,當小到一定值(設(shè)定5K)U3<U2。通過比較器比較U2、U3,U3<U2時輸出0,控制背景燈關(guān),U3>U2時輸出1,控制背景燈開。2. DS18b20溫度傳感器DSl820數(shù)字溫度計提供9位(二進制)溫度讀數(shù),指示器件的溫度。信息經(jīng)過單線接口送入DSl820或從DSl820送出,因此從主機CPU到DSl820僅需一條線(和地線),DSl820的電源可以由數(shù)據(jù)線本身提供而不需要外部電源。DSl820的測量范圍從-55到+125增量值為0.5可在l s(典型值)內(nèi)把溫度變換成數(shù)字。每一個DSl

7、820包括一個唯一的64位長的序號,該序號值存放在DSl820內(nèi)部的ROM(只讀存貯器)中,開始8位是產(chǎn)品類型編碼(DSl820編碼均為10H)接著的48位是每個器件唯一的序號,最后8位是前面56位的CRC(循環(huán)冗余校驗)碼DSl820中還有用于貯存測得的溫度值的兩個8位存貯器RAM,編號為0號和1號,1號存貯器存放溫度值的符號如果溫度為負,則1號存貯器8位全為1,否則全為0,0號存貯器用于存放溫度值的補碼LSB(最低位)的1表示0.5攝氏度,將存貯器中的二進制數(shù)求補再轉(zhuǎn)換成十進制數(shù),并除以2就得到被測溫度值(-55125攝氏度)。3. L298芯片驅(qū)動電機L298N 為SGS-THOMSON

8、 Microelectronics 所出產(chǎn)的雙全橋步進電機專用驅(qū)動芯片( Dual Full-Bridge Driver ) ,內(nèi)部包含4信道邏輯驅(qū)動電路,可同時驅(qū)動2個減速直流電機,內(nèi)含二個H-Bridge 的高電壓、大電流雙全橋式驅(qū)動器,接收標準TTL邏輯準位信號,可驅(qū)動46V、2A以下的步進電機,且可以直接透過電源來調(diào)節(jié)輸出電壓;此芯片可直接由單片機的IO端口來提供模擬時序信號,控制轉(zhuǎn)速。OUTl、OUT2 和OUT3、OUT4之間分別接2個電機;input1input4 輸入控制電位來控制電機的正反轉(zhuǎn);Enable 則控制電機停轉(zhuǎn)。4. 四位共陰極數(shù)碼管的驅(qū)動74HC573芯片驅(qū)動數(shù)碼

9、管顯示接口,通過單片機I/O接口直接控制數(shù)碼管位選。共陰極數(shù)碼管真值表十六進制0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x000x40顯示符號0123456789空-74HC573為八進制 3 態(tài)非反轉(zhuǎn)透明鎖存器,輸入是和標準 CMOS 輸出兼容的;加上拉電阻,他們能和 LS/ALSTTL 輸出兼容。當鎖存使能端LE為高時,這些器件的鎖存對于數(shù)據(jù)是透明的(也就是說輸出同步)。當鎖存使能變低時,符合建立時間和保持時間的數(shù)據(jù)會被鎖存。5. 獨立按鍵模塊按鍵一端接地,另一端與單片機I/O口相連并外接上拉電阻。按鍵按下時I/O口由高電位轉(zhuǎn)為低點位,經(jīng)單片機讀取引

10、腳信號,將按鍵狀態(tài)輸入。6. 外部晶振電路51單片機單片機內(nèi)部有一個用于構(gòu)成振蕩器的高增益反向放大器,引腳XTAL1為輸入端,XTAL2為輸出端。兩個引腳間跨接晶體振蕩器與微調(diào)電容組成并聯(lián)諧振電路,構(gòu)成一個自激振蕩器為內(nèi)部時鐘提供振蕩時鐘。振蕩期的頻率主要取決于晶體的振蕩頻率,一般晶體可在1.2MHz12MHz之間任選。電容C1,C2通常取30pF左右。7. 復位電路51單片機51系列單片機系統(tǒng)通常有上電復位和按鍵復位兩種方式。最簡單的一種上電復位及按鍵復位電路圖如上圖所示。上電后,由于電容充電,使RST持續(xù)一段時間的高電平,完成復位操作;當單片機處于運行中或者死鎖時,按下“復位”按鈕,也可以

11、使單片機進入復位狀態(tài)。程序模塊1. 數(shù)碼管動態(tài)掃描函數(shù)void refresh_led()P2=Disp_Taba0;P1=dispbit0;P1=0xff;/每個數(shù)碼管按負值、打開、關(guān)閉的順序P2=Disp_Taba1;P1=dispbit1;P1=0xff;P2=Disp_Taba2 |0x80;P1=dispbit2;P1=0xff;P2=Disp_Taba3;P1=dispbit3;P1=0xff; 每個數(shù)碼管依次按負值、打開、關(guān)閉的順序受控,從而實現(xiàn)動態(tài)掃描。2. 溫度轉(zhuǎn)換模塊程序void start_temp_sensor(void)DS18b20_reset();write_by

12、te(0xCC);/ 發(fā)Skip ROM命令write_byte(0x44); / 發(fā)轉(zhuǎn)換命令/* 讀存溫度*/void read_temp()uint8 temp_data2; / 讀出溫度暫放uint16 temp=0,c;double wd;start_temp_sensor();delay_ms(100);DS18b20_reset(); / 復位write_byte(0xCC); / 發(fā)Skip ROM命令write_byte(0xBE); / 發(fā)讀命令temp_data0=read_byte(); /溫度低8位temp_data1=read_byte(); /溫度高8位temp =

13、 temp_data1;/一下三步將溫度高八位低八位整合temp <<= 8;temp |= temp_data0;if (temp_data1&0xf0)/判斷溫度是否為負temp=(temp)+1;/為負時,取反加一wd=temp*0.0625;/轉(zhuǎn)為攝氏溫度,0.0625為溫感芯片儲存精度a0=11; /為負時,第一個數(shù)碼管顯示負號elsewd=temp*0.0625;a0=10; /為正時,第一個數(shù)碼管不顯示c=wd;/將攝氏溫度轉(zhuǎn)為整型a2=c%10; /第三個數(shù)碼管顯示個位a1=c/10%10; /第二個數(shù)碼管顯示十位c=wd*10; a3=c%10; /第四個

14、數(shù)碼管顯示小數(shù)位3. 背景燈控制模塊程序void beijingdeng ()if(ggxh)led_bjd=1;elseled_bjd=0; 光感信號為高電平時,背景燈控制引腳輸出高電平,控制背景燈關(guān);光感信號為低電平時,背景燈控制引腳輸出低電平,控制背景燈亮。4. 自動控制模塊程序void zidong ()led_zs=0;/點亮 自動/手動指示燈while(1)if (i)/判斷電機正反轉(zhuǎn)狀態(tài),并控制電機正反轉(zhuǎn)dj_zz=1;dj_fz=0;elsedj_zz=0;dj_fz=1;if (kg1=0)/監(jiān)測行程開關(guān)1狀態(tài)dj_zz=0;/關(guān)閉電機并延時dj_fz=0;delay_ms(

15、100);i+;/控制電機下次啟動換向read_temp();/讀存溫度信息if (kg2=0)/監(jiān)測行程開關(guān)2狀態(tài)dj_zz=0;dj_fz=0;delay_ms(100);read_temp();if (kg3=0)/監(jiān)測行程開關(guān)3狀態(tài)dj_zz=0;dj_fz=0;delay_ms(100);read_temp();if (kg4=0)/監(jiān)測行程開關(guān)4狀態(tài)dj_zz=0;dj_fz=0;delay_ms(100);i-;/控制電機下次啟動換向read_temp();beijingdeng ();/調(diào)入背景燈控制函數(shù),監(jiān)測感光信號refresh_led();/顯示溫度信息if(aj_qh=

16、0)/監(jiān)測自動/手動切換_按鍵狀態(tài)dj_zz=0;/監(jiān)測到切換到手動狀態(tài)時,電機停轉(zhuǎn)dj_fz=0; break;/跳出自動控制循環(huán),進入主函數(shù) 自動控制狀態(tài)下,手動/自動指示燈控制引腳輸出為低電平,指示燈亮;判斷電機正反轉(zhuǎn)狀態(tài),并控制電機正反轉(zhuǎn);監(jiān)測行程開關(guān)1狀態(tài),若為低電平,則關(guān)閉電機,延時并控制電機下次啟動換向;若為高電平,則不變。然后讀存溫度信息并依次監(jiān)測行程開關(guān)2、3狀態(tài),若為低電平,則關(guān)閉電機,延時并讀存溫度信息。然后監(jiān)測行程開關(guān)4狀態(tài),若為低電平,則關(guān)閉電機,延時并控制電機下次啟動換向。最后監(jiān)測自動/手動切換_按鍵狀態(tài),若為低電平,則電機停轉(zhuǎn),跳出自動控制循環(huán),進入主函數(shù)。5.

17、手動控制模塊程序void shoudong ()/手動控制子函數(shù)led_zs=1;/關(guān)閉 自動/手動指示燈while (1)if(aj_zz=0)/按下正轉(zhuǎn)按鍵時,電機正轉(zhuǎn) dj_zz=0;dj_fz=1;if(aj_fz=0) /按下反轉(zhuǎn)按鍵時,電機反轉(zhuǎn)dj_zz=1;dj_fz=0;if(aj_fz=1&&aj_zz=1)/無按鍵按下,電機停轉(zhuǎn)dj_zz=0;dj_fz=0;if(aj_qh=1)/監(jiān)測自動/手動切換_按鍵狀態(tài)break;/監(jiān)測到切換到自動狀態(tài)時,跳出手動控制循環(huán), /進入主函數(shù)refresh_led();/顯示溫度信息beijingdeng ();/調(diào)入背

18、景燈控制函數(shù),監(jiān)測感光信號手動控制狀態(tài)下,手動/自動指示燈控制引腳輸出為高電平,指示燈滅;若按下正轉(zhuǎn)按鍵,則L298芯片OUT1輸出+12V,OUT2輸出0V,電機正轉(zhuǎn);若按下反轉(zhuǎn)按鍵,則L298芯片OUT1輸出0V,OUT2輸出+12V,電機反轉(zhuǎn);若無按鍵按下,則L298芯片OUT1輸出0V,OUT2輸出0V,電機停轉(zhuǎn)。6. 主程序模塊程序main()while(1) if(aj_qh=0)/監(jiān)測自動/手動切換_按鍵狀態(tài), /并控制進入相應(yīng)子函數(shù)shoudong(); else zidong(); 若自動/手動切換_按鍵按下時,控制引腳輸出為低電平,電機狀態(tài)為手動控制;若自動/手動切換_按鍵

19、無按下時,控制引腳輸出為高電平,電機狀態(tài)為自動控制。四、 程序框圖五、 程序清單#include <reg52.h>externvoid_nop_ (void);typedef unsignedchar uint8;typedef unsignedint uint16;typedef unsigned long uint32;typedef char int8;typedefint int16;code uint8 Disp_Tab =0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;code uint8 dis

20、pbit4 =0xfe,0xfd,0xfb,0xf7; /數(shù)碼管位選控制變量uint8 a4;/數(shù)碼管顯示控制變量uint8 i=0;/電機正反轉(zhuǎn)控制變量#define nops(); _nop_(); _nop_(); _nop_(); _nop_(); /定義空指令,調(diào)整控制溫感驅(qū)動時序sbitdj_zz = P30;/定義電機正反轉(zhuǎn)控制引腳sbitdj_fz = P31;sbitled_bjd= P32;/定義背景燈控制引腳sbitled_zs= P33;/定義指示燈控制引腳sbit DQ = P36;/溫度輸入口sbitggxh = P37;/定義感光信號引腳sbit kg1 = P0

21、0;/定義行程開關(guān)1信號引腳sbit kg2 = P01;/定義行程開關(guān)2信號引腳sbit kg3 = P02;/定義行程開關(guān)3信號引腳sbit kg4 = P03;/定義行程開關(guān)4信號引腳sbitaj_fz= P04;/定義電機正反轉(zhuǎn)_按鍵信號引腳sbitaj_zz= P05;sbitaj_qh= P06;/定義自動/手動切換_按鍵信號引腳/* 數(shù)碼管動態(tài)掃描函數(shù)*/voidrefresh_led()P2=Disp_Taba0;P1=dispbit0;P1=0xff;/每個數(shù)碼管按負值、打開、關(guān)閉的順序P2=Disp_Taba1;P1=dispbit1;P1=0xff;P2=Disp_Tab

22、a2|0x80;P1=dispbit2;P1=0xff;P2=Disp_Taba3;P1=dispbit3;P1=0xff; /*兩個延時函數(shù)*/void delay(uint16 n)while (n-);voiddelay_ms(uint16 n)uint8 m=120;while (n-)while (m-)refresh_led();/刷新顯示溫度信息/* 18B20復位函數(shù)*/void DS18b20_reset(void)bit flag=1;while (flag)while (flag)DQ = 1;delay(1);DQ = 0;delay(50); /延時550usDQ =

23、 1; delay(6); /延時66usflag = DQ;delay(45); /延時500usflag = DQ;DQ=1;/* 18B20寫1個字節(jié)函數(shù)*/voidwrite_byte(uint8 val)uint8i;for (i=0; i<8; i+)DQ = 1;_nop_();DQ = 0;nops(); /4usDQ = val& 0x01; /最低位移出delay(6); /延時66usval>>= 1; /右移一位DQ = 1;delay(1); /* 18B20讀1個字節(jié)函數(shù)*/uint8 read_byte(void)uint8i, valu

24、e=0;for (i=0; i<8; i+)DQ=1;_nop_();value>>= 1;DQ = 0;nops(); /延時4usDQ = 1;nops(); /延時4us if (DQ)value|=0x80;delay(6); /延時66usDQ=1;return(value);/* 啟動溫度轉(zhuǎn)換*/voidstart_temp_sensor(void)DS18b20_reset();write_byte(0xCC);/ 發(fā)Skip ROM命令write_byte(0x44); / 發(fā)轉(zhuǎn)換命令/* 讀存溫度*/voidread_temp()uint8 temp_dat

25、a2; / 讀出溫度暫放uint16 temp=0,c;doublewd;start_temp_sensor();delay_ms(100);DS18b20_reset(); / 復位write_byte(0xCC); / 發(fā)Skip ROM命令write_byte(0xBE); / 發(fā)讀命令temp_data0=read_byte(); /溫度低8位temp_data1=read_byte(); /溫度高8位temp = temp_data1;/一下三步將溫度高八位低八位整合temp<<= 8;temp |= temp_data0;if (temp_data1&0xf0)

26、/判斷溫度是否為負temp=(temp)+1;/為負時,取反加一wd=temp*0.0625;/轉(zhuǎn)為攝氏溫度,0.0625為溫感芯片儲存精度a0=11;/為負時,第一個數(shù)碼管顯示負號elsewd=temp*0.0625;a0=10;/為正時,第一個數(shù)碼管不顯示c=wd;/將攝氏溫度轉(zhuǎn)為整型a2=c%10;/第三個數(shù)碼管顯示個位a1=c/10%10;/第二個數(shù)碼管顯示十位c=wd*10;a3=c%10;/第四個數(shù)碼管顯示小數(shù)位/*背景燈控制子函數(shù)*/voidbeijingdeng ()if(ggxh)led_bjd=1;elseled_bjd=0;/*自動控制子函數(shù)*/voidzidong ()

27、led_zs=0;/點亮自動/手動指示燈while(1)if (i)/判斷電機正反轉(zhuǎn)狀態(tài),并控制電機正反轉(zhuǎn)dj_zz=1;dj_fz=0;elsedj_zz=0;dj_fz=1;if (kg1=0)/監(jiān)測行程開關(guān)1狀態(tài)dj_zz=1;/關(guān)閉電機并延時dj_fz=1;delay_ms(100);i+;/控制電機下次啟動換向read_temp();/讀存溫度信息if (kg2=0)/監(jiān)測行程開關(guān)2狀態(tài)dj_zz=1;dj_fz=1;delay_ms(100);read_temp();if (kg3=0)/監(jiān)測行程開關(guān)3狀態(tài)dj_zz=1;dj_fz=1;delay_ms(100);read_temp();if (kg4=0)/監(jiān)測行程開關(guān)4狀態(tài)dj_zz=1;dj_fz=1;delay_ms(100);i-;/控制電機下次啟動換向read_temp();beijingdeng ();/調(diào)入背景燈控制函數(shù),監(jiān)測感光信號refresh_led();/顯示溫度信息if(aj_qh=0)/監(jiān)測自動/手動切換_按鍵狀態(tài)dj_zz=1;/監(jiān)測到切換到手動狀態(tài)時,電機停轉(zhuǎn)dj_fz=1;break;/跳出自動控制循環(huán),進入主函數(shù)void shoudong ()/手動控制子函數(shù)led_zs=1;/關(guān)閉自動/手動指示燈while (1)if(aj_z

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論