2017年11月16日
流水灯实验
#include<reg52.h>
第一行是程序的单片机头文件名,它说明了你使用的单片机型号,方便识别功能引脚
#include<intrins.h>
第二行是程序函数库的定义文件名,它说明了你正在调用这个函数库
#define uchar unsigned char
#define uint unsigned int
这两句是函数名替换,代表前一个表示后两个词的含义,这样后面使用到它们的时候就可以直接用uint或uchar了
uchar i;
uint temp;
这是在为后面使用的数据声明它们的数据类型,uchar是表示无符号字符型,uint是表示无符号整数型
void delay(uint z)
{
uint x,y;
for(x = z;x > 0;x --)
for(y = 112;y > 0;y --);
}
这段程序是一段定时程序可以直接用delay()调用这段定时程序,其中括号里是延时时间单位是毫秒(ms),在这个程序中使用了一个for语句嵌套,比如uint z的数字是1000(延时是晶振震荡周期或频率/12),那么就相当于计算了120*1000次减法运算。但是这样计算是有时间误差的,这次用的晶振频率为11.0592,那么计算的步骤大概是这样的:
1、先计算时钟周期1/11.0592;
2、用时钟周期*112*1000最后为1.0080秒也就相当于1秒;
void main()
主函数开始
{
temp = 0xfe;
P1 = temp;
将P1口的初始值赋给temp;
while(1)
循环开始
{
for(i = 0;i < 8;i ++)
从0到7将下面内容运行八次,让八个LED灯依次点亮
{
temp = _cror_(temp,1);
按位右移控制符,每次右移一位
P1 = temp;
声明P1口的值等于temp的值
delay(1000);
延时1000ms
}
}
}