
1灭)。编译器keil
c代码如下:
#include<reg51h>
#include<intrinsh>
//包含循环左移函数
_cro_l头文件
unsigned
char
tmp;
//中间变量
//////////////////////////////////////////////////////////////////////////////////////////////////
//
延时子程序
////////////////////////////////////////////////////////////////////////////////////////////////
void
delay(unsigned
int
cnt)
{
while(--cnt);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//
主函数
////////////////////////////////////////////////////////////////////////////////////////////////
main()
{
while(1)
//外层循环
{
tmp
=
0xfe;
p1
=
tmp;
while(1)
//内层循环,执行1、3、5、7亮灯循环
{
delay(30000);
//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定
tmp
=
_crol_(tmp,2);
p1
=
tmp;
if(tmp
==
0xbf)
//判断是否已经点亮到第7灯。是,则退出进入2、4、6、8循环
{
break;
}
}
tmp
=
0xfd;
p1
=
tmp;
while(1)
//内层循环,执行2、4、6、8亮灯循环
{
delay(30000);
//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定
tmp
=
_crol_(tmp,2);
p1
=
tmp;
if(tmp
==
0x7f)
//判断是否已经点亮到第8灯。是,则退出进入1、3、5、7循环
{
break;
}
}
}
}
1、自动归零,就是让灯全部不亮回到全灭的状态;
2、手动增加----每按一下亮一个灯,你要几个亮就按几下;
3、满足你的条件后(比如你说的,先亮3个然后自动累加)------先讲拨码开关切换到“手动”,是按钮生效,用归零按钮归零,然后用手动按钮3次亮3个灯!然后将拨码开关切换到“自动”,灯就会根据时钟间隔自动累加亮起来!
#include "REG52H"
//控制引脚定义
sbit LED1 = PXX; //P00-P37任意引脚
sbit LED12 = PXX;
//宏定义灯亮灯灭
#define LED1_ON( ) LED1 =0 //阳极接电源
#define LED1_OFF( ) LED1 =1 //阳极接电源
#define LED12_ON( ) LED12 =0 //阳极接电源
#define LED12_OFF( ) LED12 =1 //阳极接电源
void Init_GPIO( )//端口引脚初始化,关闭所有指示灯
{
LED1_OFF( ) ;
LED12_OFF( ) ;
}
void Delay_ms( u16 dat ) //延时函数
{
u16 i, j;
for(i = dat; i>0; i--)
{
for (j=300; j>0; j--);
}
}
int main( ) //主函数
{
Init_GPIO( );//引脚初始化
while(1) //大循环
{
LED1_ON( );//点亮第一个LED
LED2_OFF( );
LED12_OFF( );
Delay_ms(1000);//延时 参数自己可以根据晶振频率自己调节
LED1_OFF( ); //点亮第二个LED
LED2_ON( );
LED3_OFF( );
LED12_OFF( );
Delay_ms(1000);
//按照上面修改;
LED1_OFF( );//点亮第十二个LED
LED2_OFF );
LED3_OFF( );
LED12_ON( );
Delay_ms(1000);
}
}
我写的这个程序应该可以,按一下灯亮,再按一下灯灭
#include
"REG52H"
sbit
LED1_01
=
P1^1;
//LED灯
sbit
KEY0_01
=
P1^2;
//按键
void
Delay_1ms(unsigned
int
Time)
{
unsigned
int
x,
y;
for(x
=
Time;
x
>
0;
x--)
for(y
=
120;
y
>
0;
y--);
}
int
main(void)
{
LED1_01
=
1;
//打开LED灯点亮
while(1)
{
if(KEY0_01
==
0)
//检测按键是否按下
{
Delay_1ms(10);
//延时去抖动
if(KEY0_01
==
0)
//确定按键按下
{
LED1_01
=
~
LED1_01;
//取反LED灯
[
亮
灭
]
}
while(KEY0_01
==
0);
//检测松手
}
}
}
你的图里有A/D转换器
AD转换函数ADC_DISC
#include
<REGX51H>
#include"defh"
#include"libh"
sbit
adc_cs=P1^0;
sbit
adc_rd=P1^1;
sbit
adc_wr=P1^2;
/ADC0804启动转换函数/
INT8U
start_ad()
{
INT8U
temp;
adc_cs=0;
adc_wr=1;
delay(1);
adc_wr=0;
delay(1);
adc_wr=1;
delay(1);
//启动AD
adc_rd=1;
delay(1);
adc_rd=0;
delay(1);
temp=P2;
delay(1);
adc_rd=1;
delay(1);
//读取数据
return
temp;
}
用这个程序。
#include<reg51h>
sbit s1=P1^0;
sbit s2=P1^1;
sbit led1=P0^0;
sbit led2=P0^1;
void delay(int a)
{
unsigned char i;
while(a--)for(i=0;i<120;i++);
}
main()
{
while(1)
{
while(s1==0)
{
led1=0;led2=1;delay(100);
led1=1;led2=0;delay(100);
}
while(s2==0)
{
led1=0;led2=0;delay(50);
led1=1;led2=1;delay(50);
}
}
}
我给你写个参考程序,看看程序符不符合你的要求,程序如下:
#include "REG52H"
// LED灯端口定义
sbit GPIO_Exio1 = P0^0;
sbit GPIO_Exio2 = P0^1;
sbit GPIO_Exio3 = P0^2;
sbit GPIO_Exio4 = P0^3;
// 按键输入端口
sbit KEY1_Exitm = P1^0;
sbit KEY2_Exitm = P1^1;
sbit KEY3_Exitm = P1^2;
sbit KEY4_Exitm = P1^3;
/
延时1ms
/
void Delay_1ms(unsigned int Cnt)
{
unsigned int x, y;
for(x = Cnt; x > 0; x--)
for(y = 120; y > 0; y--);
}
/
按键扫描子函数
/
void KEY_ScanExtio(void)
{
// 判断K1 、K2其中一个按键按下
if((KEY1_Exitm == 0) || (KEY2_Exitm == 0))
{
Delay_1ms(5);
if((KEY1_Exitm == 0) || (KEY2_Exitm == 0))
{
// 按键按下点亮LED
GPIO_Exio1 = 0;
GPIO_Exio2 = 0;
GPIO_Exio3 = 0;
GPIO_Exio4 = 0;
}
while((KEY1_Exitm == 0) || (KEY2_Exitm == 0)); // 按键松手检测
// 按键松手后LED灭
GPIO_Exio1 = 1;
GPIO_Exio2 = 1;
GPIO_Exio3 = 1;
GPIO_Exio4 = 1;
}
// 判断K3 、K4其中一个按键按下
if((KEY3_Exitm == 0) || (KEY4_Exitm == 0))
{
Delay_1ms(5);
if((KEY3_Exitm == 0) || (KEY4_Exitm == 0))
{
}
while((KEY3_Exitm == 0) || (KEY4_Exitm == 0)); // 按键松手检测
// 按键松手后取反LED
GPIO_Exio1 = ~GPIO_Exio1;
GPIO_Exio2 = ~GPIO_Exio2;
GPIO_Exio3 = ~GPIO_Exio3;
GPIO_Exio4 = ~GPIO_Exio4;
}
}
/
主函数
/
int main(void)
{
// 初始化IO
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
while(1)
{
KEY_ScanExtio();
}
}
以上就是关于用C语言编写按键控制流水灯的程序全部的内容,包括:用C语言编写按键控制流水灯的程序、让24个led灯依次点亮的程序,有大神会写吗、用C51单片机控制12个LED流水灯的C语言程序怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)