1:设置一个变量zhidaoi,它可以从0循环到3 2:检测一个已取消缓冲的键。按“+1”3:当I值为每个值时,执行相应的模式。水量灯参考程序 #include #include #定义uchar无符号字符 Ucharj,温度;无效延迟(无符号整型
8个 led 接在P1口
P1 = 0;//8个灯亮 DELAY(); //延时 P1 = 255; //8个灯灭 DELAY(); //延时 以上循环30遍,即可。
include
}intmain(void){LED1_01=1;//打开LED灯点亮while(1){if(KEY0_01==0)//检测按键是否按下{Delay_1ms(10);//延时去抖动if(KEY0_01==0)//确定按键按下{LED1_01=~LED1_01;//取反LED灯[亮.灭]}while(KEY
用C语编写程序,其功能:控制8只LED灯同时闪烁点
用89S52单片机构件建一个彩灯控制系统,系统用P1口外接8个发光二极管,没有键按下时,8支彩灯每隔0.5s全亮全灭一次。按K1时,8支彩灯从左至右循环点亮。按K2时,8支彩灯从右至左循环点亮。按K3时,8支彩灯先右循环
按钮控制灯亮接线原理图如图11所示。在单片机的P1口的低4位按上按钮,在高4位接上发光二极管。当按下SB1时(P1.0口为“0”),LED1发亮(P1.4口为“0”)。同理,若分别按下SB2、SB3、SB4,则对应的端口P1.5、P
8盏灯从左到右依次被点亮,最后全亮;闭合第3个开关时,8盏灯从右到左依次被点亮,最后全亮个开关时,8盏灯从左到右依次被点亮,最后全亮;闭合第3个开关时,8盏灯从右到左依次被点亮,最后全亮
P1=0xfe; //给初始化值 换算成二进制是1111 1110 while(1){ delay(30000);//延时程序 P1<<=1; //左移一位 P1|=0x01;if(P1==0x7f) { delay(30000);P1=0xfe; //重新赋值 } } }
跪求 单片机彩灯控制四个状态 1:按下sb1键,八个LED灯全亮: 2:按下sb2键,八个LED灯闪亮
虽然编程51单片机。而且让每个LED灯都亮得非常好。这可太好了问题。这个技术应该有专门的负责人员来搞定。
二极管来表示二进制数)。硬件需要单片机、发光二极管、ad转化器(如TLC549)下面提供一个例子。/ 文件名 : TLC549.c 描述 : TLC549是一个新型的AD转换器,具有8位的分辨率,具有控制简单,体积小的优点。/ include
P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六个灯亮 delay
8个LED灯怎么可能显示出电子时钟! 8个数码管还差不多。
2. 连接电路:将89c51单片机与LED灯连接起来。将LED的正极连接到单片机的一个IO口,将LED的负极通过一个适当大小的电阻连接到单片机的地线。3. 编写程序:使用C语言编写程序,通过控制IO口的高低电平来控制LED灯的亮灭。以下
/*图片上的P3.3口不接,LED 正端接个470欧电阻到5V电源,LED负端接P3口*/ include"c51.h"include"stdio.h"define Key0 P1^0 define Key1 P1^2 define Key2 P1^3 define Key3 P1^4 define LED0
用C语言编写,单片机89C51控制,四个按键控制灯亮,用一个P3口控制8个LED,低电平点亮,要求有判断按键
void delay(uchar a){ uchar i,j;for(i=0;i
} } if(k2==0) { delay(10); if(k2==0) { while(k2==0); flag=2; } } if(k3==0) { delay(10); if(k3==0) { while(k3==0); flag=3;
i;while(1) { led=0xfe; for(i=0;i<8;i++) //左到右点亮 { P0=led; led=(led<<1)
delay();LED_IO8= 0;delay();} //开始灯全灭 void LED_dengmie(void){ LED_IO1 = 1;LED_IO2 = 1;LED_IO3 = 1;LED_IO4 = 1;LED_IO5 = 1;LED_IO6= 1;LED_IO7= 1;LED_IO8= 1;} main(){
P1口接8个LED灯,P3口接4个按键K1~K4,用于控制流水灯的四种效果,仿真图如下。
P1口接8个LED灯,P3口接4个按键K1~K4 ,用于控制流水灯的四种效果,仿真图如下。
用51单片机写程序,4个按键控制8个小灯切换四种灯光效果?
不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P1.1==0) light_water(); 然后:void light_water(){ num=1;for(a=0;a<8;
思路:循环控制常亮状态的值,将其从最高位循环到最低位。这个用于最后状态的常亮 在常亮循环中,控制不是常亮的其它所有位进行再次循环,逐渐从最低位亮灭循环到最高位 代码如下:include
89S51 单片机的P1 口接有 8个 LED,当某一端口输出为“0”时,相应的 LED 点亮,P3.2、P3.3、P3.4、P3.5 分别接有四个按钮 K1~K4,按下按钮时,相应引脚被接地。现要求编写可键控的流水灯程序,当 K1 按下
停止:TRx=0,至于快慢的控制你可以在中断函数里边写一个延时函数,然后按键3和4按下一次自增或自减1000(你可以取其他值),然后传递给延时函数。有不懂的地方随时回复我。希望我的回答能帮助到你。
P1口接8个LED灯,P3口接4个按键K1~K4,用于控制流水灯的四种效果,仿真图如下。
} } if(k2==0) { delay(10); if(k2==0) { while(k2==0); flag=2; } } if(k3==0) { delay(10); if(k3==0) { while(k3==0); flag=3;
你好,我用51单片机要实现4个按钮控制8盏流水灯,四个按钮分别是启动停止暂停继续
led=0xff;while(1) { if(k1==0) { delay(10); if(k1==0) { while(k1==0); flag=1; led=0xfe; } } if(k2==0) { delay(10); if(k2==0) {
个开关时,8盏灯从左到右依次被点亮,最后全亮;闭合第3个开关时,8盏灯从右到左依次被点亮,最后全亮个开关时,8盏灯从左到右依次被点亮,最后全亮;闭合第3个开关时,8盏灯从右到左依次被点亮,最后全亮个开关时,
P1口接8个LED灯,P3口接4个按键K1~K4,用于控制流水灯的四种效果,仿真图如下。
if(key ==0) {num++; } if(num==0){led1 =0;//亮,发光二极管负极接IO} //num是切换哪几个LED亮的或者哪几个LED灭的,完整的就不写了,1是太多,浪费时间,2是对你自己比较好。
要实物 还说仿真呢 硬件做好了吗 我做单片机的
void display();int b0=0x00, b1=0xc0,b2=0x30,b3=0x0c,b4=0x03;sbit S16 = P3^5; //接在P30口的按钮 sbit S15 = P3^4;sbit S14 = P3^6;sbit S13 = P3^7;//有按键控制时要加防抖动处理 void
单片机4个按键控制8个led灯,我编写的代码在keil上查不出问题,但无法达到我的要求,求帮助
要实物 还说仿真呢 硬件做好了吗 我做单片机的先说一下,若干天前,我为一个百度知友回答过这样的问题,要求和你的一样,我不知道你是否认识他。 第二,你的这个程序,错误处实在太多了,第一个错误,你的main函数里没有while(1)死循环,程序差不多跑一次就没了,第二个错误,你的按键问题,没有等待按键抬起。 总之来说,你的程序,写的实在错误太多了,让我在百度知道上给你指出,恐怕比较费劲。 给你参考一下我的程序,你自己修改一下看看。 以下是我回答其他知友的问题: http://zhidao.baidu.com/question/537203808?&oldq=1
P1口接8个LED灯,P3口接4个按键K1~K4,用于控制流水灯的四种效果,仿真图如下。
其实很简单的,随便使用一个定时/计数 器,使其工作在方式1(方便计算初值),然后写中断服务函数,使用_crol_()函数来反复循环做流水效果,然后在主函数最后写while(1),一直不停扫描键盘函数,然后键盘函数定义4个按键,开始:TRx=1,停止:TRx=0,至于快慢的控制你可以在中断函数里边写一个延时函数,然后按键3和4按下一次自增或自减1000(你可以取其他值),然后传递给延时函数。 有不懂的地方随时回复我。 希望我的回答能帮助到你。
嘿嘿,害人害倒底吧,全给你做好。就当我自娱自乐好了,这样的题本来你自己要做的。 #include #define uchar unsigned char #define uint unsigned int uchar j,k; sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; void delay(int ms) { uchar i; while(ms--) for(i=0;i<123;i++); } uchar code tab[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfe,0xfb,0xef,0x7f,0xfd,0xf7,0xdf,0x7f, }; void keyscan() { while(!key1) { delay(10); if(key1) k=1; } while(!key2) { delay(10); if(key2) k=2; } while(!key3) { delay(10); if(key3) k=3; } } void main() { while(1) { keyscan(); switch(k) { case 1: { for(j=0;j<8;j++) { keyscan(); if(k!=1) break; P1=tab[j]; delay(200); } };break; case 2: { for(j=0;j<8;j++) { keyscan(); if(k!=2) break; P1=tab[j+8]; delay(200); } };break; case 3: { for(j=0;j<8;j++) { keyscan(); if(k!=3) break; P1=tab[j+16]; delay(200); } };break; default: break; } } }
电路有问题啊,电源怎么能直接接到GPIO,这样大电流会损坏IC。P1口好像没有外部中断,那只有轮询了。这个就是按键检测嘛,网上一堆代码,so easy!
#include #include #define uchar unsigned char sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit key4=P1^3; uchar led=0xfe,led1=0x00; void delay(uchar a) { uchar i; while(a--)for(i=0;i<120;i++); } main() uchar keyval=0; { while(1) { if(key1==0); { while(key1==0); keyval=1; } if(key2=0); { while(key2==0); keyval=2; } if(key3==0); { while(key3==0); keyval=3; } if(key4==0); { while(key4==0); keyval=4; } switch(keyval) { case 1: P0=led1; led1=~led1; delay(100); break; case 2: P0=0xff; break; case 3: P0=led; led=_crol_(led,1); delay(100); break; case 4: P0=led; led=_cror_(led,1); delay(100); break; } } }
个开关时,8盏灯从左到右依次被点亮,最后全亮;闭合第3个开关时,8盏灯从右到左依次被点亮,最后全亮个开关时,8盏灯从左到右依次被点亮,最后全亮;闭合第3个开关时,8盏灯从右到左依次被点亮,最后全亮个开关时,8盏灯从左到右依次被点亮,最后全亮;闭合第3个开关时,8盏灯从右到左依次被点亮,最后全亮个开关时,8盏灯从左到右依次被点亮,最后全亮;闭合第3个开关时,8盏灯从右到左依次被点亮,最后全亮
首先,你的电路图没有给出来,管脚是什么? 其次,我建议还是自己尝试写一写,这个不难,我给你个思路 首先定义变量类似于P1_2 = P1^2这种,先把这八个管脚全部定义好,之后给个for循环,让P1(假设的你LED灯连接的是P1口)口的P1^0~P1^7相关标志位依次等于0或者1(0还是1需要看你在LED等上给的是高电位亮还是低电位亮),之后再给个for循环,五次的循环,全部P1口置为1(假设高电平LED亮),之后设置P1口全为1,再让P1口的相关标志位置为0,再置为0的时候可以加个延时
给你个没有按键的,按键程序自己加上就行了 #include void main() { unsigned int i = 0; //定义循环变量i,用于软件延时 unsigned char cnt = 0; //定义计数变量cnt,用于移位控制 while (1) //主循环,程序无限循环执行该循环体语句 { P0 = ~(0x01 << cnt); //P0等于1左移cnt位,控制8个LED for (i=0; i<20000; i++); //软件延时 cnt++; //移位计数变量自加1 if (cnt >= 8) //移位计数超过7后,再重新从0开始 { cnt = 0; } } }