1、首先打开编程软件Keil uVision4,新建一个工程文件,在菜单栏中Project—— New uVision Project..。
2、然后选择单片机型号是 Atmel 公司的 AT89c52,单击OK。
3、再单击工具栏上新建按钮,新建一个文档,然后再点击保存,输入保存的路径,输入名字。
4、右键单击将这个文件添加到到工程文件夹中。
5、打开新建的文档,在文档中进行写程序。
6、点击下面方框中的图标,在Target项晶振的上写上:12.0代表晶振是12M,然后跳到Output项在生成HEX文件上打勾,点击OK。
7、然后点击三个编译按钮意思分别为:单个文件编译、编译已修改的文件、产生HEX文件,HEX文件用来下载到单片机上的,也可用来做仿真。
8、我们打开ISIS 7 Professional 软件,将程序添加到该电路中,然后按下启动按钮。
按键点灯程序,按一下按键灯亮(一直亮),再按一下灭,51单片机。?1、首先打开编程软件Keil uVision4,新建一个工程文件,在菜单栏中Project—— New uVision Project..。
2、然后选择单片机型号是 Atmel 公司的 AT89c52,单击OK。
3、再单击工具栏上新建按钮,新建一个文档,然后再点击保存,输入保存的路径,输入名字。
4、右键单击将这个文件添加到到工程文件夹中。
5、打开新建的文档,在文档中进行写程序。
6、点击下面方框中的图标,在Target项晶振的上写上:12.0代表晶振是12M,然后跳到Output项在生成HEX文件上打勾,点击OK。
7、然后点击三个编译按钮意思分别为:单个文件编译、编译已修改的文件、产生HEX文件,HEX文件用来下载到单片机上的,也可用来做仿真。
8、我们打开ISIS 7 Professional 软件,将程序添加到该电路中,然后按下启动按钮。
#include
typedef int u16;
typedef char u8;
sbit led1=P2^0; //D1
sbit led2=P2^1; //D2
sbit led3=P2^2; //D3
sbit led4=P2^3; //D4
sbit k1=P3^1;//定义一个独立按键
sbit k2=P3^2;//定义一个独立按键
sbit k3=P3^3;//定义一个独立按键
sbit k4=P3^4;//定义一个独立按键
//定义延时函数
void delay(u16 i)
{
while(i--);
}
void keypros()//定义独立按键控制
{
if(k1==0)//说明按下去了
{
delay(1000);//消抖
if(k1==0)
{
led1=~led1;//翻转
}
while(!k1);//按键松开
}
if(k2==0)//说明按下去了
{
delay(1000);//消抖
if(k2==0)
{
led2=~led2;//翻转
}
while(!k2);//按键松开
}
if(k3==0)//说明按下去了
{
delay(1000);//消抖
if(k3==0)
{
led3=~led3;//翻转
}
while(!k3);//按键松开
}
if(k4==0)//说明按下去了
{
delay(1000);//消抖
if(k4==0)
{
led4=~led4;//翻转
}
while(!k4);//按键松开
}
}
void main()
{
while(1)
{
keypros();
}
}
按一次1亮,再按一次灭。。。我自己写的检测管脚==0,然后去抖,等待释放什么的都写上了,不过效果是,当按着的时候有效果,放开就没效果了(恢复原来状态)。也就是让他亮,按着就亮,放开就灭了....囧...我需要的是1个按键分别让5个led成流水灯
你这个不对,按住按键不动后,程序高速跑起来,无法正确控制led开关,全部凭松开时间决定单片机运行到on位置或off位置