利用51单片机控制LED灯(格式规范)

当管脚P1为低电平时,LED灯亮

#include "reg52.h"
void main(){
    P1 = 0xFE;//只有最低位亮
    TMOD = 0x01;//高四位为定时器中断1(为0表示没用),低四位为定时器中断0(1:方式1)
    TH0 = (65536-5000)/256;//5000以us为单位,此处为5ms;60536依次加一,直到65535时再加一则溢出,执行中断
    TL0 = (65536-5000)%256;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
    
    while(1);//c51语言中不可用true,只可用1
}
//中断函数无需在前面声明,也不用在主函数中调用它
unsigned char i = 0;//变量定义一般写在外面
void LED_Light() interrupt 1{//1:定时器中断1;0:外部中断1;2:外部中断2;3:定时器中断2;4:串行口中断
    i++;
    TH0 = (65536-5000)/256;//重新赋初值
    TL0 = (65536-5000)%256;
    if(i==100){//5ms中断一次,当中断100次时,使流水灯发生变化
            P1 = ~P1;
            P1 = P1<<1;//左移一位
            P1 = ~P1;
            i = 0;//LED灯每变化一次,使i重新从0开始计数,每中断100次改变一次
    }

}

注释:51单片机

   2个8位计数器(16位)方式1(最常用);方式3:常用来产生波形(波特率),用于蓝牙配对

方式1:

    16位:高八位TH,低八位TL,由于晶振11.0592MHz,大约为12MHz。

    由于12个时钟震荡周期=1个机器周期,故一个机器周期1us


猜你喜欢

转载自blog.csdn.net/qq_41270858/article/details/80955606