第一篇:單片機課程設計
設計題目: 單片機課程設計
學生姓名:
學
院: 電氣與信息工程學院
班
級: 電子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 ]!= ' 主站蜘蛛池模板: 一本到在线观看视频| 欧洲丰满少妇做爰视频爽爽| 两个人看的www视频免费完整版| 亚洲人成无码区在线观看| 国产精品久久久久成人| 中文字幕乱码亚洲∧v日本| 波多野结衣网站| 久久精品国产亚洲精品2020| 亚洲无码国产精品| 白嫩少妇激情无码| 国产色无码精品视频免费| 亚洲一区av无码少妇电影| 麻豆国产av穿旗袍强迫女佣人| 国产女人18毛片水真多1| 久久99精品免费一区二区| 国产精品天干天干| 久草热久草热线频97精品| 人妻无码视频一区二区三区| 欧美成人aaa片一区国产精品| 国产精品成人无码a片在线看| 亚洲精品久久久无码av片软件| 看av免费毛片手机播放| 醉酒后少妇被疯狂内射视频| 性人久久久久| av在线网站无码不卡的| 自拍偷自拍亚洲精品播放| 久久亚洲中文字幕精品有坂深雪| 丝袜 亚洲 另类 欧美 变态| 亚洲成av不卡无码无码不卡| 亚洲精品不卡无码福利在线观看| 天天躁日日躁狠狠躁av麻豆男男| 狠狠热精品免费视频| 亚洲日韩性欧美中文字幕| 日本乱人伦aⅴ精品潮喷| 国产激情久久久久久熟女老人| 国内精品久久久久影院薰衣草| 国产又色又爽又黄刺激视频| 无码国产色欲xxxxx视频| 99精品产国品一二三产区| 欧美日韩国产成人高清视频| 国产成人av一区二区三区|