Keil四个LED灯点亮程序
keil使用教程编写第一个led灯程序
1、新建一个空文件夹
2、打开keil--newuVisionproject
3、选择目录,命名文件
4、选择芯片
5、添加文件
6、编写C51单片机程序
7、生成可以加载单片机里的hex文件
8、编译生成hex文件
9、将hex文件导入单片机
Keil编程:51单片机键盘控制LED
#includereg51.h
#includeintrins.h
#define uchar unsigned char
uchar led1,led2;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
void delay(int a)
{
uchar i;
while(a--)for(i=0;i120;i++);
}
main()
{
unsigned int i;
led1=0xfe;
led2=0xfc;
while(1)
{
P0=0x55;
if(key1==0)
{
P0=led1;
led1=_crol_(led1,1);
delay(200);
}
if(key2==0)
{
P0=led2;
led1=_crol_(led1,2);
delay(200);
}
if(key3==0)
{
for(i=1;i500;i++)
{
P0=0xff;
delay(i);
P0=0x00;
delay(500-i);
}
for(i=1;i500;i++)
{
P0=0x00;
delay(i);
P0=0xff;
delay(500-i);
}
}
}
}
keil编写一个程序,控制一排灯泡从两端开始亮,用C语言。。
很简单啊,假定用P1驱动灯泡,按下列步骤:
1、P1=0x81,表示1、8亮,延时一段时间;
2、P1=0x42,表示2、7亮,延时一段时间;
3、P1=0x24,表示3、6亮,延时一段时间;
4、P1=0x81,表示4、5亮,延时一段时间;
重复1-4步即可。
怎么在Keil C51 v709中写程序实现灯泡依次亮
在keil里新建一个工程并保存,再新建一个文本然后保存文本为main.c(名字随便去,但是格式要为.c) ,把下面的代码放到main.c里。点开(Target)旁边的+号(展开工程)看到
source Group 文件夹,选中右键菜单倒数第四个有Add files to Group"source Group",选择它,然后会打开文件夹选择刚才的main.c点添加(在右下角,点一下就可以了),再点Close。现在右键Target,有工程选项(右键菜单第一个),会打开选项卡,第三个选项卡output里勾选Creat hex file(产生hex文件),现在点工程菜单里有一个build target,就可以产生hex文件了,把文件下载到单片机里就好了。注意:单片机的P1口应该接7个LED灯,才会有这样的效果
代码如下(以下程序以单片机at89c51为例):
#include"reg51.h"
#define P1 GPIO1
void delay1s();
void main()
{
GPIO1=0x80; //初始化P1口
while(1)
{
if(GPIO1==0x00) GPIO1=0x80; //实现P1口7个灯循环亮
delay1s(); //灯亮1S
else GPIO1=GPIO11; //下一个灯亮,使灯依次亮
}
}
如何用单片机一个按钮开关控制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;
*/
}
}
}
}
//-----------------------------------------------
//上面程序中有很多地方可以优化,这里只是给出一个参考供学习。