单片机用KEIL软件编译,功能是让小灯有周期的亮和灭,出现错误,大家帮帮忙啊!!
程序 没有 问题,是KEIL软件编译的问题。
编译汇编语言程序 可以直接用protues仿真软件编译,
或者 用 MedWin 中文铅腔版 比较 好用,
KEIL软件 对 汇编语言 本身 就存在一些问态银题的。槐闭衫
用keil编一个用四个按钮控制16个灯变化的程序,能停止
很简单啊,假定用P1驱动灯泡,按下列步骤:
1、P1=0x81,表示1、8亮,延时一段时间;
2、P1=0x42,表示弯肢2、7亮,延时一段时间;
3、P1=0x24,表示3、6亮,延时一段埋烂世时间;
4、历漏P1=0x81,表示4、5亮,延时一段时间;
重复1-4步即可。
如何用单片机一个按钮开关控制3个灯3种效果。流水。闪烁。还有一直亮。用keil编程。
下面是用C51编写尺核正的简单程序:
#include reg51.h
#include intrins.h
sbit io_Key = P1 ^ 1;
sbit led1 = P1 ^ 2;
sbit led2 = P1 ^ 3;
sbit led3 = P1 ^ 4;
unsigned char ucCount = 0;
bit flag05s = 0;
//---------------------------------
void delay125us(void) //@12.000MHz
{
unsigned char i;
i = 60;
while (--i);
}
void Timer0Init(void) //10毫秒@12MHz
{
TMOD = 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0xF0; //设置定时初值
TH0 = 0xD8; //设置定时初值
TR0 = 1; //开定时器0
ET0 = 1; //开定时器0中断
EA = 1; //开总中断
}
/陵悔/T0中断用来计数器溢出
void zd0(void) interrupt 1
{
TL0 = 0xF0; //设置定时初值
TH0 = 0xD8; //设置定时初值
if(++ucCount = 50)
{
ucCount = 0;
flag05s = 1; //g_flag05s = isYes定时0.52秒到,用于测量周期延时
}
}
void main(void)
{
unsigned char CountTemp = 0, ucState = 0;
Timer0Init();
while(1)
{
//-------------------------------
//简单的按键检测程序:
io_Key = 1;
_nop_();
if( io_Key == 0 )
{
CountTemp = 0;
do
{
delay125us();
if( io_Key != 0 ) break;
} while(++CountTemp 160); // 延时20ms去抖动
if(CountTemp 160)//如果按键时间有效,改变状态
{
switch(ucState)
{
case(0):
{
ucState = 1;
led1 = 0;
led2 = 0;
led3 = 0;
}
break;
case(1):
{
ucState = 2;
led1 = 0;
led2 = 0;
led3 = 0;
}
break;
case(2):
{
ucState = 0;
led1 = 0;
led2 = 1;
led3 = 1;
}
break;
}
while(io_Key == 0); //等待按键释放
}
}
//------------------------------
//每0.5秒改变一下LED状态
if(flag05s == 1)
{
flag05s = 0;
switch(ucState)
{
case(0):
{
led1 = !led1;
led2 = !led2;
led3 = !led3;
}
break;
case(1):
{
bit ledTemp = led1;
led1 = led2;
led2 = led3;
led3 = ledTemp;
}
break;
//LED常氏颂亮可以忽略改变LED状态
/*
case(2):
{
led1 = 0;
led2 = 0;
led3 = 0;
}
break;
*/
}
}
}
}
//-----------------------------------------------
//上面程序中有很多地方可以优化,这里只是给出一个参考供学习。
在51单片机中用c语言keil写程序实现用一个按键控制6个灯的亮和灭(按下按
#include隐陪槐灶友reg51.h乱数
sbit key=P1^0;
sfr LED=P0;
main()
{
while(1)
if(key==0)P0=0xc0;
else P0=0xff;
}
Keil中怎么实现按键一次显示一盏灯,按键两次显示两盏灯?
应该是用keil写C语言程序实现,声明槐搏一个变量num计按岩明灶键次数,按键一次num加1,大于2再回1,再用if语句判断num的值确定显示粗扮1或2盏灯。