include "reg52.h"typedef unsigned int u16;typedef unsigned char u8;sbit led=P2^0;//把所要控制的led灯定义为p2.0这个口sbit k1=P2^1;sbit k2=P2^2;void delay(u16 i){while(i--);}//一个延时程序void
如:if(key1==1){while(key1==1); // 等待按键放开led1=~led1;} 使用四个独立按键控制四个LED灯亮灭的汇编程序怎么弄?单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极,P1.4-P1.7接四个开关K1-K4程序:O
当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循环,LED取反得到LED = 0,灯亮。*/ delay(500); /*此处延迟,保证连续两次按键
//这里想实现当某灯被点亮后,如果一定时间 //没有其他灯被点亮,就自动熄灭,while (1) { if (P1 != 255) { //有按键?yanshi(10); //延时消抖 if (P1 != 255) return P1;//返回键盘的状态 }
单片机独立键盘控制LED灯,程序问题
我还附带给你加了按键防抖,程序如下:include
给个四路:定意一个变量;if(按键1按下)变量为1;if(按键2按下)变量为2;if(变量==1){ 左移控制;} else if(变量==2){ 右移控制;}
K1 EQU P1.0K2 EQU P1.1ORG 0000HLJMP MAINORG 0030HMAIN: MOV A,#0FEH CLR 00H CLR 01HLOOP: JB K1,LOOP1 SETB 00H CLR 01H SJMP LOOPLOOP1: JB K2,LOOP2 SETB 01H
51单片机实现方法:按键控制标志位flag取反。然后把下面的代码放到循环里:U8 temp0 = 1。U8 temp1 = 0x80。U8 i = 0。if(flag == 1)。{。for(i=0;i<8;i++)。{。P1=temp0<
while(k2==0);led=(led>>1)|0x80;if(led==0xff)led=0x7f;} } } }
编程c51单片机:实现按下按键K1,LED左移动一位(其中一个LED灯灭),按下按键K2,LED右移动一位。
if(key1==0){ temp=0x55;while(!key1){ t=0;P1=temp;} } if(key2==0){ temp=0;while(!key2){ t=0;P1=temp;flag=1;} } } } void timer1() interrupt 3 { TH1=(65536-50000)/256;TL1=(65536-
* 实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。 */ /* 程序详细功能介绍: *做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上, *输出“0”时
include
if(i==8)P1=~0x01;//P1_0所接二极管亮,下面依次是P1_1到P1_7(电路连接时二极管一端连P1_0,一端连电阻再连5v,低电平的时候亮,因此加取反“~”)if(i==7)P1=~0x02;if(i==6)P1=~0x04;if(i==5)
/ void Main(void){ uchar i;while(1){ P1 = 0xfe;for(i=0; i<7; i++){ P1 = _crol_(P0, 1); //用于循环左移 Delay(15);} } } 这是一个51单片机的P1口小灯循环左移的例子,不懂的问我。应
void main(){ uchar led_data=0xfe;while(1){ P2=led_data;//默认第一位亮 if(key==0)Delay_ms(10);if(key==0){ while(!key);Delay_ms(500); //延时0.5s led_data=_crol_(led_data,1);//移位
定意一个变量;if(按键1按下)变量为1;if(按键2按下)变量为2;if(变量==1){ 左移控制;} else if(变量==2){ 右移控制;}
如何用C51单片机实现P0口接两个按键,P1口接8个LED灯。key1按下左移动1位点亮LED key2按下右移动1位点LED
51单片机用汇编语言编写流水灯程序,就是控制多个LED ,使其在特定时间间隔内,只有一个LED 发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序:;假设晶振12MHZ,P1控制8个LED低电平亮 ;
一个简单的开关控制一盏灯的c程序如下:include
void){ uchar i;while(1){ P1 = 0xfe;for(i=0; i<7; i++){ P1 = _crol_(P0, 1); //用于循环左移 Delay(15);} } } 这是一个51单片机的P1口小灯循环左移的例子,不懂的问我。应该能用
//流水灯#include "reg52.h"#define LED_PORT P3void delay(unsigned char time){ unsigned char i,j,k; for(i=0;i
1、可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。2、具体实现方法可以参考如下程序:
1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include
【程序】 #includereg51.h #define uchar unsigned char #define uint unsigned int uchar code Pattern_P0[]= { 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x
求用C语言编程实现51单片机的LED灯移动
思路:控制8个LED灯,使用上拉方式控制,引脚高电平灯灭,引脚低电平灯亮。这8个LED使用同一P口上的所有引脚,假设为P1口中的P1.0-P1.7共8个脚。软件中,只需要将这些灯使用一个for循环即可。代码 include
LEDdata=j;wr=1;wr=0; //送位选 delay(100); //延时 j=_cror_(j,1); //位选移位 cs1=cs2=0; //选中U2,U3,准备关显示 LEDdata=0xff;wr=1;wr=0; //送0xff,关显示 } } /*** 数码管显示子
51单片机的左移右移,首先在开始要调用"intrins.h"的文件包,这个文件包含_cror_(右移),_crol_(左移);然后通过for语句来控制;for(m=20;m>0;m--)for(n=20;n>0;n--)for(k=250;k>0;k--);理解这三句,
51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include
对控制LED口的寄存器进行位操作,按k1左移,按K2就是右移了。51单片机是对兼容英特尔8051指令系统的单片机的统称。51单片机广泛应用于家用电器、汽车、工业测控、通信设备中。因为51单片机的指令系统、内部结构相对简单,所以国内
4. 使用延时函数控制数码管显示的时间间隔。通过不断重复以上操作,可以实现数码管的循环左移效果。当需要停止循环左移时,可以加入相应的控制语句,例如按下停止按钮等。
51单片机如何控制LED数码管循环左移?
LED灯右移到最右边后向左移时是这样的:右移一位→第二个延时程序→第一个延时程序→右移右移一位→第二个延时程序→第一个延时程序,这样不断循环,循环到最左边,就开始了右移的程序。这样左移的延迟大一点的!
MAIN: MOV A,#11111110BLOOP: MOV R0,#7LEFTMOVE: MOV P1,A RL A ACALL DELAY DJNZ R0,LEFTMOVE;【R0等于0后,开始进行右移】 MOV R0,#7RIGHTMOVE: MOV P1,A RR A ACALL DE
开始学习单片机的同学们写注意了,在运行程序后,现象不正确的时候,不要首先就找软件的错误,我的经验是从源头开始找问题,首先你得确定你的平台是正确的,你说是按键没效果,先用万用表测试一下你的引脚的电平,是否被拉
K1 EQU P1.0K2 EQU P1.1ORG 0000HLJMP MAINORG 0030HMAIN: MOV A,#0FEH CLR 00H CLR 01HLOOP: JB K1,LOOP1 SETB 00H CLR 01H SJMP LOOPLOOP1: JB K2,LOOP2 SETB 01H
51单片机的左移右移,首先在开始要调用"intrins.h"的文件包,这个文件包含_cror_(右移),_crol_(左移);然后通过for语句来控制;for(m=20;m>0;m--)for(n=20;n>0;n--)for(k=250;k>0;k--);理解这三句,
// 对变量j 中的值按位取反后,从P1口输出 delay02s( ); // 延时0.2s j= j<<1; // 左移1位 } j=0x80; // 设置右移初始值j为0x80 for (i=0;i>1; // 右移1位 } } }
对控制LED口的寄存器进行位操作,按k1左移,按K2就是右移了。51单片机是对兼容英特尔8051指令系统的单片机的统称。51单片机广泛应用于家用电器、汽车、工业测控、通信设备中。因为51单片机的指令系统、内部结构相对简单,所以国内
如何实现51单片机的按键k1按下,LED流水灯向右移动,按键k2被按下,LED流水灯向左移动?
8个LED灯怎么可能显示出电子时钟! 8个数码管还差不多。C语言实现LED灯闪烁控制配套51单片机开发板。 #include //包含单片机寄存器的头文件 /****************************************函数功能:延时一段时间 *****************************************/ void delay(void) //两个void意思分别为无需返回值,没有参数传递。 { unsigned int i; //定义无符号整数,最大取值范围65535。 for(i=0;i<20000;i++) //做20000次空循环。 ; //什么也不做,等待一个机器周期。 } /******************************************************* 函数功能:主函数 (C语言规定必须有也只能有1个主函数)。 ********************************************************/void main(void) { while(1) //无限循环。 { P0=0xfe; //P1=1111 1110B, P0.0输出低电平。 delay(); //延时一段时间。 P0=0xff; //P1=1111 1111B, P0.0输出高电平。 delay(); //延时一段时间。 } } 单片机驱动LED灯的源程序: #include //头文件。 #define uint unsigned int #define uchar unsigned char sbit LED1=P1^7; //位定义。 void delay_ms(uint);//mS级带参数延时函数。 void main() { while(1) { LED1=0; delay_ms(1000); LED1=1; delay_ms(1000); } } void delay_ms(uint z) //延时子程序 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } 扩展资料: 单片机应用分类: 通用型: 这是按单片机(Microcontrollers)适用范围来区分的。例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。 总线型: 这是按单片机(Microcontrollers)是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接。 另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。 控制型: 这是按照单片机(Microcontrollers)大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型。 通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。 参考资料来源:百度百科-单片机
if语句就可以了,但是感觉你这样每次按下的按键个数不一样,可能会有点混乱。应该能实现的。自学就自己搞吧,别人给了复制粘贴就可以了,呵呵。依据你给的按键顺序重点在判断第三个按键
你这样用这么多的按键来控制灯的亮度有点麻烦了,还不如就用两个按键,一个是增加亮度,每按一次亮度增加一点,增加多少次后达到最亮。另一个按键是降低亮度的,每按一次降低一点,按相同的次数后灯就关掉了。这样操作起来比较方便,也利于写程序,更适合于操作,节省了按键,好处是很多的。
#include "reg52.h"typedef unsigned int u16; typedef unsigned char u8;sbit led=P2^0;//把所要控制的led灯定义为p2.0这个口sbit k1=P2^1;sbit k2=P2^2;void delay(u16 i){ while(i--); }//一个延时程序void main(){ if(k1==1) while(1) { led=1; delay(50000); //大约延时450ms led=0; if(k2==1) break; } led=0; }思路很简单,就是用检测的方法去扫描相应的按键是否被触发,然后执行相应的子程序。
没有具体的电路图,就只以P1口作为基本输驱动口进行说明。主程序需要一个delay函数进行led亮灭的延时。当然你首先要先进行P1口和开关按键的预定义,这个要看你板子的原理图。 void delay(int l) { int a,b; for(a=0;a<l;a++) { for(b=0;b<10000;b++); } } void main() { int m=0; //设置开关为P3.7和P3.8,低有效 while(1) { if(P3.7 ==0) { m = 0; } else if(P3.8 ==0) { m = 1; } if (m == 0) { P1.0=1; delay(10); P1.0=0; delay(10); P1.1=1; ...//以此类推到P1.7 } else if(m ==1) { P1.0=1; P1.1=1; delay(10); P1.0=0; P1.1=0; delay(10); P1.2 =1; P1.3 =1; delay(10); ...//同理以此类推即可 } } }
led应该是一个变量,是代表led灯 亮或者灭的一个变量。 当你按下开关后,s1==0,就执行 led=!led 这条语句。 led=!led 的意思就是取反的意思,即原来led灯亮的话 执行该条语句后就变成灭;原来灭的话 执行该条语句后 就变成亮。按键按下就打控制灯的io取反就可以了。如:if(key1==1){while(key1==1); // 等待按键放开led1=~led1;} 使用四个独立按键控制四个LED灯亮灭的汇编程序怎么弄? 单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极,P1.4-P1.7接四个开关K1-K4程序:ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR AORl A,#0F0HMOV P1,ASJMP START可以检测单个按键,也可以同时检测多个按键过程:开始--读P1口数据到A--A中的数据右移4次--A中的内容和F0H相或--A中的数据送到P1口--回到开始
LED=~LED; 取反的速度太快 按键按下 实际是led高频闪烁 按键松开后 跳出while(1)松手检测 然后在main的while(1)里面一直等待按键再次按下,同时led=1,也就是说是亮 因此 你的函数的功能基本上可以是 按键按下 led高频闪烁 按键松开 led常亮 所以你要改逻辑结构才行