一、实验目的
(1)熟悉proteus仿真软件,掌握单片机原理图的绘图方法;
(2)学习I/O口的使用方法;
(3)学习C51的程序设计方法;
(4)学会在ISIS模块中进行C51程序录入、编译和调试;
(5)理解单片机程序控制原理,实现指示灯/开关控制器的预期功能。
二、实验内容
程序启动后,8只发光二极管先整体闪烁3次(即亮→暗→亮→暗→亮→暗,间隔时间以肉眼可观察到为准)。然后,根据开关状态控制对应发光二极管的亮灯状态,即开关闭合相应灯亮,反之则相反。
三、实验原理图
此处的LED共阳极(高点平),开关共阴极(低电平)。开关1、2、3、4关闭,则导通,这一线路为低电平,通过程序让开关控制LED灯的亮灭,LED左右有电势差,所以灯亮。 5、6、7、8开关断开,灯不亮。
四、实验步骤
(1)按照表1将元件添加到编译环境中,在proteus中绘制电路原理图;用总线将P1.0~P1.7口连至开关SW1~SW8,用总线将P2.0~P2.7分别接到发光二极管D1~D8;
(2)在KEIL软件中编写相应的C51程序;
(3)在proteus中加载程序,观察仿真结果;波动开关SW1~SW8,观察发光二极管的亮灯状态,检验电路图绘制与C51程序编写的正确性。
表1 实验1的元器件清单
category | reference | value |
Microprocessor ICs | U1 | 89C51 |
Miscellaneous | X1/12MHz | CRYSTAL |
Capacitors | C2~C3/30PF | CAP |
Capacitors | C3/22uF | CAP-ELEC |
Resistors | R2~R9/200W | RES |
Resistors | R1/1KW | RES |
Optoelectronics | D1~D8 | LED-YELLOW |
Switches & Relays | SW1-SW8 | SWITCH |
- 实验程序流程框图
图2 实验2程序流程图
编程分析:
- 程序开始运行后8只发光二极管先整体闪烁3次(即亮→暗→亮→暗→亮→暗)。
亮灯:向P2口送入数值0(P2←0);
灭灯:向P2口送入数值0FFH(P2←0FFH);
闪烁次数:整体循环3次;
闪烁快慢:软件延时时间。
- 然后根据开关状态控制灯亮或灯灭,即开关闭合相应灯亮,反之则相反。
开关控制灯:将P1口内容送入P2口(P2←P1);
无限持续:整体无条件循环。
C51程序可参考程序流程图,如图2所示。
五、实验代码
#include <REGX51.H>
void Delay_xms(unsigned char xms) //延时1ms
{
unsigned char i,j;
while(xms--)
{
i = 2;
j = 239;
do
{
while(--j);
}while(--i);
}
}
void main() //主函数
{
unsigned char c = 3; //c:循环次数
while(c)
{
P2=0x00; //亮
Delay_xms(1000); //延时1s
P2=0xFF; //灭
Delay_xms(1000); //延时1s
c--; //闪烁3次
}
while(1)
{
P2=P1; //等价于下面8行。用开关的闭合和断开来控制LED的亮灭
// P2_0 = P1_0;
// P2_1 = P1_1;
// P2_2 = P1_2;
// P2_3 = P1_3;
// P2_4 = P1_4;
// P2_5 = P1_5;
// P2_6 = P1_6;
// P2_7 = P1_7;
}
}
六、结语
若有问题,请指正,感谢阅读。