导航:首页 > 编程语言 > 51单片机键盘编程

51单片机键盘编程

发布时间:2022-06-02 12:13:44

❶ Keil编程:51单片机键盘控制LED

刚开始 输出0X55 或0xAA即可
然后判断按键是否按下
单灯流水 for(i=0;i<8;i++)
{ P1=0x01>>i;delayms(200);}
双灯流水
for(i=0;i<8;i+=2)
{ P1=0x03>>i;delayms(500);}
呼吸灯不知怎样呼吸,假如一个灯渐亮渐暗程序如下:
for(i=0;i<100;i++)
{ LED=0;delay100us(i);LED=1;delay100us(100-i);}
假设LED=0是点亮,那么上面就逐渐变亮过程
一亮一灭是10ms 250次就是2·5S
逐渐变暗过程和上面一样,只不过把LED=0 LED=1相互颠倒一下就是了

❷ 51单片机键盘编程 小弟一点也不懂,好心的大侠帮个忙!

JNZ K1,K11
JNZ K2 ,K22
JNZ K3,K33
JNZ K4,K44
K11: SETB P1.0
;延时一下
clr p1.0
其它的你就自己编了就是输入几个电平就是了

❸ 关于C51单片机 按键 编程的问题

#include<reg51.h>
uchar key_scan(); //按键扫描子程序
void delay10ms(); //延时程序
uchar key_free(); //等待按键释放程序
void key_deal();
sysem_initial(); //初始化程序
void main()
{
sysem_initial();
while(1)
{
key_scan();
uchar key_free();
key_deal();
}
}
void sysem_initial()
{
PCON=0x00;
SCON=0x18; //选择串行工作方式0
ES=0; //禁止串行口中断
}
uchar key_scan()
{
unsigned char key,Rankcode;
int i,j;
SBUF=0x00; //使扫描键盘的74LS164输出为00H,所有列线低电平
while(TI!=1); //串行输出完否
TI=0; //清零
P1=0x03; //所有行线为高电平
if(P1&0x03!=1) //如果有键按下
{
delay10ms();
for(i=0;i<8;i++)
{
if(P1&0x03!=1) //确实有键按下
{
Rankcode=0xFE; //扫描第一列
SBUF=Rankcode; //输出列值
while(TI!=1);
TI=0;
if(P1&0x03==0x01) //如果第一行有键闭合
{
j=0;
}
else if(P1&0x03==0x02) //如果第二行有键闭合
{
j=1;
}
key=j*8+i;
}
if(j==0||j==1) //扫描按键
break; //退出
Rankcode=(Rankcode<<1)|0x01; //否则,开始扫描下一列
}
}
return(key); //返回键值
}
uchar key_free()
{
key=key_scan();
SBUF=0x00;
P1=0x03;
while(TI!=1);
TI=0;
while(P1&0x03!=0x03); //如果仍有键按下,等待按键释放
return(key);
}
void delay10ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<120;j++);//你的问题出在这里{}之间需要;,可以不要直接加;
}
//还有你上面所有等待的while() 后面都需要;这才是空等待,否则是带后面的语句指令一起执行

❹ 以51单片机为核心,设计一个矩阵式键盘程序,在开发板上实现0-F的数码管数字显示,按键需要考虑消抖

摘要 您好,代码如下

❺ 51单片机的4*4键盘输入的编程

呵呵,自己写的,可以根据你的引脚排布自己做适当修改,希望对你有帮助
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code num[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint z);
main()
{
while(1)
{
P1=0xfe;
if(P1==0xee||P1==0xde||P1==0xbe||P1==0x7e)
delay(5);
if(P1==0xee||P1==0xde||P1==0xbe||P1==0x7e)
{
switch(P1)
{
case 0xee: P0=num[1]; break;
case 0xde: P0=num[2] ;break;
case 0xbe: P0= num[3];break;
case 0x7e: P0=num[4] ;break;
}
}
P1=0xfd;
if(P1==0xed||P1==0xdd||P1==0xbd||P1==0x7d)
delay(5);
if(P1==0xed||P1==0xdd||P1==0xbd||P1==0x7d)
{
switch(P1)
{
case 0xed: P0=num[5]; break;
case 0xdd: P0=num[6] ;break;
case 0xbd: P0= num[7];break;
case 0x7d: P0=num[8] ;break;
}
}
P1=0xfb;
if(P1==0xeb||P1==0xdb||P1==0xbb||P1==0x7b)
delay(5);
if(P1==0xeb||P1==0xdb||P1==0xbb||P1==0x7b)
{
switch(P1)
{
case 0xeb: P0=num[9]; break;
case 0xdb: P0=num[10] ;break;
case 0xbb: P0= num[11];break;
case 0x7b: P0=num[12] ;break;
}
}
P1=0xf7;
if(P1==0xe7||P1==0xd7||P1==0xb7||P1==0x77)
delay(5);
if(P1==0xe7||P1==0xd7||P1==0xb7||P1==0x77)
{
switch(P1)
{
case 0xe7: P0=num[13]; break;
case 0xd7: P0=num[14] ;break;
case 0xb7: P0= num[15];break;
case 0x77: P0=num[0] ;break;
}
}

}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

❻ 简单的51单片机键盘C程序

A|=B;
等价于
A=A|B;
是先进行或运算,再把运算结果赋给A,之后的A已经不是原来的A了。
第一个键值判断后,你就键值变量已经被赋予新的值了。
如果正好按的是第一个键则能返回1,
如果不是第一个键按下,但经过
if((keyvalue|=0xfb)!=0xff)这一判断,其中的“keyvalue|=0xfb”就把keyvalue变成0xff了,后面的判断条件自然不会满足。
把这里的一些等于号再去掉试试看。
另外,建议你对于按键扫描程序使用switch
case
语句,这样条理更清晰。
/*按键获取程序*/
unsigned
int
Key()
{
uchar
keyvalue;
keyvalue=P3;
keyvalue|=0xc3;
if((keyvalue|0xc3)==0xff)
{
Delay(10);
if((keyvalue|0xc3)==0xff)
{
return(0);
}
}
else
{
Delay(10);
if((keyvalue|0xc3)!=0xff)
{
if((keyvalue|0xfb)!=0xff)
{
return(1);}
if((keyvalue|0xf7)!=0xff)
{
return(2);}
if((keyvalue|0xef)!=0xff)
{
return(3);}
if((keyvalue|0xdf)!=0xff)
{
return(4);}
}
}
}

❼ 51单片机汇编语言按键如何编程

编程时,要把整个程序,分解成一个一个模块。
一个模块,只包括一个功能。
那么,KEY 模块:
读出按键、消除抖动、读取键值,返回键值。
键值包括:00H、08H... 20H,FFH(无键)。
这个 KEY 模块,到这就完了。
按键如何处理,则是另外的模块。
楼主流程图,包罗万象,好像是个主程序。不好弄。

❽ C51单片机编程,按键控制流水灯

#include "reg51.h"
unsigned char led[]={0xfe,0xfd,0xfb,0xf7}; //LED灯的花样数据
void delay(unsigned char time){ //延时函数
unsigned int j=15000;
for(;time>0;time--)
for(;j>0;j--);
}
void main(){
bit dir=0,run=0; //标志位定义及初始化
char i;
while(1){
switch (P0 & 0x0f){ //读取键值
case 0x0e:run=1;break; //K1动作,设run=1
case 0x0d:run=0,dir=0;break; // K2动作,设run=dir=0
case 0x0b:dir=1;break; //K3动作,设dir=1
case 0x07:dir=0;break; //K4动作,设dir=0
}
if (run) //若run=dir=1,自上而下流动
if(dir)
for(i=0;i<=3;i++){
P2=led[i];
delay(200);
}
else
for(i=3;i>=0;i--){ //run=1,dir=0,自下而上流动
P2=led[i];
delay(200);
}
else P2=0xff; //若run=0,全部灯灭
}
}

阅读全文

与51单片机键盘编程相关的资料

热点内容
40岁北漂程序员 浏览:55
下载钉钉app是什么 浏览:222
什么服务器支持云播放 浏览:835
什么app进货牛排比较好 浏览:107
为什么鸿蒙用安卓app 浏览:82
手相面相pdf 浏览:374
军犬不听命令追出大门 浏览:913
程序员必背97件事 浏览:939
云服务器python怎么读取 浏览:30
哪里买云服务器划算 浏览:236
四川日报pdf 浏览:965
按摩解压助眠小姐姐 浏览:411
风冷压缩机水冷却器 浏览:879
服务器播放器如何打开方式 浏览:790
phppython快 浏览:366
pdf转换word免费版 浏览:37
二手的有什么APP 浏览:329
服务器的应用镜像是什么 浏览:153
命令行的使用方法 浏览:514
怎么让图片左右压缩 浏览:656