关于单片机C51独立按键和程序执行顺序问题

作者&投稿:善泰 (若有异议请与网页底部的电邮联系)
关于51单片机的问题,独立键盘和矩阵键盘怎么同时使用?懂的来帮帮忙啊!~

你是不是按下下方的四个按键也会让1,2,3,4灯亮起来?
你可以不要定义在同一个引脚上连起来一个引脚的四个按键,你试试控制8个单片机不同引脚上的按键编程一下试一试。
程序上,你的独立按键程序和矩阵键盘程序要分开,独立键盘的程序高低四位判断是相反的,这个一定要注意。你可以让独立按键在那里扫描,矩阵键盘用标志位扫描一下,一旦标志位置位才扫描矩阵,就差不多了。
最好事前检查一下你电路连接方式,分析一下,看不见你的原理图,不太好说,先试试上面的方法吧。
一孔之见,希望对你有帮助吧。

/*简单方案 按一次按键后切换工作状态,松开不会返回*/
#include "xxx.h"

#define SKEY1 1
#define SKEY2 2
#define SKEY1 3
#define NONEKEY 0
unsigned char current_mode = SKEY1;

unsigned char getkey(void)
{
//获取按键后返回 SKEY1、SKEY2、SKEY3
return NONE;
}


void key1(void)
{
//全亮
}

void key2(void)
{
//流水
}

void key3(void)
{
//60S
}

void main(void)
{
//初始化
uchar tmpkey = 0;
while(1)
{
if(SKEY1 == current_mode)key1();
if(SKEY2 == current_mode)key2();
if(SKEY3 == current_mode)key3();
if(tmpkey = getkey)
current_mode = tmpkey;//有按键则更新当前任务
}
}

根据你提供的函数,表明你的板子LED是共阳极连接的,即LED阳极接到一起,每个LED阴极接IO口,这样当IO口为低电平时灯就点亮了。所以,你的程序一开始是亮灯而不是灭灯。
sbit BY1=P3^4是一个位定义,意思是把单片机的P3.4口定义为BY1,以后对BY1进行操作就是对P3.4进行操作。

P1 = 0x00;,是亮,还是灭? 要取决于你的电路。

一般来说,输出 0 ,是亮。

这个p1=0x00就是全亮。00000000.低电平有效
将P3口第四位赋给BY1


C51与AVR有什么区别?
51与avr都是8位的单片机,但是avr是精简指令集的单片机,而且是单周期指令,并且在操作当前指令的同时取出下一条将要执行的指令,所以效率相比51高很多,我用c语言,其实也没有多大差别,但不可以完全移植。(就是下载的时候需要配置熔丝位,这对于新手来说比较担心,因为要是熔丝位配置不当将导致avr...

c51单片机的输入电流是多少
51每个IO不能超过20mA,总体不超过100mA,52P0最大26mA,其他口最大15mA,单片机是一个很大的类,这个类下面有很多子类,C51是单片机其中一个子集,其它的子类还有PIC、AVR、Cortex、STM等。

c51单片机要学成什么样才能算学好了,并且可以接触其他单片机
以我的经验,搞51单片机开发是一项系统的综合性工程,学习永无止境。那么搞51单片机的内功是什么?我认为就是对各种模拟电路、数字电路、电源电路、控制电路、传感电路、数据采集处理电路、通信电路甚至抗干扰电路、防雷击电路等等都烂熟于胸,应用得心应手。同时对编程能力、编程技巧、编程算法、编程语言都...

单片机C51执行一条简单语句要多久?
看是哪种单片机,有快有慢 时钟周期T又称为状态周期,是时序中最小的时间单位。具体计算就是1\/fosc。也就是说如果晶振为1MHz,那么时钟周期就为1us;6MHz的话,就是1\/6us。EDA中国门户网站0Y+MZ8iuB;xt2R3f4V q ` M5l,H t0 2、机器周期 &utF&G Q%`0pN0 EDA中国门户网站 W:E vs...

c51单片机中定时器工作方式
三、方式2 方式2为自动重装初值的8位计数方式。计数个数与计数初值的关系为:工作方式2特别适合于用作较精确的脉冲信号发生器。四、方式3 方式3只适用于定时\/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。工作方式3将T0分成为两个独立的8位计数器TL0和TH0 。

C51单片机程序
16位计数器 TMOD=0x01 1 0 方式2 自动重装8位计数器 TMOD=0x02 1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器 TMOD=0x03 PCON = 0x00;PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器 WDCON = 0x00;清狗 SCON = 0x50;SCON1 = 0x40;串口控制寄存器 ...

单片机的sbit WR?
sbit是C51扩展的变量类型,是定义特殊功能寄存器的位变量。典型应用是:sbit P0_1=P0^1;\/\/即定义P0_1为P0口的第2位

单片机原理及C51应用内容简介
书中不仅深入讲解了单片机的基本原理,还特别融入了C51编程语言的学习,将理论知识与实践紧密结合。作者特别贴心地为每个理论概念提供了C语言和汇编语言的实例解析,使学生能够从两个不同的角度理解和掌握知识。《单片机原理及C51应用》的特点在于,它不仅注重理论的深度,更注重实践的广度。书中的众多典型...

C51单片机可以定义多大的变量?
不同单片机不同,只要不超过最大存储空间的变量就ok 单片机上型号如: STC 89 C 5 2 RC 40 C DIP STC :公司名 89 :89系列 C :内部coms器件 52 :52系列,2*4k=8k 为内程序存储空间大小(决定定义总的变量程序的大小)40 :晶振最大频率 C :商业的 DIP :...

求单片机(c51)外部中断实验的c语言代码或者思路,要求在补充
include<reg51.h>#define uchar unsigned charvoid delay(void){uchar i,j;for(i=0;i<200;i++)for(j=0;j<120;j++);}void ext0() interrupt 0{uchar i;for(i=0;i<8;i++) { P2=0x00; delay(); P2=0xff; delay(); }}main(){uchar i;EX0=1;IT0=1;EA...

贾汪区13434105425: 关于单片机C51独立按键和程序执行顺序问题 -
丰冠妇炎: 根据你提供的函数,表明你的板子LED是共阳极连接的,即LED阳极接到一起,每个LED阴极接IO口,这样当IO口为低电平时灯就点亮了.所以,你的程序一开始是亮灯而不是灭灯.sbit BY1=P3^4是一个位定义,意思是把单片机的P3.4口定义为BY1,以后对BY1进行操作就是对P3.4进行操作.

贾汪区13434105425: 请问在C51中如何用一个独立按键控制从头执行主程序?类似于复位按键?用外部中断可以吗?能否提供一个 -
丰冠妇炎: 想实现这个功能其实很简单 首先在程序的开头加入一句定义,sfr SAP = 0xe7; SAP 是名称,可以随意改写 之后在外部中断或程序内添加一个按键检测的语句 例如 if(K1==0)//如果按键被按下 { YS(20);//延时去抖 if(K1==0)//如果是有效按键触发 ...

贾汪区13434105425: c51单片机编程:如下图通过三个独立按钮控制灯的亮灭 -
丰冠妇炎: 使用外部中断,如果是51单片机,使用外部中断,这三个键都接到中断上,外部中断引脚是P3.2,按键按下时低电平传入外部中断,这三个按键再分别接三个引脚,比方说P2.0,P2.1,P2.2,按键消抖会吧.在中断内部判断P2.0/P2.1/P2.2是否是低电平,低电平就把预设值取反,就形成了按一下亮,再按一下灭的效果.int a=1,b=1,c=1; P1.0=a; P1.1=b; P1.2=c;//这行放在中断外面 P2.0==0?a=!a; P2.1==0?b=!b; P2.2==0?c=!c;

贾汪区13434105425: C51单片机 单个按键 短按抬起和长按两功能程序怎么写 -
丰冠妇炎: 按键按下后启动定时器!在2个定时器中断内分别控制两个LED灯的开关!

贾汪区13434105425: 51单片机独立按键部分编程问题 -
丰冠妇炎: 你好:程序是这么运行的: 先在心中想象独立按键的结构,没按下时,P3外接上拉电阻,所以输入总是1,按键按下时,倒地,对应按键的IO输入为0. 然后,先置IO为输入,没按下时读出全是1,0xff,当有按键按下时,读入为0了,所以用if(...

贾汪区13434105425: 51单片机两程序独立按键切换连接程序怎么写? -
丰冠妇炎: 两段程序还是要合并成一个主程序的,只是分开成两段而已. sbit ins1=独立按键所在I/O脚; bit keyab=0; //区分执行A,B程序的标志位,=0,执行A段,=1执行B段 main() { ........... while(1) //while前的程序照常写 { if(ins1==0) { keyab=!keyab; while(ins1==0); } if(keyab==1) { A段程序写在这里 } else { B段程序写在这里 } } } 这样写后,原来A、B程度中的while(1)就不能再写了.而是将while(1)以下程序写到这里.

贾汪区13434105425: C51单片机两个独立按键一个为+1,一个为 - 1 -
丰冠妇炎: #include <reg51.h> sbit key=p1^0; sbit out=p1^1; voia main(void) { bit bd; while(1) { if(!key&&!bd) { bd=1; out=~out; } else if(key)bd=0; } }

贾汪区13434105425: 单片机的独立按键 -
丰冠妇炎: 51单片机接按键,按键一端接地,另一端与I/O引脚相连,按键按下为低电平,未按下为高电平. 思路正确,如果用P0口需要加上拉电阻(10k),其他端口可以 不加 上拉电阻, 现在的 STC 10、11、12、15系列单片机 都可以 不加 上拉电阻. 编程 时 只要用 检测 高 低 电平 来判断是否 有 按键 按下 就可以了.

贾汪区13434105425: c51单片机按键 -
丰冠妇炎: 1.设置一个状态变量,如flag,定义flag=0为开状态,flag=1为关状态.2.因为是按键(不是开关),所以实际上单片机读取的应该是脉冲形式的输入.设按键接单片机P01引脚,故可采用以下程序实现按键扫描 if(P01==0)//按下按键,进入下降沿 ...

贾汪区13434105425: 51单片机c语音独立按键程序 -
丰冠妇炎: 一个独立按键程序,没有必要写成子程序,更没有必要写得这么复杂.其实很简单的.如下程序:#include typedef unsigned int u16; sbit k1=P1^0; sbit led=P1^1; void delay(u16 i) { while(i--); } void main() { led=0; while(1) { if(k1==0) { delay(700); if(k1==0) { led=~led; } while(k1==0); //等待按键释放 } } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网