第一篇:單片機課程設計
單片機課程設計 跑馬燈的控制
摘要:本設計選擇對跑馬燈的控制,先構思跑馬燈實現預想效果,然后進行分 析,根據要求編寫程序,選擇硬件端口,并進行調試致預想效果,最后淺談課
程設計的經歷,以及總結。
目錄
一)課程設計的目的 二)課程設計的要求 三)流程圖 四)原理圖 五)程序語言 六)
總結 七)參考資料
設計題目:試設計一個閃爍跑馬燈控制器,該控制器可以控制8個燈順序亮滅。當單片機上電后,8個燈依次從左向右亮,并且每個燈亮的時間為1秒鐘。這時,如果按鈕K1按下,則燈亮的順序是從右向左,同樣,每個燈亮的時間是1秒鐘。這時,如果按下按鈕K2,則此時,4個燈亮4個燈滅,延遲4秒鐘以后,又開始從左向右點亮。最后,若按下按鈕K3,則全部燈亮。此時若想再次點亮燈,必須
重新上電。題目分析:
該題目要求控制8盞燈的亮滅,可使用單片機的P1.0到P1.8口來控制。按鈕K1用P3.4口,K2用P3.2口,及外部中斷0,K3用P3.3口,及外部中斷1,分別來實現。單片機使用AT89C52,電源使用5V標準電源。順序亮滅使用外部中斷
源構成循環控制語句。
一、課程設計的目的
課程設計是本專業集中實踐環節的主要內容之一。訓練正確地應用單片機,培養解決工業控制、工業檢測等領域具體問題的能力。學生通過所做課題,熟悉單片機應用系統開發研制的過程,軟硬件設計的工作方法、內容及步驟,對學生進行基本技能訓練。例如組成系統、編程、調試、繪圖等。使學生理論聯系實際,提高動手能力和分析問題、解決問題的能力。
通過本課程設計,主要達到以下目的:
1.使學生增進對單片機的感性認識,加深對單片機理論方面的理解。2.使學生掌握單片機的內部功能模塊的應用,如定時器/計數器、中斷、片內外存貯器、I/O
口、串行口通訊等。
3.使學生了解和掌握單片機應用系統的軟/硬件設計過程、方法及實現,為以后設計和實現單片機應用系統打下良好基礎。
二、課程設計的要求
1.學生需認真閱讀課程設計任務書,熟悉有關設計資料及參考資料,熟悉各種設計規范的有關內容,認真完成任務書規定的設計內容。
2.課程設計的成果為“課程設計報告”。課程設計報告內容要正確,概念要清楚,完成任務書所規定的內容,附有原理圖及程序流程圖,程序清單,文字要通順,書寫要工整,設計圖紙必須符合規范。
3.課程設計報告應在2000字以上(含相關圖紙和計劃書等),用A4紙打印。
三、流程圖 主程序流程圖
原理圖說明:該設計選用一塊AT89C52型單片機,使用其P0口,P3口的部 分。P0口作為發光二極管的控制信號輸出端,P3.0作為按鈕K1的信號輸入口,P3.2為按鈕K2外部中斷0信息輸入口,P3.3作為K3外部中斷0的信息輸入口。單片機晶振頻率為12MHz,每個機器周期1μs。電源使用5v直流電。
五、程序語言:
ORG 0000H :程序入口地址 AJMP MAIN ORG 0003H :外部中斷0入口地址 AJMP ZD0 ORG 0013H :外部中斷1入口地址 AJMP ZD1
ORG 0100H :主程序入口地址
MAIN: MOV SP,#40H :初始化,開外部中斷1,外部中斷0,以及總中斷,并
且將外部中斷1設為最高優先級,并且是脈沖觸發方式。
MOV IE,#85H
MOV IP,#04H MOV TCON,#01H YYY: MOV A,#7FH :將A寄存器中存入7FH.SETB P3.4 JB P3.4,PPP :判斷按鍵K1是否按下,如果沒有按下則跳轉到PPP,燈從
左到右依次點亮。CLR Cy :進位位清零 MOV A,#0FFH :A中存入FFH.MMM: RLC A :A中數據帶進位位左移一位。
MOV P2,A :將A中數據送到P0口,燈亮且延遲1秒。ACALL DELAY SETB P3.4 JB P3.4,PPP :判斷K1是否按下,若按下則跳轉到MMM,沒有則跳轉
到PPP,燈依次從左向右亮,且沒亮一次,延遲1秒
SJMP MMM PPP: MOV P2,A A中數據轉到P0口,點亮燈。
RR A :A中數據右移一位 ACALL DELAY :調用一秒延遲
SETB P3.4 JNB P3.4,YYY :判斷K1按鍵是否按下,按下則跳轉到YYY,沒有則跳
轉到PPP SJMP PPP ZD0: MOV A,#0FFH :外部中斷0,將FFH送入A寄存器中,再送到P0口,燈全滅,且延遲4秒鐘,后再循環亮。
MOV P2,A ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY
AJMP MAIN
RETI :中斷程序返回
ZD1: MOV A,#0FFH :A寄存器中存入FFH,再送到P0口,燈滅,MOV P0,A AJMP $ :本地一直循環 RETI :中斷返回
DELAY: MOV R5,#25 :延遲4秒子程序 D1: MOV R6,#200 D2: MOV R7,#100 DJNZ R7,$ DJNZ R6,D2 DJNZ
R5,D1
RET :子程序返回 END :程序結束
調試說明:打開c51軟件,新建工程gao,新建文件,輸入以上程序,以.asm 格式保存。在gao工程中添加輸入好的程序。點擊編譯,對有錯誤地方修改。選擇生成HEX文件,再編譯,此時已經生成HEX文件。打開AVR燒錄軟件,將生成好的HEX文件下載到單片機機中,觀察單片機的對應發光二極管的狀態,看是否與設計預想一致。若不一致,在C51里修改相應地方,再重新編譯下載,直至與預想一致。
六、總結
單片機課程設計是一個很好的實踐環節,它將我們所學的課堂知識與實踐生活結合,使我們所學知識得到加固。以前的課程都是理論知識的學習,感覺有些抽象,學習起來也比較乏味,沒有主觀的學習熱情。這次課程設計的主要收獲就是在運用知識的過程中讓我對單片機產生了濃厚的興趣,課后自己還親手制作單片機,從而對單片機的結構更加了解,將硬件與軟件知識完美的結合。從而增加了我對知識的渴望,這也許就是主觀的學習積極性。
老師的指導也是是很重要的,眾所周知,實踐中,經驗占據重要地位。老師的經驗和知識都要多于我們。通過老師的指導,使我們的試驗過程更加輕松,受益匪淺。總之,這次課設不僅使我了解了單片機的開發流程,更加地理解運用了知識,而且更重要的是收獲了知識以外的學問,這才是我受用一生的。
七、參考資料:
牛昱光主編《單片機原理與接口技術》電子工業出版社 51單片機實驗指導書 胡漢才主編《單片機原理及其應用》清華大學出版社出版 何立民主編《單片機應用文集》北京航空航天大學出版社出版 天津銳志單片機學習資料
第二篇:單片機課程設計
設計題目: 單片機課程設計
學生姓名:
學
院: 電氣與信息工程學院
班
級: 電子111班 指導教師:
日 期: 2014年9月20日
一、課程設計目的:
了解電子元器件的功能與原理,掌握單片機的結構和原理,學會使用單片機應用開發技術的相關軟件如 keill、STC_ISP_V394等,能夠使用c語言的語言編程簡單的功能。
二、設計的思想:
利用所提供的單片機和開發板的原理圖用keill軟件編程程序以實現一些功能。然后用STC_ISP_V394.exe軟件將編譯完全正確的程序生成的hxe文件下載到開發板上,再調試編譯的程序能否實現其所設計的功能。
1、對蜂鳴器的了解:
蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,它由振蕩器、電磁線圈、磁鐵、振動膜片及外殼組成,接通電源后,振蕩器產生的音頻信號由電流通過電磁線圈,使電磁線圈產生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性的振動發聲。
2、設計:
我們所使用的開發板實物圖如圖一,單片機對右上角蜂鳴器的控制是加入三極管接入vcc,單片機的第22引腳和負極上,以此來控制蜂鳴器工作。單片機我們選擇STC89C52RC+1602液晶來實現對蜂鳴器的控制及顯示所需要的信息。
圖一 調試說明:
首先用Keil軟件創建一個工程,將程序源代碼輸入并編譯生成單片可執行的.hex文件。其次,打開單片機實踐板的電源,接好串口線,用STC-ISP燒錄軟件,將.hex文件燒錄入單片機中。程序下載完畢后,單片機會自動執行程序功能。最后,觀察程序功能的執行情況,看是否達到了設計要求。
如果單片機實踐板硬件電路的執行結果與設計結果一致,則說明設計過程及流程沒有問題,完全符合設計要求。否則,先檢查單片機實踐板的硬件電路是否完好,是否有斷點、漏焊、虛焊以及元器件是否完好等情況,排除故障重新連接后重新進行調試。如果仍然無法正
常實現,則說明程序編寫有誤,需要認真檢查程序流程,然后經過反復的修改與調試排除故障,實現設計要求的各項功能。編譯和燒寫該程序到單片機:
(1)用Keil編譯上面的代碼,并設置產生16進制代碼文件*.hex.(2)用專用下載線,連接好實驗板和電腦串口(DB9)(2)運行hex文件燒寫軟件STC_ISP_V394.exe
選單片機的型號,并打開編譯產生好的hex文件
點擊下載,給開發板上電。
3、實現的功能:使用單片機將歌曲《八月桂花》的調子通過蜂鳴器播放出來,用1602液晶將想要表達的信息有步驟地顯示在液晶顯示屏上,并且調子與顯示內容可以任意通過修改的程序燒錄到單片機內,實現設計產品的使用性與靈活性。
三、實驗程序:
/************************************************************************
[主題] C51音樂程序《八月桂花》
[功能]
通過單片機演奏音樂,顯示一些內容
/**********************************************************************/
#include
#include
//本例采用89C52, 晶振為11.0592MHZ
//關于如何編制音樂代碼, 其實十分簡單,各位可以看以下代碼.//頻率常數即音樂術語中的音調,而節拍常數即音樂術語中的多少拍;
//所以拿出譜子, 試探編吧!
unsigned char i=0;sbit Beep = P2^7;
unsigned char p,m;
//m為頻率常數變量
unsigned char n=0;//n為節拍常數變量
unsigned char code music_tab[] ={
0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數, 節拍常數, 頻率常數, 節拍常數,0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00
};
void int0()interrupt 1
//采用中斷0 控制節拍
{ TH0=0xd8;
TL0=0xef;
n--;
}
void delay(unsigned char m)
//控制頻率延時
{
unsigned i=3*m;
while(--i);
}
void delayms(unsigned char a)//豪秒延時子程序
{
while(--a);
//采用while(--a)不要采用while(a--);各位可編譯一下看看匯編結果就知道了!
}
typedef unsigned char BYTE;typedef bit BOOL;
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;sbit LCD_EP = P2^2;
BYTE code dis1[] = {“
WLCOME TO
”};BYTE code dis2[] = {“
DanPianJi ”};BYTE code dis3[] = {“
111iZnaiD
”};BYTE code dis4[] = {“
eiXeiX ”};
delays(int ms){
// 延時子程序 int i;while(ms--){
for(i = 0;i< 250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
} } }
BOOL lcd_bz(){
// 測試LCD忙碌狀態 BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result =(BOOL)(P0 & 0x80);LCD_EP = 0;return result;}
lcd_wcmd(BYTE cmd){
while(lcd_bz());LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;
}
lcd_pos(BYTE pos){
lcd_wcmd(pos | 0x80);
// 寫入指令數據到LCD //設定顯示位置
}
lcd_wdat(BYTE dat)
{
//寫入字符顯示數據到LCD while(lcd_bz());LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}
lcd_init(){
lcd_wcmd(0x38);
delays(1);lcd_wcmd(0x0c);
delays(1);lcd_wcmd(0x06);
delays(1);lcd_wcmd(0x01);
delays(1);}
void main()
{
BYTE j;
lcd_init();
delays(10);
//LCD初始化設定
//16*2顯示,5*7點陣,8位數據//顯示開,關光標 //移動光標 //清除LCD的顯示內容
// 初始化LCD
lcd_wcmd(0x06);
//向右移動光標
lcd_pos(0);
//設置顯示位置為第一行的第1個字符
j = 0;
while(dis1[ j ]!= ' 主站蜘蛛池模板: 国产无遮挡裸体免费直播| 亚洲欧美乱日韩乱国产| 人人狠狠综合久久亚洲婷婷| 国产精品一区二区亚瑟不卡| 成在人线av无码免观看午夜网| 国产av导航大全精品| 久久婷婷五月综合色精品| 人妻夜夜爽天天爽欧美色院| 精品国产一区二区三区av孞弋| 中文字幕在线精品乱码| 色播久久人人爽人人爽人人片av| 亚洲欧美综合精品成人网| 无码一区二区三区av在线播放| 欧美成人va免费大片视频| 国产精品99久久久久久宅男| 久久国产精品亚洲艾草网| 性高朝久久久久久久| 丰满少妇被粗大猛烈进人高清| 国产日韩精品一区二区三区在线| 亚洲成av人片在线观看无码不卡| 少妇被又大又粗又爽毛片久久黑人| 亚洲欧洲日产国码无码动漫| 高清粉嫩无套内谢国语播放| 2020无码专区人妻系列日韩| 亚洲女教师丝祙在线播放| 狠狠色婷婷久久综合频道日韩| 大肉大捧一进一出好爽mba| 美女内射视频www网站午夜| 国产精品成人3p一区二区三区| 亚洲а∨天堂久久精品9966| 青青草国产精品亚洲专区无码| 国产精品99久久不卡| 男人av无码天堂| 日韩人妻无码精品专区综合网| 中文亚洲成a人片在线观看| 精品一区二区三区av天堂| 国色精品卡一卡2卡3卡4卡在线| 久久久久爽爽爽爽一区老女人| 中国性欧美videofree精品| 日本sm/羞辱/调教/捆绑视频| 国产成人8x视频网站入口|