一、单片机关键字sbit
sbit:位定义关键字
三种用法:
1.Sbit变量名=地址值
2.sbit位变量名=SFR名^变量位地址值
3.sbit位变量名=SFR地址值^可变位地址值
二、程序demon——点亮LED
原理图,LED1由P10口控制,所以P10需要1个低电平既可以点亮
#include <reg52.h> //引用51头文件
sbit LED1 = P1^0; //位定义LED1的IO口
void main()
{
LED1 = 0; //拉低点亮
while(1);//程序停留
}
程序烧录:
运行结果:
三、LED闪烁
使8个LED灯闪烁,原理是切换P1 IO口的高低电平状态
#include <reg52.h> //引用51头文件
unsigned int i;
void main()
{
while(1)
{
P1 = 0x00; //拉低点亮
i = 65535;
while(i--);
P1 = 0xff;//拉高熄灭
i = 65535;
while(i--);
}
}
四、流水灯程序
1.软件延时的计算
使用keil中的debug调试确定一个for循环的时间,依此为依据确定1ms所需几次for循环
#include <reg52.h> //51头文件
#include <intrins.h>//包含循环右移函数_cror头文件
#define uchar unsigned char //宏定义
#define uint unsigned int //宏定义
sbit LED1 = P1^0; //位定义LED1硬件接口
uchar i; //申明循环计数变量
uchar temp;//P1口状态暂存变量
//毫秒级延时函数
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 120; y > 0 ; y--);
}
//主函数
void main()
{
temp = 0x7f; //定义LED灯初始状态,从LED8开始亮
P1 = temp; //赋值给P1,点亮LED8
delay(1000); //延时1000毫秒
while(1) //大循环
{
for(i = 0; i < 8; i++)
{
temp = _cror_(temp,1);//循环右移,LED从左至右点亮
P1 = temp;
delay(1000);
}
}
}