51单片机 简单变速灯

来源:百度知道 编辑:UC知道 时间:2024/09/18 06:05:44
#include <reg52.h> //包括一个52标准内核的头文件

sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;//要控制的LED灯
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit K1= P1^6;
sbit K2= P1^7;
signed long n,a=100000;
int flag=0;
void main(void) // 主程序
{

while(1) //程序循环
{
if(!K1) //如果读到K1为0
{
flag=1;
}
if(!K2)
{
flag=-1;
}
switch (flag)
{
case 0: a=100000;
case 1: a=a/20;
case -1: a=a*20;
}
if(a==0||a>2000000000)a=100000;
for(n=0;n<a;n++);
P10=~P10;
P11=~P11;
P12=~P12;
P13=~P13;
P14=~P14;
P15=~P15;
}
}

这个就是把几个灯一起点亮当你按下K1时候就开始加速闪,K2 减速闪,为什么按下去没有变化,还有当不按任何键的时候100000的循环应该不到两秒吧为什么好像有好几秒?
//定时器0中断
timer0() interrupt 1 // 定时器0中断是1号
{
TH0=0x00; //写入定时器0初始值0x0005
TL0=0x06;
P10=~P10; //反转LED灯的

timer0() interrupt 1 是中断函数,主程序在运行是如果定时器时间到了初始值0x0006就会发生中断,进入timer0() 函数,
TH0=0x00;
TL0=0x06

是把16位的定时器的高8位写十六进制00。低8位写06,就是十六进制0006,

P10=~P10; //反转LED灯的亮灭
就是让灯状态变一下达到闪的目的,每当定时器到了设定时间时就会进入中断程序,灯就会不断闪