第一篇:湘潭大學單片機課程設計
單
片
機
課
程
設
計
設計題目:簡易頻率計數器姓名:學號:
班級:09級電子信息工程一班指導老師:粟建新
一、實驗目的1.要求學生具有制作調試單片機最小系統及外設的能力,能夠掌握單片機內部資源的使用。
2.熟練掌握焊接技術的基礎上,能熟練使用單片機軟件開發環境Keil C51編程調試,并使用STC ISP調試工具采用串口下載方式聯調制作的單片機最小系統。
二、實驗要求
自制一個單片機最小系統,包括串口下載、復位電路,采用外部計數器T0或T1作為外部頻率輸入,外部頻率由信號源提供,計算出來的頻率顯示在四位一體的數碼管上。
三、實驗器材
單片機'STC89C54RD+一個,晶振一個,電容3個,電阻3個,排阻一個(由于實驗室不提供排阻,實驗過程中用了10個10千歐姆的電阻代替),4位一體數碼顯示管一個,按鈕1個。
四、實驗原理圖
五、硬件連線
1.將P0口與4位一體數碼管的ABCDEFG和DP相連;
2.將P2口的2.0,2.1,2.2分別與數碼管的S1,S2,S3相連;
3.引出14做激勵輸入口。
六、程序設計內容
1.定時/計數器T0 和T1 的工作方式設置,由圖可知,T0 是工作在計數狀態下,對輸入的頻率信號進行計數,但對工作在計數狀態下的T0,最大計數值為fOSC/24,由于fOSC=12MHz,因此:T0 的最大計數頻率為250KHz。對于頻率的概念就是在一秒只數脈沖的個 數,即為頻率值。所以T1 工作在定時狀態下,每定時1秒鐘到,就停止T0 的計數,而從T0 的計數單元中讀取計數的數值,然后進行數據處理。送到數碼管顯示出來。
2.T1工作在定時狀態下,最大定時時間為65ms,達不到1秒的定時,所以采用定時50ms,共定時20 次,即可完成1 秒的定時功能。
七、C語言源程序
#include
#define uchar unsigned char//變量宏定義
#define uint unsigned int
unsigned char code table2[]={ //共陽極0~f數碼管編碼
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uintnumber1[4]={0,0,0,0};
uint count=0;//定義脈沖計數變量
sbit K1=P1^0;
sbit K2=P1^7;
void delay(uchar y)// 延時子程序
{
uchar x;
while(y--)for(x=110;x>0;x--);
}
display(x)// 顯示子程序
{uintc,g=0x01;
number1[0]=x/1000;
number1[1]=x%1000/100;
number1[2]=x%1000%100/10;
number1[3]=x%1000%100%10;
for(c=0;c<4;c++)
{
P2=g;//位選
P0=table2[number1[c]];//段選
delay(15);//簡短的延時
g=g<<1;//左移為了掃描位選
}}
void main()
{
IE=0x8a;
TMOD=0x51;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(1)
{
if(K1==0)
{
delay(10);
if(K1==0)
{count=0;
TR0=TR1=1;
}
}
}
}
void t0()interrupt
1{ uchar K;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;// 開總中斷和T0,T1// 設置中斷工作方式//當按鍵按下時啟動T0和T1//定時計數器T0子程序
if(++K==20)
{
TR1=TR0=K=0;
count=TH1*256+TL1;
display(count);
TH1=TL1=0;
}
}
//關兩個中斷//當到一秒后,計下T1收到的脈沖個數 //T1清零
八、實驗心得
通過這次課程設計,我熟悉了Keil C51編程與PROTUSE的使用,對單片機的使用有了更深刻的了解,在焊接與測試過程中也懂得了對任何的細節必須分外注意,不能粗心大意。實驗由兩部分組成,仿真和焊板子,仿真過程用運用了keil c51軟件和PROTUSE,這兩個軟件以前沒有用過,通過這次課程設計,我學習了這兩種軟件的基本上使用,是此次課程設計比較大的收獲。焊接過程中,由于從大一開始已經有好幾次的焊接經歷,我吸取以前的教訓,在這次的焊接過程中在排版,接線上都有了很大的改善,而且焊點基本上沒有虛焊,只不過焊接復位電路時沒認真看仿真圖,導致后面數碼管沒亮,但是我仔細檢查后發現了錯誤所在,通過檢查錯誤這一步,我對我自己做焊接試驗有了很大的信心,因為我知道了如何用萬用表檢查錯誤。總之,課程設計不僅讓我們溫習了單片機的設計思路與編程語言,而且鍛煉了我們實際動手能力,將理論與實踐相結合了。
第二篇:江蘇大學單片機課程設計
江蘇大學
單片機課程設計
姓名:
學號
班級:電氣
一、設計任務、原理、步驟
任務:○1從鍵盤上輸入正、反轉命令,轉速參數(16級)和轉動步數顯示在LED顯示器上。
顯示器上顯示:第一位為0表示正轉,為1表示反轉;第二位0~F為轉速等級,第三到第六位設定步數。
2單片機依顯示器上顯示的正、反轉命令,轉速級數和轉動步數進行相應動作,轉○動步數減為零時停止轉動。
原理:
如圖,當有一相繞組被通電激勵時,磁通從正相齒,經過軟鐵芯的轉子,并以最短路徑流向負相齒,為使磁通路徑最短,在磁場力的作用下,轉子被迫移動,使最近的一對齒與被激勵的一相對準。
那么,通過對它每相線圈中電流的順序切換可使電機作步進式旋轉。相數:產生不同對極N、S磁場的激磁線圈對數。
拍數:指電機轉過一個齒距角所需脈沖數,以四相電機為例,有四相四拍運行方式即AB-BC-CD-DA-AB或A-B-C-D-A,四相八拍運行方式即 A-AB-B-BC-C-CD-D-DA-A.步距角:對應一個脈沖信號電機轉子轉過的角位移.步距角=360/(轉
子齒數*拍數)系統中使用20BY-0型號步進電機,它使用+5V直流電源,步距角為18度,電機線圈由A、B、C、D四相組成。
步進電機驅動原理是通過對它每相線圈中的電流的順序切換來使電機作步進式旋轉,驅動電路由脈沖信號來控制,所以調節脈沖信號的頻率便可改變步進電機的轉速。
BA、BB、BC、BD即為脈沖信號輸入插孔,驅動器輸出A、B、C、D接步進電機。
步驟:先設計鍵盤顯示程序,根據書本的鍵盤掃描程序與數碼管顯示程序,把二者整合到
一起,成功后,再做驅動電機程序,在鍵盤顯示程序的基礎上,進行擴張,實現電
機的正反轉與調速控制。
二、硬件原理接線圖 鍵盤顯示原理圖
連線圖
? 步進電機模塊插頭接實驗系統J3插座,(順接)? 把P1.0~P1.3分別接到BA~BD插孔。
4.7kX474LS04P1.0P1.18032P1.2J***4523535ABVCCBABBBCBD1359CDP1.34
三、流程圖
按鍵流程圖
數碼管顯示流程圖
電機控制程序流程圖
四、程序清單
ORG 0000H
AJMP MAIN
ORG 0050H MAIN: MOV SP, #40H
MOV 79H, #00H
MOV 7AH, #00H
MOV 7BH, #00H
MOV 7CH, #00H
MOV 7DH, #00H
MOV 7EH, #00H
MOV R1, #7EH MAIN1: ACALL KEY1
MOV @R1, A
CJNE R1, #78H, KS
CJNE A, #16H, AGAIN
LJMP RUN AGAIN: LJMP MAIN
KS: DEC
R1
LJMP MAIN1
RUN: MOV A,7EH
JZ
ZHEN
JNZ
FAN
SJMP $
ZHEN: MOV
P1, #03H
ACALL DELAY
MOV
P1, #06H
ACALL DELAY
MOV
P1, #0CH
ACALL DELAY
MOV
P1, #09H
ACALL DELAY
ANL
79H, #0FH
ANL
7AH, #0FH
ANL
7BH, #0FH
ANL
7CH, #0FH
LCALL DIR
LCALL DIR
MOV
R5, 79H
CJNE R5, #0,Z1
DEC
79H
MOV R5,7AH
CJNE R5, #0,Z2
DEC
7AH
MOV
R5, 7BH
CJNE R5, #0,Z3
DEC
7BH
MOV
R5, 7CH
CJNE R5, #0,Z4
LJMP MAIN Z1:
DEC
79H
LJMP ZHEN Z2:
DEC
7AH
LJMP ZHEN Z3:
DEC
7BH
LJMP ZHEN Z4:
DEC
7CH
LJMP ZHEN FAN: MOV
P1, #09H
ACALL DELAY
MOV
P1, #0CH
ACALL DELAY
MOV
P1, #06H
ACALL DELAY
MOV
P1, #03H
ACALL DELAY
ANL 79H, #0FH
ANL 7AH, #0FH
ANL 7BH, #0FH
ANL 7CH, #0FH
LCALL DIR
LCALL DIR
MOV R5, 79H
CJNE R5, #0,F1
DEC 79H
MOV R5, 7AH
CJNE R5, #0,F2
DEC 7AH
MOV R5, 7BH
CJNE R5, #0,F3
DEC 7BH
MOV R5, 7CH
CJNE R5, #0,F4
LJMP MAIN F1:
DEC 79H
LJMP FAN F2:
DEC 7AH
LJMP FAN F3:
DEC 7BH
LJMP FAN F4:
DEC 7CH
LJMP FAN
DELAY: MOV R1, 7DH DELAY10: ACALL DIR DELAY13:DJNZ R1, DELAY10
RET DIR: MOV R0,#79H
MOV R3,#01H LD0: MOV DPTR,#SEG
MOV A,@R0
MOVC A,@A+DPTR
CPL
A
MOV
DPTR,#0FFDCH
MOVX @DPTR,A
MOV A,R3
MOV DPTR,#0FFDDH
MOVX @DPTR,A
ACALL DL1
INC
R0
MOV
A,R3
JB
ACC.5,LD1
RL
A
MOV
R3,A
AJMP LD0 LD1: RET SEG: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH
DB 7DH, 07H, 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H, 00H, 73H DL1: MOV
R7,#02H DL: MOV
R6,#0FFH DLA: DJNZ R6,DLA
DJNZ R7,DL
RET KEY1:ACALL KS1
JNZ
LK1
ACALL DIR
AJMP
KEY1 LK1: ACALL DIR
ACALL T12ms
ACALL KS1
JNZ
LK2
AJMP
KEY1 LK2: MOV
R2, #0FEH
MOV
R4, #00H LK4: MOV
DPTR, #0FFDDH
MOV
A, R2
MOVX
@DPTR, A
INC
DPTR
MOVX
A, @DPTR
JB
ACC.0, LONE
MOV
A, #00H
AJMP
LKP LONE:JB
ACC.1, LTOW
MOV
A, #08H
AJMP
LKP LTOW:JB
ACC.2, LTHR
MOV
A, #10H
AJMP
LKP LTHR:JB
ACC.3, NEXT
MOV
A, #18H LKP: ADD
A, R4
MOV
DPTR, #TAB
MOVC
A, @A+DPTR
PUSH
ACC LK3: ACALL DIR
ACALL KS1
JNZ
LK3
POP
ACC
RET NEXT:INC
R4
MOV
A,R2
JNB
ACC.7,KND
RL
A
MOV
R2,A
AJMP
LK4 KND: AJMP
KEY1 KS1: MOV
DPTR,#0FFDDH
MOV
A,#00H
MOVX
@DPTR,A
INC
DPTR
MOVX
A,@DPTR
CPL
A
ANL
A,#0FH
RET T12ms:MOV R7,#18H TM: MOV
R6,#0FFH TM6: DJNZ
R6,TM6
DJNZ
R7,TM
RET TAB: DB 07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H,02H,0FH,03H,0EH
DB 0CH,0DH,00H,00H,00H,00H,00H,00H,16H
END
五、設計心得體會
為期一周的單片機課程設計,我有很多心得體會,有關于單片機方面的,更多的是人與人之間的。
此次單片機課程設計意義非凡。一開始,我們組出現了很多問題,例如,如何把鍵盤與顯示程序整合到一起,但是在老師的悉心指導和同學的幫助下,各種問題都被解決了。此次課程設計不僅增強了同學們的動手實踐能力,而且更加豐富了同學們的理論知識,熟悉了匯編語言的編程方法。除此之外,我還學到了如何與人合作,與人交流。
總而言之,單片機課程設計對于我們有很大的幫助,我們從中受益匪淺
第三篇:單片機課程設計
單片機課程設計
課題: 簡易電子琴設計
學
院:
電氣與信息工程學院 專
業:
電子信息工程 姓
名:
李琳琳 學
號:
093411106
指導老師:
田巍
河南城建學院
2014年
01 月
01 日
第四篇:單片機課程設計
課 程 設 計
設計題目: 基于單片機的8*8點陣顯示數字設計
學生姓名: 指導教師: 二級學院: 專
業: 班
級: 學
號:
目 錄
摘要??????????????????????????Ⅱ 1 方案選擇及總體設計???????????????????1 1.1方案確定?????????????????????1 1.1.1功能要求????????????????????1 1.1.2方案確定????????????????????1 1.2器件選擇?????????????????????1 2 控制系統設計??????????????????????2 2.1 控制系統硬件設計?????????????????2 2.1.1整體模塊設計??????????????????2 2.1.2單片機AT89C51?????????????????2 2.1.3單片機最小系統設計???????????????5 2.1.3.1晶振電路設計?????????????????5 2.1.3.2復位電路設計?????????????????5 2.1.4驅動電路設計??????????????????6 2.1.5LED點陣顯示設計????????????????9 2.2控制系統軟件設計?????????????????11 2.2.1軟件設計思想??????????????????11 2.2.2主程序流程圖??????????????????11 2.2.3子程序流程圖??????????????????13 3 系統仿真及調試????????????????????14 3.1系統調試?????????????????????14 3.2系統仿真?????????????????????14 3.2.1protrus軟件仿真????????????????14 3.2.2程序??????????????????????14 總結?????????????????????????^?17 參考文獻????????????????????????18
I
摘 要
現在市場上各類基于LED的顯示屏較多,但大部分產品為單一模式的LED顯示屏,其在顯示內容的更換及顯示屏的重組等方面都存在不便之處。但隨著信息化社會的迅速發展,LED顯示屏正在向顯示內容豐富、信息更改方便等方面發展。因此制作一款多功能的LED廣告顯示屏是非常有意義地。
LED驅動顯示采用動態掃描方法,動態掃描方式是逐行輪流點亮,這樣掃描驅動電路就可以實現多行的同名列共用一套列驅動器。以8×8點陣為例,把所有同一行的發光管的陽極連在一起,把所有同一列的發光管的陰極連在一起(共陽的接法),先送出對應第1行發光管亮滅的數據并鎖存,然后選通第1行使其燃亮一定的時間,然后熄滅;再送出第2行的數據并鎖存,然后選通第2行使其燃亮相同的時間,然后熄滅;第8行之后,又重新燃亮第1行,反復輪回。當這樣輪回的速度足夠快(每秒24次以上),由于人眼的視覺暫留現象,就能看到顯示屏上穩定的圖形。該方法能驅動較多的LED,控制方式較靈活,而且節省單片機的資源。
本次課程設計的題目為8×8點陣數字顯示,設計的任務為使用單片機控制8×8的點陣顯示0到9的數字,不僅顯示清晰,并且每經過一定時間,顯示的數字加一,從0 到 9 循環。以AT89C51單片機為核心,采用串行傳輸、動態掃描技術,制作一款模塊化LED多功能顯示屏。
在資料收集方面,主要是參考了《51單片機原理及應用—基于Keil C與Proteus》一書,結合了一些網絡資料,以及一些集成塊的使用說明書。
在整個工作過程中,根據收集來的資料繪制出大概的原理圖,然后通過Proteus仿真,與此同時運用Keil 編程,用Keil 與Proteus進行聯調,調試成功后確定了原理圖和控制程序。
II
第一章 方案選擇及總體設計
1.1 方案確定
1.1.1 功能要求
1、采用STC-51單片機作為微處理器。
2、設計一個8×8點陣LED數碼字符顯示器。
3、在目測條件下LED顯示屏各點亮度均勻、充足、穩定、清晰無串擾。
4、動態顯示“0——9”幾個字符。
1.1.2 方案確定
采用ST89C51單片機作為微處理器,將共陽極二極管用共陰型接法連接成8×8點陣LED數碼字符陣列,通過程序控制,采用動態顯示,建立字符庫“0——9”。
1.2 器件選擇
微處理器采用ST89C51系列單片機,ST89C51單片機是這幾年在我國非常流行的單片機,是一種帶4K字節閃爍可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)高性能單片機,可擦除只讀存儲器可以反復擦除100次,具有低功耗、高性能的特點。
AT89C51是一種帶4K字節閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。
第二章 控制系統設計
2.1控制系統硬件設計
2.1.1整體模塊設計
本設計行、列驅動電路,顯示器電路,運用單片機的智能化,系統的將每個功能電路模塊連接在一起,總體結構設計如圖2-1所示。
點陣顯示器行驅動電路PC上位機單片機8×8點陣LED顯示器電路點陣顯示器列驅動電路
圖2-1 硬件系統框圖
此次需要實現的功能是利用一個ST89C51,一個8×8LED點陣,動態顯示“0——9”10個字,采用PC上位機驅動顯示電路。
2.1.2 單片機AT89C51 AT89C51是美國ATMEL公司生產的低電壓,高性能CMOS8位單片機,片內含4k bytes的可反復擦寫的只讀程序存儲器(PEROM)和128 bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產, 兼容標準MCS-51指令系統,片內置通用8位中央處理器(CPU)和Flash存儲單元,功能強大AT89C51單片機能提供許多高性價比的應用場合,可靈活應用于各種控制領域。
AT89C51單片機引腳圖如圖2-2所示。
圖2-2 AT89C51引腳圖
AT89C51管腳說明: VCC:供電電壓。GND:接地。
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1 口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行
存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3口也可作為AT89C51的一些特殊功能口,如下所示: P3口管腳
備選功能: P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(記時器0外部輸入)P3.5 T1(記時器1外部輸入)P3.6 /WR(外部數據存儲器寫選通)P3.7 /RD(外部數據存儲器讀選通)
P3口同時為閃爍編程和編程校驗接收一些控制信號。
RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。
ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。
/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。XTAL2:
來自反向振蕩器的輸出。
2.1.3 單片機最小系統設計
單片機的最小系統是能夠讓單片機工作的最小硬件電路。除了單片機外,最小系統還包括復位電路和時鐘電路。
復位電路:單片機的復位電路接在復位信號RST上,復位電路用于將單片機內部電路的狀態恢復到初始值。需要復位時按下按鈕即可。
時鐘電路:時鐘電路為單片機工作提供基本時鐘。時鐘電路中包含一個晶體振蕩器,簡稱晶振,頻率范圍是1.2~12MHz。晶體振蕩頻率越高,系統的時鐘頻率也越高,單片機的運行速度也就越快
ST89C51單片機最小系統電路由復位電路、晶振電路兩部分組成。2.1.3.1 晶振電路設計
ST89C52單片機芯片內部設有一個由反向放大器構成的振蕩器,XTAL1和XTAL2分別為振蕩電路的的輸入端和輸出端,時鐘可有內部或外部生成,在XTAL1和XTAL2引腳上外接定時元件,內部振蕩電路就會產生自激振蕩。系統采用的定時元件為石英晶體和電容組成的并聯諧振回路。晶振頻率采用12MHZ,C1、C2的電容值取30pF,電容的大小起頻率微調的作用。晶振電路圖如圖2-3所示。
C1XTAL130pFC2XTAL230pF圖2-3 晶振電路圖
X112MHZ
2.1.3.2 復位電路設計
ST89C51單片機在啟動運行時或者出現死機時需要復位,使CPU以及其他功能部件處于一個確定的初始狀態,并從這個狀態開始工作。單片機有多種復位方式,常用的復位操作有上電復位和手動復位方式。本設計采用最簡單的上電復位方式,電路如圖2-4所示。上電復位是通過外部復位電路的電容充電來實現的,復位電路產生的復位信號(高電平有效)由RST引腳送入到內部的復位電路,對ST89C51單片機進行復位,復位信號要持續兩個機器周期(24個時鐘周期)以上,才能使ST89C51單片機可靠復位。當上電時,C1相當于短路,有時碰到干擾時會造成錯誤復位,可在復位端加個去耦電容,可以取得很好的效果。
ST89C51單片機復位電路如下圖所示:
VCCAT89C51VCCC510MF/25VRSTR94.7KVSSR24.7KVSSRSTR1C10MF/25VS5 RSTVCCAT89C51VCC
圖2-4 上電復位電路圖
圖2-5 按鍵電平復位電路圖
復位電路工作原理:
上電瞬間RST引腳的電位與VCC等電位,RST引腳為高電平,隨著電容C5充電電流的減少,RST引腳的電位不斷下降,可以保持RST引腳在為高電平的時間內完成復位操作。
當單片機已在運行當中時,按下復位鍵S5后再松開,也能使RST引腳為一段時間的高電平,從而實現ST89C51單片機復位。
2.1.4 驅動電路設計
驅動電路圖如圖2-6所示。
圖2-6 驅動電路圖
74LS245引腳圖如圖2-7所示。
圖2-7 74LS245引腳圖
引出端符號: A A總線端
B B總線端
/G 三態允許端(低電平有效)DIR 方向控制端
74LS245是用來驅動LED或者其他的設備,它是8路同相三態雙向總線收發器,可雙向傳輸數據。74LS245還具有雙向三態功能,既可以輸出,也可以輸入數據。
如果用89C51的P0口輸出到數碼管,那就要考慮到數碼管的亮度以及P0口帶負載的能力,當89C51單片機的P0口總線負載達到或超過P0最大負載能力時,必須接入74LS245等總線驅動器。選用74LS245提高驅動能力。P0口的輸出經過74LS245提高驅動后,輸出到數碼管顯示電路。
工作原理:
當片選端/CE低電平有效時,DIR=“0”,信號由B向A傳輸;(接收)DIR=“1”,信號由A向B傳輸;(發送)當CE為高電平時,A、B均為高阻態。
正向點亮一顆LED,至少也要10~20mA,若電流不夠大,則LED不夠大。而不管是ST89C51的I/O口,還是TTL、CMOS的輸出端,其高態輸出電流都不是很高,不過1~2mA而已。因此很難直接高態驅動LED,這時候就需要額外的驅動電路,通常有共陽型與共陰型LED陣列驅動電路,本設計才用共陰型高態掃描信號驅動電路。
共陰型LED陣列驅動電路采用高態掃描,也就是任何時間只有一個高態信號,其它則為低態。一行掃描完成后,再把高態信號轉化到近鄰的其他行,掃描信號接用一個反向驅動器,ST89C51本身內置一個反向驅動器,本設計將ST89C51作為點矩陣顯示控制系統的控制核心,通過點矩陣實時顯示并移動字符。
單片機的串口與行驅動器相連,用來發送顯示數據信息。P3口與LED陣列的行引腳相連,送出數據、地址以及系統控制信號。輸出低態時,最大可吸取0.5A,即500mA,若每個LED取30mA,7個LED同時點亮,需要210mA,完全滿足LED點亮的基本條件。
所要顯示的信號送入74LS245芯片,然后連接到LED陣列的列陣腳。對于高態的顯示信號,將可提供其所連接LED的驅動電流,而這個驅動電流經過LED到輸出端,形成正向回路,即可點亮該LED。其中每個晶體管任何時間只需負
責驅動一個LED,所以選擇30mA射極電流的晶體管。驅動電路如圖2-6所示。
2.1.5 LED點陣顯示設計
本設計采用ATMEL公司的AT89C51作矩陣顯示控制系統控制核心,12MHZ晶振,8?8點陣共陽LED顯示器。其中,P0口作為字符數據輸出口,P3口為字符顯示掃描輸出口,第31腳(EA)接電源,改變電阻(270×8)的大小可改變顯示字符的亮度,驅動用74LS245芯片。
本設計LED矩陣顯示器電路選用8×8點陣模塊,系統由單片機控制。LED顯示屏是將發光二極管按行按列布置的,在掃描驅動方式下可以按行掃描按列控制,也可以按列掃描按行控制。本文就是使用1塊8×8點陣,采用按列掃描按行控制控制方式,掃描順序自左向右,以滿足數字顯示的要求。8×8點陣LED結構如圖2-8所示。
8×8點陣LEDabcdefgh12345678
圖2-8 LED數碼顯示管
8×8 點陣LED的工作原理:LED點陣的顯示方式是按顯示編碼的順序,一行一行地顯示。對于共陽型的點陣來說,當某一點所在的行對應高電平“1”并且其所在的列對應低電平“0”的時候,這一點就會被點亮。將每一行的顯示時間進行一定的延時,由于人的視覺暫留現象,就會感覺到8行LED是在同時顯示的。若顯示的時間太短,則亮度不夠,若顯示的時間太長,將會感覺到閃爍。圖2-9為8×8點陣LED外觀及引腳圖,其等效電路如圖2-10所示,只要其對應的X、Y軸順向偏壓,即可使LED發亮。例如如果想使左上角LED點亮,則Y0=1,X0=0即可。應用時限流電阻可以放在X軸或Y軸。一個8×8點陣是由64個發光二極管按規律組成的,如圖2-10所示。圖中,行接高電平,列接低電平,發光二極管導通發光。
圖2-9 8×8點陣LED外觀及引腳圖
圖2-10 8×8點陣LED等效電路
8×8點陣數字顯示的編碼原理: 8×8點陣數字顯示主要應用行掃描動態顯示的方法實現,如圖2-11所示,將行線依次置零,一次對列線編碼,有紅色填充部分為1,無填充部分為0。
圖2-11 8×8點陣數字顯示的編碼原理
如此可得到“0”的編碼為{0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00},同理可得到:
{0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00}
//1 {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}
//2 {0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00}
//3 {0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00}
//4 {0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00}
//5 {0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00}
//6 {0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00}
//7 {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}
//8 {0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00}
//9 2.2控制系統軟件設計
2.2.1 軟件設計思想
主程序先進行設置中斷,并啟動,再進行鍵盤掃描載入“0——9”字型,然后判斷一組字型是否掃描完,按不同情況進行循環調用子程序。進入子程序后,首先設置相應的程序,反復調用顯示子程序,并在顯示過程中反復調用鍵盤掃描子程序進行延時,判斷是否退出相應的方式顯示子程序。設計過程中,能很好得提高按鍵響應速度。
2.2.2 主程序流程圖
主程序首先設置并啟動T0中斷,然后調用初始化程序,為后面程序要用到的數據調入,并清零一些用到的數據單元,然后載入“0——9”字型,進行掃描。圖2-12為主程序流程圖。
圖2-12 主程序流程圖
2.2.3 子程序流程圖(定時中斷服務程序)
圖11 子程序流程圖(定時中斷服務程序)
第三章 系統仿真及調試
3.1系統調試
根據硬件電路圖核對了元器件的型號、極性,安裝是否正確,檢查硬件電路連線是否與電路原理圖一致,檢查電路元器件是否都已經連接好。
通電后,用示波器檢測單片機的復位和晶振電路是否有復位信號和振蕩信號。
3.2 系統仿真
3.2.1 proteus軟件仿真
使用proteus原理及仿真如圖3-1所示。
如圖3-1 proteus原理及仿真圖
3.2.2 程序
#include
{ 0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, 0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,//0 //1 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,//2 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,//3 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,//4 0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, 0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, 0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00
};uchar i=0,t=0,Num_Index;//主程序 void main(){ P3=0x80;
Num_Index=0;
//從0開始顯示
TMOD=0x00;
//T0方式0 TH0=(8192-2000)/32;//2ms定時
TL0=(8192-2000)%32;IE=0x82;
//允許T0中斷
TR0=1;
//啟動T0 while(1);}
//T0中斷函數
void LED_Screen_Display()interrupt 1 { TH0=(8192-2000)/32;
//恢復初值
TL0=(8192-2000)%32;P0=0xff;
//輸出位碼和段碼
P0=~Table_of_Digits[Num_Index*8+i];P3=_crol_(P3,1);
//P3循環向左一位 //5 //6 //7
//8 //9
}
if(++i==8)i=0;if(++t==250){
} t=0;
//每屏一個數字由8個字節構成 //每個數字刷新顯示一段時間
if(++Num_Index==10)Num_Index=0;//顯示下一個數字
總結
經過單片機的課程設計,我有了很大的收獲。
首先,就是讓我加深了對單片機的掌握和理解與應用,知道單片機到底是怎樣控制點陣,怎樣應用在生活中的。并且讓我懂得了要善于思考,追求嚴謹,認真解決問題,才會有更多的收獲。
然后,提高了通過查閱資料解決問題的能力。通過查閱大量的相關資料,詳細了解了LED的發光原理和LED顯示屏的原理,了解了LED的現狀,清楚地了解了LED顯示屏與其它顯示屏相比較有那些優點,明確了研究目標。并且通過對單片機資料的查閱和應用,更進一步增加了對單片機知識的理解和運用能力。并證實了自己的思路:“查資料→思考總結→運用→找出差錯,再查資料和向別人詢問→再次運用”的正確性。
最后,本系統能夠完成設計任務,能夠顯示數字0-9,并且顯示也較為穩定清晰。本系統具有硬件少,結構簡單,容易實現,性能穩定可靠,成本低等特點。在本次課程設計中,主要使用了Proteus和Keil等軟件進行硬件電路和控制程序的設計,加深了對這些軟件的了解。感到Proteus對電子專業的同學來說是一個很有用的軟件。總體來說這次的課程設計很成功,達到了預想的目的:學到了知識,提高了能力,完成了任務。
參考文獻
[1] 張靖武,周靈彬 《單片機系統的PROTEUS設計與仿真》北京 電子工業出版社 [2] 吳金戌,沈慶陽,郭庭吉 《8051單片機實踐與應用》北京 清華大學出版社 [3] 李群芳,肖看 《單片機原理、接口及應用》北京 清華大學出版社
[4] 張毅剛,彭喜元等 《新編MCS-51單片機應用設計 》黑龍江 哈爾濱工業大學出版社 [5] 李朝青,劉艷玲編著 《單片機原理及接口技術》北京 航空航天大學出版社
第五篇:單片機課程設計
基于單片機的火災智能報警控制系統的設計
前言
在各種災害中,火災是最經常、最普通地威脅公眾安全和社會發展的災害之一。人類能夠對火進行利用和控制,是文明進步的一個重要標志。火,給人類帶文明進步、光明和溫暖。但是,失去控制的火,就給人類造成災害。據統計,我國 70 年代火災年平均損失不到 2.5 億元,80 年代火災年平均損失不到
3.2 億元。進入 90 年代,特別是 1993 年以來,火災造成的直接財產損失上升到年均十幾億元,年均死亡 2000 多人。2010年上海靜安區高層住宅著火,導致58人死亡,70余人受傷。2014年1月云南香格里拉大火,燒毀房屋100多棟,直接經濟損失1億多元人民幣。火災事件經常發生,防止火災事故關系到人民群眾的生命財產安全和社會和諧穩定。現在各種電子產品的普及,再加上人們防火意識的不強,這些都給火災的發生帶來了巨大的安全隱患。
對于火災最關鍵的問題在于預防,目前防火報警系統趨于智能化、自動化,靈敏程度也越來越高。在這種背景下,基于單片機的火災智能報警控制系統能突顯出其巨大的優越性。目前,國內大多數偏重于商場、賓館、高級寫字樓、大型倉庫等大型火災報警系統的研發和設計。本系統側重于小型火災智能報警系統的設計,可在火災發生初期檢測到并且報警,還能夠實時顯示溫度和煙霧濃度。