简单介绍
1.单片机简称MCU,内部集成cpu,存储器(ROM,RAM),定时器,中断系统,通讯接口等。其中,ROM掉电数据丢失。
2.单片机依靠传感器采集信息,依靠cpu处理信息,控制硬件设备。
3.优点:体积小,成本低。
4.51单片机为8位机,字长八位。
LED的闪烁。
1.c51常用数据类型。
使用方法:
2.c51基本语句。
3.以1s为周期控制LED灯的闪烁。
#include <REGX52.H>
#include<INTRINS.H>//_nop_();的头文件
void Delay500ms() //@12.000MHz
{
unsigned char data i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}//延时函数
void main()
{
while(1)
{
P2=0xFE;
Delay500ms();
P2=0xFF;
Delay500ms();
}
}
4.自定义延时函数,用左移函数_crol_()实现流水灯。
#include <REGX52.H>
#include<intrins.h>//_crol_()函数的头文件一定要写
void Delay1ms(unsigned int x) //@12.000MHz
{
unsigned char data i, j;
while(x--)//自定义延时函数,循环x次1ms的延时
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
unsigned int LED=0XFE;//unsigned int 为2个字节大小,unsigned char为1个字节大小
unsigned int time=1000;
void main()
{
while(1)
{
P2=LED;
LED=_crol_(LED,1);//不要对P2口直接操作,右移函数为_cror(a,b)_,a为操作对象,b为移动步长
Delay1ms(time);
time=time-200;//使流水灯速度逐渐加快
}
}
5.独立按键实现流水灯。
#include <REGX52.H>
#include<intrins.h>
void Delay1ms(unsigned int x) //@12.000MHz
{
unsigned char data i, j;
while(x--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
unsigned int led=0xfe;//一定要定义在while循环外面,要不然只能移位一次又从头开始了
while(1)
{
if(P3_1==0)//当开关按下时,开关的接口电平为0
{
P2=led;
led=_crol_(led,1);
Delay1ms(200);
}
else(P2=0XFF);
}
}
6.独立按键控制LED的状态
按键按下和松开会有抖动
#include <REGX52.H>
#include<intrins.h>
void Delay1ms(unsigned int x) //@12.000MHz
{
unsigned char data i, j;
while(x--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
while(1)
{
if(P3_1==0)
{
Delay1ms(20);//利用延时,屏蔽掉按下到平稳时的抖动
while(P3_1==0);//代表着开关按下到松开之间开关稳定的时候
Delay1ms(20);//当P3_1不等于0时,即松开开关的过程,利用延时,屏蔽掉平稳到松开时的抖动
P2_0=~P2_0;//取反
}
}
7.独立按键控制LED显示二进制数(从0开始)
#include <REGX52.H>
#include<intrins.h>
void Delay1ms(unsigned int x) //@12.000MHz
{
unsigned char data i, j;
while(x--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
unsigned char a=0;
while(1)
{
if(P3_1==0)
{
Delay1ms(20);
while(P3_1==0);
Delay1ms(20);//消除开关的抖动
P2=~a;//因为LED灯1灭0亮,要让LED灯从0开始显示二进制数,就要让P2=0xFF,即全灭,所以取反(11111111,11111110,11111101,11111011,…………)
a++;//(00000001,00000010,00000100…………)
}