一 实验目的:
实验4:运用AT89C51芯片实现四向交通灯:
(1) 掌握C语言编程单片机控制程序的方法。
(2) 掌握使用Keil4软件编写、编译、调试程序的方法。
(3) 掌握使用Proteus软件绘制电路原理图、硬件仿真和程序调试。
(4) 理解和掌握共阴极数码管的显示原理和编码(记忆)。
(5) 熟悉使用51单片机I/O端口实现对外部用电器和电路的控制。
二、实验硬件和软件:
计算机1台、并安装Proteus8.6软件和Keil4软件。
Proteus8.6中会运用的部件:7SEG-MPX2-CC、AT89C51、BUTTON、LED-GREENREDYELLOW、RESPACK-8d
三、试验任务:
1.使用Proteus排线连接的方式,在单片机I/O口上外接LED灯和数码管(用网络标识符),最终实现数码管从20-0的倒计时显示效果,为最终的实训项目一做准备。(要求:显示效果数码管显示间隔时间为1S,可以在完成该实验的基础上增加实验内容:两位数从20到1的交通灯计时显示。)
2.并且使用中断口P3^4使当操作者按下独立键盘使南北方向的交通灯变为绿色可通行,而西北方向的交通灯变为红色禁止通行,让救护车、消防车等紧急车辆通过。
以下内容为这次实验的主要内容(实验报告其余内容可参照本人的其余实验报告)
四向交通灯相关代码:
void jinji() //紧急函数(为了完成老师要求:按下独立键盘使南北方向的交通灯变为绿色可通行,而西北方向的交通灯变为红色禁止通行,让救护车、消防车等紧急车辆通过)
{
SN_green=0;
SN_red=1;
SN_yellow=1;
WE_green=1;
WE_red=0;
WE_yellow=1;
while(1)
{
if(k2==0)
{
delayxms(3);
if(k2==0)
{
while(!k2);
TR0=1;
if(flgaa==0) jtda();
if(flgaa==1) jtdb();
if(flgaa==2) jtday();
if(flgaa==3) jtdby();
}
}
}
}
代码中一些位的申明以及自己所写代码的调用:
#include #include #include sbit smg1=P3^0; //数码管的高低位定义 sbit smg2=P3^1; sbit smg3=P3^2; sbit smg4=P3^3; sbit SN_green=P2^7; sbit SN_red=P2^6; sbit SN_yellow=P2^5; sbit WE_green=P1^0; sbit WE_red=P1^1; sbit WE_yellow=P1^2; sbit k2=P3^4; /*记住缩写函数要在前面申明调用*/ int kkk=0,fk=0; int djs22,js1=0,djs21,flgaa,nbdjs=20,dxdjs=20; int js=0,djs=20,djs1=20; int table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x00}; 数码管的显示: void djsxs22() { int b1,b2; b1=djs1/10; //赋值给数码管高位 b2=djs1%10; //余数给数码管低位 P0=table[b1]; smg1=0; delayxms(3); smg1=1; P0=table[b2]; smg2=0; delayxms(3); smg2=1; P0=table[b1]; smg3=0; delayxms(3); smg3=1; P0=table[b2]; smg4=0; delayxms(3); smg4=1; 四向交通灯的三个LED灯的显示: void jtdb() { qm(); flgaa=1; WE_green=0; SN_red=0; while(1) { if(djs1>5) { if(k2==0) { delayxms(3); if(k2==0) { while(!k2); TR0=0; jinji(); } } djsxs22(); } if(djs1<=5) { jtdby(); } } } void jtdby() { qm(); flgaa=3; WE_green=1; WE_yellow=0; SN_red=0; while(1) { if(k2==0) { delayxms(3); if(k2==0) { while(!k2); TR0=0; jinji(); } } djsxs22(); if(djs1<0) { djs=dxdjs; djs1=nbdjs; jtda(); } } } void jtda() { qm(); flgaa=0; SN_green=0; WE_red=0; while(1) { if(djs>5) { if(k2==0) { delayxms(3); if(k2==0) { while(!k2); TR0=0; jinji(); } } djsxs22(); } if(djs<=5) { jtday(); } } } void jtday() { qm(); SN_green=1; SN_yellow=0; WE_red=0; flgaa=2; while(1) { if(k2==0) { delayxms(3); if(k2==0) { while(!k2); TR0=0; jinji(); } } djsxs22(); if(djs<0) { djs=dxdjs; djs1=nbdjs; jtdb(); } } } 这上面是keil的部分。 在Proteus8.6软件进行仿真; 1、所使用的部件: 7SEG-MPX2-CC AT89C51 BUTTON LED-GREENREDYELLOW【LED灯三个(黄 绿 红)】 RESPACK-8d 连线方式: 实验展示
上一篇:学习笔记 从零开始学单片机(9) 串口通信
下一篇:51单片机------数码管【有74HC753】
推荐阅读最新更新时间:2024-11-18 23:43
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LTC2862ACS8-1 的参考设计
- LT1021DCN8-5 由电流源驱动的负分流基准的典型应用
- 使用 MikroElektronika 的 DCTR-76D 的参考设计
- ESP8266烧录架
- 带有L6563S的200W无波纹输入电流PFC预调节器
- LTC3548EDD 演示板,双路同步降压型 DC/DC 转换器,2.5V 至 5.5Vin,1.2/1.5/1.8Vout1@800mA,2.5Vout2@400mA
- 用于完整 3V、12 位、1MHz 模数转换系统的 AD8604DRUZ-REEL 运算放大器的典型应用
- NCV33074ADR2G 有源带通滤波器运算放大器的典型应用
- 远程遥控车普通直流电机
- MelonPI-F1