|
1、基本内容
IF (已经准备有protues仿真文件和HEX文件的)
(1)进行仿真演示。
(1)认真理解并读懂程序,将所给程序在KEIL中编译,产生HEX文件;
(2)将程序烧写到实验箱中的单片机中;
(3)连接实验箱中的硬件:
序号 单片机(A2区) LED灯(D1区) 备注
1 J61(P10~P17) J52(LED1~ LED8)
(4)运行程序,在实验箱中实现程序功能。
2、扩展内容:
(1)所给程序中定时器T1采用查询方式,请修改程序:用定时器T0,中断方式,实现1S流水灯。
四、实验程序
//*********************************************************************************
//程序:ex4.c
//功能:查询方式实现间隔1s的流水灯程序。8个发光二极管依次顺序点亮,采用循环移位
//函数_crol_(m,1)实现
//实验箱上D1区J52接P1
//*********************************************************************************
#include<reg51.h> /*包含头文件REG51.H*/
#include <intrins.h> /*包含函数_crol_(m,1)的头文件*/
#define uchar unsigned char
#define LED P1 /*定义8个LED接至P1口*/
#define Count 50000 /* T1方式1定时50ms的计数值*/
uchar Temp1, Temp2;
void Delay1s(); //1s延时函数声明
void main() //主程序
{
TMOD=0x10; //设置T1为定时器、方式1
LED=0xff; //8个LED全部熄灭
Temp1=0xfe; //点亮最上面的LED
LED=Temp1;
while(1)
{
Delay1s(); //调用1s延时函数
Temp2=_crol_(Temp1,1); //采用_crol_(m,1)实现单只LED从上到下依次点亮
Temp1=Temp2;
LED=Temp2;
}
}
//*********************************************************************************
//函数名:Delay1s
//函数功能:利用T1定时、方式1实现1s延时,采用查询方式实现
//*********************************************************************************
void Delay1s()
{
uchar i;
for(i=0;i<0x14;i++) //设置20次循环次数
{
TH1=(65536-Count)/256; //T1的高8位初值
TL1=(65536-Count)%256; //T1的低8位初值
TR1=1; //启动T1
while(!TF1); //查询计数是否溢出,即定时50ms时间到了吗?
TF1=0; //50ms定时时间到,将T1溢出标志位TF1清零
}
}
1.仿真图:
|
|