- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三 并口实验
一、 实验目得
熟悉与掌握AT89C51单片机得并口工作原理;
了解与掌握单片机得并口输入输出应用。
二、 实验内容
1、 LED模拟交通灯
?说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复、
Proteus设计得仿真电路如图所示。
(1)运行下述程序,并在电路上验证。
(2)如果要求黄灯闪烁3次后红灯亮,应该怎么该写程序?
#include<reg51。h>
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P0^0; //东西向灯
sbit YELLOW_A=P0^1;
sbit GREEN_A=P0^2;
sbit RED_B=P0^3;? //南北向灯
sbit YELLOW_B=P0^4;
sbit GREEN_B=P0^5;
uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量
//延时
void DelayMS(uint x)
{
?uchar i;
?while(x——) for(i=0;i120;i++);
}
//交通灯切换
void Traffic_Light()
{
?switch(Operation_Type)
{
case 1: //东西向绿灯与南北向红灯亮
?? RED_A=1;YELLOW_A=1;GREEN_A=0;
? RED_B=0;YELLOW_B=1;GREEN_B=1;
? ? DelayMS(2000);
? Operation_Type=2;
?? break;
??case 2:?//东西向黄灯闪烁,绿灯关闭
?DelayMS(300);
????YELLOW_A=~YELLOW_A;GREEN_A=1;
? if(++Flash_Count!=10) return; //闪烁5次
? Flash_Count=0;
??? Operation_Type=3;
? break;
?case 3: //东西向红灯,南北向绿灯亮
? RED_A=0;YELLOW_A=1;GREEN_A=1;
? ?RED_B=1;YELLOW_B=1;GREEN_B=0;
? DelayMS(2000);
? ? Operation_Type=4;
?break;
?case 4:?//南北向黄灯闪烁5次
???DelayMS(300);
?? YELLOW_B=~YELLOW_B;GREEN_B=1;
? ? if(++Flash_Count!=10) return;
? ?Flash_Count=0;
??? Operation_Type=1;
?}
}
//主程序
void main()
{
?while(1) Traffic_Light();
}
2、开关控制
用AT89C51单片机控制四个按键K1到K4与四个发光二极管D1到D4,要求当按下K1或K2键时D1或D2点亮,松开时对应得发光二极管熄灭,当按下K3或K4后,D3或D4不停地闪烁。Proteus仿真电路如下图。
验证程序实现所要求得功能。
若K3、K4同时按下时,D3与D4同时不停地闪烁,如何改写程序?
#include <reg52.h
#define uchar unsigned char
#define uint unsigned int
sbit D1 = P1^0;
sbit D2 = P1^1;
sbit D3 = P1^2;
sbit D4 = P1^3;
sbit K1 = P3^4;
sbit K2 = P3^5;
sbit K3 = P3^6;
sbit K4 = P3^7;
void DelayMS(uint x)//延时子程序
{
uchar t;
?while(x——)
{
? ?for(t=120;t0;t—-);
?}
}
void main()//主程序
{
P1=0xff; //四个二极管暗
while(1)
{
D1 = K1;//D1反映K1开关得状态
D2 = K2; //D2反映K2开关得状态
if(K3==0) //K3按下时,D3得状态不停地变反
{
while(K3==0)
{ D3=~D3;
DelayMS(10);
}
}
if(K4==0) //K4按下时,D4得状态不停地变反
{
while(K4==0)
{ D4=~D4;
DelayMS(10);
}
}
}
}
3、设计
文档评论(0)