实验一 P1口霓虹灯实验(4学时)
一、实验目的 ⑴了解实验仿真系统的硬件结构,熟练使用实验仿真软件; ⑵掌握MCS-51单片机P1口的基本结构和使用方法;
⑶学会用C51编写含分支和循环结构的程序。二、实验预备知识 ⑴P1口为准双向口,每一位都可地定义为输出线或输入线。 ⑵本实验中延时子程序采用指令循环来实现,机器周期(12/6MHz*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。三、实验内容 (1)在实验箱上完成:
P1作为输出口,接八只发光二极管,编写程序,使发光二极管按照如下顺序点亮:
开始→从左往右循环点亮→从右往左循环点亮→从左往右逐个点亮→从右往左逐个熄灭→2个发光二极管分别从中间往两边循环点亮→2个发光二极管分别从两边往中间循环点亮→全部点亮→全部熄灭→开始。
(2)用Proteus软件参照实验电路连线并仿真运行,得出与实验箱上相同的软件仿真结果。
所用元器件:单片机ATC51、发光二极管LED-GREEN(RED、BLUE、排阻或电阻RESPACK-8(RES、8位缓冲器74LS244
仿真电路图:
四、程序框图
五、实验电路(只连图中粗实线)
六、实验步骤 P1.O~P1.7用插针连至L1~L8,运行程序后,观察发光二极管闪亮移位情况。 程序清单:
#include
#include
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x
{
uchar i;
while(x--
{
for(i=0;i<120;i++;
}
}
//主程序
void main(
{
uchar i;
P1=0xfe;
DelayMS(400;
while(1
{
for(i=0;i<7;i++
{
P1=_crol_(P1,1; //P1的值向左循环移动
DelayMS(400;
}
for(i=0;i<7;i++
{
P1=_cror_(P1,1; //P1的值向右循环移动
DelayMS(400;
}
for(i=0;i<7;i++
{
P1<<=1;
DelayMS(400;
}
P1=0x80;
DelayMS(400;
P1=0xc0;
DelayMS(400;
P1=0xe0;
DelayMS(400;
P1=0xf0;
DelayMS(400;
P1=0xf8;
DelayMS(400;
P1=0xfc;
DelayMS(400;
P1=0xfe;
DelayMS(400;
P1=0xff;
DelayMS(400;
for(i=0;i<2;i++
{
P1=0xe7;
DelayMS(400;
P1=0xdb;
DelayMS(400;
P1=0xbd;
DelayMS(400;
P1=0x7e;
DelayMS(400;
P1=0xbd;
DelayMS(400;
P1=0xdb;
DelayMS(400;
}
P1=0xe7;
DelayMS(400;
P1=0x00;
DelayMS(400;
P1=0xff;
DelayMS(400;
P1=0xfe;
DelayMS(400;
}
}