① 求由51单片机控制4x4键盘输入,4个数码管(采用动态扫描)显示 c语言编程思路!
定义一个10个元素的数组static unsigned char m_arrDigital[10],做一个数码管0~9的位段表。前提是你的数码管接在同一组IO上,比如P0。
定义一个4个元素的数据staticunsigned charm_arrValue[4],可初始化为0,对应于数码管的4位。刷新数码管时依次取这个数组中的值。
扫描按键,一般也是接到同一组IO上,比如P1,可以是高4位输出,低4位输入。
转换按键值,并把值写入m_arrValue[0]中,在写之前先把m_arrValue的前3个元素依次往后移一位,比如这样写:*((uisigned long *)m_arrValue) <<= 8;
把m_arrValue中的值显示到数码管上,m_arrValue[0]对应最右一位,m_arrValue[3]对应最左一位。m_arrValue可以作为m_arrDigital的索引。
② 求一个4x4矩阵键盘扫描c程序
1、若键盘不能使用,建议多换几个接口试试
2、或者安装驱动人生这个软件,打开检测一下外设驱动看看打印机的驱动需要安装吗
3、你扫描,这个是能扫描的硬件设备吗?
4、那建议你去这个扫描设备的官网下载驱动安装
③ 寻单片机“经典键盘”的扫描程序(要C语言的)
uchar keyscan()
{
uchar key,i,keyscan;
P3=0x3d; //准备读取P3.2~P3.5 51的I/0为准双向I/0口 作为输入是最好先将其置1
//读取接地按键值
if((P1&0x3d)!=0x3d){ //若无按键按下 P3.2~P3.5为高
delay(); //延时去抖动
if((P1&0x3d)!=0x3d){//判断哪个按键按下
key=P1&0x3d;
return key;
}
}
keyscan=0x3D;
for(i=0;i<4;i++){
P1=keyscan; //输出I/O口扫描 输出 判断
if(P1!=keyscan){ //读取I/O口,看输出扫P1.0~P1.5的值是否与扫描不同
key=P1&0x3D; //转换扫描码
return key;
}
keyscan=(keyscan<<1)|0x01; //逐行输出扫描 0
}
return 0;
}
④ 4*3矩阵键盘扫描C语言
循环加判断
int i,j;
for(i = 0; i < 3; i ++) //行
{
for(j = 0; j < 4; j++) //列
{
if(条件)
//todo
}
}
⑤ 本人初学单片机,现请求各位大侠,有没有MCS51机的外部中断法4X4键盘扫描汇编语言程序
这个是我以前做的扫描法,电路如图所示,程序附上。
ORG00H
LJMPMAIN
ORG30H
MAIN:LCALLLOOP1
LCALLDELAY
LCALLLOOP1
LCALLLOOP2
LCALLLOOP3
LJMPMAIN
LOOP1:MOVP2,#0F0H;判断有键按下?
MOVA,P2
MOVB,A
MOVP2,#0FH
MOVA,P2
ORLA,B
MOV30H,A
CJNEA,#0FFH,LOOP11
LJMPMAIN
LOOP11:RET
LOOP2:MOVR3,#00H;比较计算得出键值
LOOP21:MOVA,R3
INCR3
MOVDPTR,#TAB
MOVCA,@A+DPTR
CJNEA,30H,LOOP21
RET
LOOP3:MOVA,R3;数码管显示
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVP1,A
;MOVP1,#0F1H
RET
DELAY:;延时R5×10MS
MOVR6,#50
DELAY1:MOVR7,#100
DJNZR7,$
DJNZR6,DELAY1
RET
TAB:
DB0EEH,0EDH,0EBH,0E7H
DB0DEH,0DDH,0DBH,0D7H
DB0BEH,0BDH,0BBH,0B7H
DB07EH,07DH,07BH,077H
TAB1:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH
这个是我以前做的扫描法,电路如图所示,程序附上。
⑥ 求把这段4x4键盘显示的汇编语言的改写成C语言
这程序,有点滥。
得重新编写。
⑦ 根据这个c语言程序,写一个汇编的独立键盘扫描程序。 图中是一个按键的,求写出有4个按键的汇编键盘扫
楼主的要求,不够详尽。
http://blog.163.com/asm_c/blog/static/2482031132014427210656/
参考。
⑧ 求一个单片机4X4矩阵键盘扫描程序,C语言的。
淘bao 旺铺: 广州华电 单片机学习板 单片机外围学习模块/传感器模块
//4*4键盘检测程序,按下键后相应的代码显示在数码管上
#include<reg51.h>
sbit beep=P2^3;
sbit la=P2^6;
sbit wela=P2^7;
unsigned char i=100;
unsigned char j,k,temp,key;
void delay(unsigned char i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
display(unsigned char num)
{
P0=table[num];
la=1;
la=0;
P0=0xc0;
wela=1;
wela=0;
}
void main()
{
la=0;
wela=0;
while(1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
P1=0xfe;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
break;
case 0xdb:
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
}
}
}
}
⑨ C51单片机4X4矩阵键盘检测程序问题
可以参考:
http://hi..com/%d7%f6%b6%f8%c2%db%b5%c0/blog/item/ef086222268d4f4eac34de59.html
程序中,读取4*4矩阵键盘的函数,可以得到0~f,和16。
当读出为16的时候,即是按键放手了,可以执行对应的功能程序。
⑩ C语言中读取键盘扫描码的问题
这个 C 语言的问题你可以发到shx.io 这个网站,这个程序员问答网站有很多大神,你复制一下发过来,我让朋友现在就帮你答