目錄
一、實驗題目
二、實驗要求
三、實驗過程及結(jié)果分析
四、實驗流程圖
五、實驗源代碼
一、實驗題目
4.5 8255并行I/O擴展及交通信號燈控制實驗
二、實驗要求
1、畫出實驗的流程圖
2、編寫源程序并進行注釋
3、記錄實驗過程
4、記錄程序運行結(jié)果截圖
三、實驗過程及結(jié)果分析
本實驗利用 8255 實現(xiàn)可編程的并行 IO 擴展功能,并利用其完成交通燈控制。實驗要求紅燈常亮 30S,綠燈常亮 25S 后閃爍 5S。使用靜態(tài)數(shù)碼管顯示綠燈常亮倒計時。實驗原理圖1如下:
圖1:實驗原理圖
1. 關(guān)掉實驗箱電源。將MCU 板,PIO 版,KEY&LED 板插接在母板上。按照前面連接關(guān)系表將硬件連接好。
2. 在仿真器斷電情況下將仿真器的仿真頭插在 MCU 板的CPU 插座上。將仿真器與開發(fā)PC 機的通信口連接好,打開實驗箱及仿真器的電源。
3. 運行 Keil uVision2 開發(fā)環(huán)境,建立工程PIO8255_trafic_c.uV2,CPU 為AT89S51,包含啟動文件STARTUP.A51。
4. 按照實驗功能要求創(chuàng)建源程序 PIO8255_trafic.c 并加入到工PIO8255_trafic _c.uV2,并設(shè)置工程PIO8255_trafic_c.uV2 屬性,將其晶振頻率設(shè)置為11.0592MHz,選擇輸出可執(zhí)行文件,DEBUG 方式選擇硬件DEBUG,并選擇其中的“WAVE V series MCS51 Driver”仿真器。
圖2:設(shè)置晶振頻率
圖3:選擇仿真器
5. 構(gòu)造(Build)工程PIO8255_trafic_c.uV2。如果編程有誤進行修改,直至構(gòu)造正確為止。
6. 運行程序,交通燈狀態(tài)切換以及倒計時器的顯示是否符合程序要求,若不符合,分析出錯原因,繼續(xù)重復(fù)第4、5 步的步驟,直至結(jié)果正確。
四、實驗流程圖
圖4:實驗流程圖
實驗分析:本實驗中的東西方向信號燈同步控制,南北方向信號燈同步控制,即:東西方向上同種顏色的燈同時亮或滅,南北方向上同種顏色的燈同時亮或滅。程序中的延時1 秒鐘,可以利用純軟件延時實現(xiàn),也可以結(jié)合定時器硬件中斷加軟件計數(shù)方式實現(xiàn)。圖中的CD4511 是BCD 碼到LED 數(shù)碼管的顯示碼轉(zhuǎn)換芯片,因此要顯示某個數(shù)字,只需要在相應(yīng)的端口送出該數(shù)字的BCD 碼即可,不用進行軟件譯碼。首先將模式設(shè)置成模式0,開始時將數(shù)組bcd[]對應(yīng)的BCD碼移位送到sbuf中。接著通過RXD采用串行的方式送到數(shù)碼管芯片,直接將該BCD碼顯示出來。同時,TXD輸出一個同步移位時鐘,從而驅(qū)動數(shù)碼管的正常運行。文章來源:http://www.zghlxwxcb.cn/news/detail-454093.html
五、實驗源代碼
#include<reg51.h> // 頭文件
#define uint unsigned int
#define uchar unsigned char
uchar xdata led _at_ 0x7ffc; //外部尋址為8255的A口的地址
uchar xdata COM _at_ 0x7fff; /外部尋址為8255的控制寄存器的地址
sbit RX=P3^0; // 設(shè)置P3.0為端口RXD
sbit TX=P3^1; // 設(shè)置P3.1為端口TXD
//定義數(shù)字0~25的BCD碼
uint code bcd[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,
0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25};
void delayms(uint ms) //定義延遲子程序
{
uchar t;
while(ms--) for(t=0;t<120;t++); //共延時1毫秒
}
void num(uint bcddata) //定義顯示子程序
{
SCON=0x00; //工作模式0
SBUF=bcddata; //將數(shù)據(jù)存入SBUF
while(!TI);
TI=0; //清零
}
//主函數(shù)
void main()
{
COM=0x80;
EA=1; //允許中斷
ET0=1; //允許T0中斷
TF0=0; //T0溢出的請求中斷標(biāo)志位
while(1) //一直循環(huán)
{
char i=0; //設(shè)置循環(huán)控制變量
led=0x69; //低電平時,東西綠燈亮,南北紅燈亮
for(i=25;i>=0;i--) //數(shù)碼管從25倒計時到0
{
num(bcd[i]); //調(diào)用數(shù)碼管顯示子程序
delayms(1000); //調(diào)用延時子程序
}
for(i=0;i<5;i++) // 循環(huán)并發(fā)出五次閃爍
{
led=0xeb; //東西綠燈滅,南北紅燈滅
delayms(500); //延時
led=0x69; //東西綠燈亮
delayms(500); //延時以達到閃爍
}
led=0x96; //南北綠燈亮
for(i=25;i>=0;i--)//數(shù)碼管從25倒計時到0
{
num(bcd[i]); //調(diào)用數(shù)碼管顯示子程序
delayms(1000); //延時
}
for(i=0;i<5;i++) // 循環(huán)并發(fā)出五次閃爍
{
led=0xbe; //南北綠燈滅
delayms(500); //延時
led=0x96 //南北綠燈亮
delayms(500); //延時以達到閃爍
}
}
}
初學(xué)單片機,可能存在錯誤之處,還請各位不吝賜教。文章來源地址http://www.zghlxwxcb.cn/news/detail-454093.html
到了這里,關(guān)于山東大學(xué)單片機原理與應(yīng)用實驗 4.5 8255并行I/O擴展及交通信號燈控制實驗的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!