没有电路图,没法写程序。
比如,按键在P0口与在P3口程序就不一样;
又比如,扫描的键盘与直接连接在Pn口的又不一样。
没有图实在是没法写程序呃
假定CPU是用51系列的单片机;
假定键盘直接连接在Pn口,从Pn0~Pn7分别对应键1~键7;
假设LED直接由Pm口驱动,从Pm0~Pm3分别对应Led1~Led4;
在这个前提下,以上的问题可以编程如下:
#define KEY1 01h ;定义键1
#define KEY2 02h ;定义键2
#define KEY3 04h ;定义键3
#define KEY4 08h ;定义键4
#define KEY5 10h ;定义键5
#define KEY6 20h ;定义键6
#define KEY7 40h ;定义键7
#define KEY8 80h ;定义键8
#define LED1 Pm0 ;定义灯1
#define LED2 Pm1 ;定义灯2
#define LED3 Pm2 ;定义灯3
#define LED4 Pm3 ;定义灯4
#define LED_ON 1 ;定义亮灯 *** 作
#define LED_OFF 0 ;定义灭灯 *** 作
;延迟4秒子程序
#define Timer4s 1234h ;延迟4秒的参数自己调整
Dly4s: push acc;
mov dptr, #Timer4s;
Dly_2: mov a,dpl;
Dly_1: mov dpl,a;
dec a;
jnz a,Dly_1;
mov dpl,a;
mov a,dph;
dec a;
mov dph,a;
jnz a,Dly_2;
pop acc;
ret;
; 主程序
main: mov a, Pn;
je a,#KEY1, K1_Pressed;
je a,#KEY2, K2_Pressed;
je a,#KEY3, K3_Pressed;
je a,#KEY4, K4_Pressed;
je a,#KEY5, K5_Pressed;
je a,#KEY6, K6_Pressed;
je a,#KEY7, K7_Pressed;
je a,#KEY8, K8_Pressed;
ljmp main;
K1_Pressed:
mov LED1, LED_ON;
mov LED2, LED_ON;
call Dly4s;
mov LED1, LED_OFF;
mov LED2, LED_OFF;
ljmp main;
K2_Pressed:
mov LED3, LED_ON;
mov LED4, LED_ON;
call Dly4s;
mov LED3, LED_OFF;
mov LED4, LED_OFF;
ljmp main;
K3_Pressed:
mov LED1, LED_ON;
call Dly4s;
mov LED1, LED_OFF;
mov LED2, LED_ON;
call Dly4s;
mov LED2, LED_OFF;
ljmp main;
K4_Pressed:
mov LED3, LED_ON;
call Dly4s;
mov LED3, LED_OFF;
mov LED4, LED_ON;
call Dly4s;
mov LED4, LED_OFF;
ljmp main;
K5_Pressed:
mov LED1, LED_ON;
mov LED2, LED_ON;
call Dly4s;
mov LED1, LED_OFF;
mov LED2, LED_OFF;
ljmp main;
K6_Pressed:
mov LED3, LED_ON;
mov LED4, LED_ON;
call Dly4s;
mov LED3, LED_OFF;
mov LED4, LED_OFF;
ljmp main;
K7_Pressed:
mov LED1, LED_ON;
call Dly4s;
mov LED1, LED_OFF;
mov LED2, LED_ON;
call Dly4s;
mov LED2, LED_OFF;
ljmp main;
K8_Pressed:
mov LED3, LED_ON;
call Dly4s;
mov LED3, LED_OFF;
mov LED4, LED_ON;
call Dly4s;
mov LED4, LED_OFF;
ljmp main;
求教如何用单片机控制LED灯的亮度
控制ked亮度不难,你硬件直接连连接好led灯,串个限流电阻。如果引脚一直给电平那么灯肯定最亮,那你如果改变给灯的时间灯就能调亮度了,如你用定时器或者延时多少个时间引脚电平取反一次。例如每间隔1毫秒电平取反一次就可以改变亮度。那你在用个变量值来给这个时间赋值。就能调亮度了啊,比如你接个电位器电位器值改变你程序你就让定时器时间也相应跟着变动
如何用单片机控制LED灯的亮度,不要PWM波的程序程序名称:一只按键控制两只LED灯十种亮度显示
编程人:xx
备注:此程序简单
#include<stc12c2052adh>
it d1=P1^7;、、 定义LED灯1
it d2=P1^6; 定义LED灯2
it key1=P3^0; 定义按键灯
void delay(unsigned int a){ 延时程序
unsigned int i;
while( a-- != 0){
for(i = 0; i < 100; i++);
}
}
void main(){
while(1){
unsigned int a,b,c,d;
if(key1==0)d++; 按键判断
switch(d) 按键信息比较
{
case 1: b=9;;a=1;break;
case 2: b=8;;a=2;break;
case 3: b=7;;a=3;break;
case 4: b=6;;a=4;break;
case 5: b=5;;a=5;break;
case 6: b=4;;a=6;break;
case 7: b=3;;a=7;break;
case 8: b=2;;a=8;break;
case 9: b=1;;a=9;break;
}
while(key1==0); 判判断按键是否松开
if(d==10)d=0; 按键9种亮度判断,是否是第9种,如果是,则d=0
for(c=0;c<2;c++){ 亮度模式循环显示
d1=0;
d2=1;
delay(a);
d1=1;
d2=0;
delay(b);
}
}
}
、20101005 20;06修改
此程序是我写的简单程序,已做过实验,并且通过!
如何用PIC单片机的PWM功能来控制LED的亮度?用pic的脉宽调制功能就可以了,只需要给单片机不同的占空比的值,单片机就可以产生不同占空比的信号,将这个信号用三极管放大驱动LED就行了。还有什么问题可以给我留言
第一,要理解中断在这里的作用是固定的“一小段”时间进入一次。 第二,PWM_ON在程序中的作用很大,它会由0------>CYCLE------>0并且一直循环下去。可以把它看成一个有规律的变化的量。 第三,每进入中断一次count++,满足条件count==PWM_ON或coun
如何用单片机点亮LED灯接好单片机的硬件电路,然后编写程序,再然后烧写程序,然后就可以程序了,没问题的话就可以按你的要求点亮了
如何利用AT89S51单片机控制一个LED灯的亮度# include<reg51h>
void delay(unsigned int j)
{
unsigned int i;
for (;j>0;j--)
{
for(i=0;i<1000;i++)
;
}
}
void main()
{
while(1)
{
P1^0=0;
delay(100);
P1^0=1;
delay(100);具体数值根据你单片机晶振频率而定
}
}
原理是PWM波占空比不同,其功率亦不同,只要PWM频率很大,人眼分辨不出其闪烁,就可通过控制占空比(高电平时间和周期之比)的大小来控制其亮度。
怎样用单片机控制大功率led灯珠亮度?才用PWM调制
LED灯不好控制亮度,在电流变化较大的范围中,亮度变化不明显
如果是电灯泡还可以的
如何用arduino声音控制器 控制LED灯的亮度 求!控制LED灯的亮度 这个其实有难度的, 先练习声音控制开关灯,成功后再考虑控制亮度
LED亮度是通过的电流决定的,控制亮度其实就是控制电流这一点至今没办法做到便宜又简单
当然,也有种简易的办法是PWM控制亮关比,优点是容易,缺点是闪烁
还有就是目前灯亮度有几种控制方式,连续变化的贵,高中低分档位的便宜些
如何用单片机控制16盏流水灯?void main()
{
unsigned int temp,i;
temp=1;
while(1)
{
P1=temp&0x00ff; 取temp低8位
P2=(temp&0xff00)>>8; 取temp高8位
for(i=0;i<65535;i++)
{} 延时
if(temp!=0x8000)
temp<<=1; temp左移一位
else temp=1;
}
}
如何用单片机控制马达如果不需要控制转速,一个三极管一个继电器就可以控制马达了。
#include<reg52h>
sbit key1=P2^4;
sbit D1=P1^0;
void delay(unsigned char y)
{
unsigned char j,k;
for(j=y;j>0;j--)
for(k=0;k<57;k--);
}
void keyo()
{
if(key1==0)
{
delay(5);
if(key1==0)
{
D1=0;
}
}
}
void keyc()
{
if(key1==0)
{
delay(5);
if(key1==0)
{
D1=1;
}
}
}
void main()
{
while(1)
{
keyo();
delay(10);
key1=1;
delay(10);
keyc();
delay(10);
}
}
最简单的程序了,由于延时程序的问题,不保证你下载到板子上后成功率100%一次性控制成功,自己摸索着改一下延时的时常,效果会好很多。 程序已经测试过,没有问题。
LZ 要是 懂汇编的话,就能知道这是为什么了。
事实上,LZ 的程序是个单次系统,结果应该如同LZ 所说的一样,一个回合后就结束了。
可是,实际使用中,产品都是循环系统,不做单次系统,而很多新手在编程序的时候,也会经常遗漏循环语句,导致循环系统变成了单次系统。于是软件制作方(如KEIL)就在软件上增加了一个功能,编译的时候,将整个程序的外沿,套上一个死循环,保证不出现单次系统。
LZ可以通过查看编译时的 反汇编窗口,里面的汇编程序中,主函数是多了一个循环语句的。
#include "reg52h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2^0;//把所要控制的led灯定义为p20这个口
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;
}
思路很简单,就是用检测的方法去扫描相应的按键是否被触发,然后执行相应的子程序。
以上就是关于用回汇编语言编程8个按键控制4个LED灯全部的内容,包括:用回汇编语言编程8个按键控制4个LED灯、求教如何用单片机控制LED灯的亮度、最简单c5l独立按键控制led灯亮灭程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)