实验三 并 口实验.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

189****0801 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档