单片机程序案例(全部调试通过_部分附仿真图)(6)

2018-12-04 22:07

单片机实验箱一台;PC机一台;USB下载线一根。

三、实验内容

自行编制程序用8255实现交通红绿灯的控制。其控制要求如下:(a)初始状态全为红灯。(b)南北红灯亮并维持25s。在南北红灯亮的同时,东西绿灯也亮,并维持20s。到20s时,东西绿灯闪亮,闪亮3s后熄灭,在东西绿灯熄灭时,东西黄灯亮,并维持2s。到2s时,东西黄灯熄灭,东西红灯亮。与此同时,南北红灯熄灭,南北绿灯亮。(c)东西红灯亮维持30s。南北绿灯亮维持25s,然后闪亮3s再熄灭。同时南北黄灯亮,维持2s后熄灭,这时南北红灯亮,东西绿灯亮。(d)周而复始。其时序如图10-1所示。实验原理图见实验九中的图9-1。

南北红灯东西绿灯东西黄灯东西红灯南北绿灯南北黄灯20S3S2S25S3S2S

图10-1 交通灯控制时序图

五、思考题

1.8255的功能是什么?

2.如何计算8255的端口地址?

本题试验箱没有方向设置,故而编程时忽略了方向方面的设置。PC口接的led灯依次为红、绿、黄(还有一个灯颜色忘记了,)然后又是红、绿、黄??

这个程序主函数while(1)部分设置的非常好,简洁明了。我看过别人写的麻烦的。 实验代码:

#include #include

#define PC XBYTE[0xbeff]

#define COM8255 XBYTE[0xbfff] #define uint unsigned int #define uchar unsigned char int num;

void delayms(uint xms) //延时函数 {

uint a,b;

for(a=xms;a>0;a--)

for(b=125;b>0;b--); }

void main() {

26

TMOD=0X01;

TH0=(65536-50000)/256; TL0=(65536-50000)%6; TR0=1; ET0=1; EA=1;

COM8255=0x80;

PC=0X3F;//初始红灯 while(1) {

while(num<=400)

{

PC=0X4b; }

num=0;

while(num<=60) {

PC=0X6f;

delayms(100); PC=0X4b;

delayms(100); }

num=0;

while(num<=40) {

PC=0X27; }

num=0;

while(num<=500) {

PC=0x4b; }

num=0;

while(num<=60) {

PC=0x6f;

delayms(100); PC=0x4b;

delayms(100); }

num=0;

while(num<=40) {

PC=0X27;

//红绿20s

//绿闪烁3s,红亮

//红黄2s

//红绿25s

//绿闪烁3s,红亮 //红黄2s

27

} } }

void timer0() interrupt 1 {

TH0=(65536-50000)/256; TL0=(65536-50000)%6; num++; }

实验十一 矩阵键盘识别实验

一、实验目的

(1)掌握4×4矩阵键盘的工作原理和键盘的扫描方式。 (1)掌握键盘的去抖方法和键盘应用程序的设计。

二、实验设备

单片机实验箱一台;PC机一台;USB下载线一根。

三、实验内容

自行编制程序,用51单片机实现4×4矩阵键盘扫描,采用线反转法;并实现当S11按下时在数码管上显值“0”,当S12按下时在数码管上显值“1”??,即依次将S11至S26按下,在数码管上依次显示十六进制数“0-F”,矩阵键盘原理图如图11-1所示。单片机与数码管接口电路原理图见实验五中图5-1所示。

图11-1 矩阵键盘接口电路

四、思考题

28

1.画出所编程序的流程图;

2.若要实现2×4矩阵键盘,软硬件作如何修改。

3.实验中有何故障、问题出现,是否得到解决?如何解决的?

南北红灯东西绿灯东西黄灯东西红灯南北绿灯南北黄灯20S3S2S25S3S2S

实验代码:

#include

#define uchar unsigned char #define uint unsigned int sbit dula=P3^6; sbit wela=P3^7;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delayms(uchar xms) {

uchar a,b; for(a=xms;a>0;a--) { for(b=125;b>0;b--); } }

void display(uchar a) { dula=1;//wela=0; P0=table[a]; dula=0; //wela=1; // P0=0xfe; //delayms(10); // P0=0xff; }

uchar fun() {

29

uchar number,temp; P2 = 0xfe; temp = P2;

temp = temp&0xf0; while(temp!=0xf0) { delayms(5); temp = P2; temp = temp&0xf0; while(temp!=0xf0) { temp = P2; switch(temp) { case 0xee: number = 0;break; case 0xde: number = 1;break; case 0xbe: number = 2;break; case 0x7e: number = 3;break; } while(temp!=0xf0) { temp = P2; temp = temp&0xf0; } } }

P2 = 0xfd; temp = P2;

temp = temp&0xf0; while(temp!=0xf0) { delayms(5); temp = P2; temp = temp&0xf0; while(temp!=0xf0) { temp = P2; switch(temp) { case 0xed: number = 4;break; case 0xdd: number = 5;break; case 0xbd: number = 6;break;

30


单片机程序案例(全部调试通过_部分附仿真图)(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:531知识竞赛题库(判断)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: