仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
熟练掌握Keil和Proteus软件的C51设计与仿真操作
熟练掌握并行口P口的编程
熟悉C51编程的变量、存储等概念及使用方法
初步掌握延时程序的原理,初步掌握P口的输入检测编程
实验要求
电路图设计:
可以用P1或更多的P口分别连接八个LED灯进行组合
可以用四个P口连的LED灯构成一个4×8的矩阵
可以用不同数量的LED等构成一个特定图案
程序要求:
要尽量考虑for、while、switch、函数等用途,巩固C语言设计能力
各种效果可以考虑做成函数,通过按键进行不同函数的调用
效果提示:
常规流水灯效果
多种流水灯效果切换
多种流水灯以某种规律切换
实验实现的功能说明
P1、P2口分别接在第一、第二排LED灯上,利用开关SW1和SW2分别控制LED灯的不同运作,当开关SW1按下时,第一排LED灯从左到右按顺序点亮,再由右到左顺序点亮;断开开关SW1,闭合开关SW2,第二排LED灯两边向中间依次点亮,形成汇中的效果。
实验实现的原理及仿真电路设计
实验原理:本次实验使用十六个四种颜色的LED灯排成两排,用if语句选择开关SW1和SW2,按下SW1时,利用for循环和左移i位,右移8-i为相或实现LED灯从左到右依次点亮的流水灯效果,同理再得到由右向左的流水灯效果,左右依次循环。按下SW2时,设定最左和最右的初始值,用for循环循环四次,实现流水灯汇中。
实验原理电路图:


声明开关按键:
sbit SW1=P3^0;
sbit SW2=P3^1;
延时程序:
void delay(unsigned int m)
{
while(m--);
}
当开关SW1按下时,流水灯的工作:
if(SW1==0)
{
t=0x01;
P1=t;
for(i=0;i<8;i++)
{
a=t<<i;
b=t>>(8-i);
P1=a|b;
delay(20000);
}
for(i=1;i<8;i++)
{
a=t>>i;
b=t<<(8-i);
P1=a|b;
delay(20000);
}
}
开关SW2按下时,另一流水灯的运作:
if(SW2==0)
{
p=0x01;
q=0x80;
for(j=0;j<4;j++)
{
P2=p+q;
delay(20000);
p=p<<1;
q=q>>1;
}
}
实验过程及实验情况
编写SW1代码时,第二个从右到左的for循环的初始值i设置成0,以致流水灯从左运动到最右端后,又多亮了一个最左端的灯,达不到左右循环流水的效果。后将其i设置成1,实现正常的左右流水循环的效果。制作电路图时,LED方向和代码没有结合好,导致一排LED灯接地,一排接高电平,调整好后两排LED灯都接地。
实验小结
本次实验要求初步掌握延时程序的原理,初步掌握P口的输入检测编程。掌握Keil和Proteus软件的C51设计与仿真操作,熟练掌握并行口P口的编程,熟悉C51编程的变量、存储等概念及使用方法。但是实验过程中仍有不熟练的地方,需要不断改进,且能做出更好的作品。
Proteus7.5版本的仿真与程序下载:
18034520204 何颖(2).zip
(175.74 KB, 下载次数: 34)
|