用郭天祥板子,写键盘程序出现的问题,求解
朋友,
你没写中断程序呀,难道中断包含在Myspace.h中?你再检查一遍,是不是IO口定义错误?你再对照视频写一下程序!!祝你成功!!
可以设置一个变量i,初始值为0。如果密码为1234。可以这样写程序。按下1,i++;按下1后如果再按2,i++,如果不是2,i=0;下面程序可依次类推。
如果是按1234的顺序按下按键,那么i的值为4。检测到i=4时 ,就让蜂鸣器响。这是我以前写过的一个程序,可能别人还有更好的。
第二点,你的变量定义的是 int 型(有符号整型),程序中没有必要,用 unsigneg char 足够。
第三点,也就是初始化时显示乱码的原因,shu=(row-1)*4+series; 这句有问题,row和series的默认初值都为0,而经过运算之后的结果是shu等于负值(-4),也就是说在你上电之后没有按下按键之前,shu的值为 -4 ,因此造成显示乱码。你可以写成 if((row>0)&&(series>0)) shu=(row-1)*4+series; 或者是if(row>0) shu=(row-1)*4+series;(反正你也没有检测独立按键)。
希望能够对你有帮助,另外,要习惯使用子程序,这样不管是调用还是分析都会方便很多,我也是初学。
郭天祥老师的51单片机中的键盘那段不懂。
while(m != 0xf0) \/\/注意这里没有分号 { \/\/ while(P0 != f7); 不就可以了么?m = P0; \/\/这不就表示已经回到初始值,按键已经起来了么?m = m & 0xf0;} --- while(P0 != f7); \/\/这仅仅是检测一个按键。如果还有其它按键按下,还是应该等待一下。最好是:while(...
用郭天祥板子,写键盘程序出现的问题,求解
首先第一点,你的按键程序我试过是可以用的,只是初始化时显示乱码;你的显示不正常不知道是不是你用的编译软件有问题(我用的是Keil 3.0英文),或者是你硬件上接触不良。第二点,你的变量定义的是 int 型(有符号整型),程序中没有必要,用 unsigneg char 足够。第三点,也就是初始化时显示乱...
谁能用郭天祥的51单片机开发板的矩阵键盘写个四位密码的程序,密码正 ...
可以设置一个变量i,初始值为0。如果密码为1234。可以这样写程序。按下1,i++;按下1后如果再按2,i++,如果不是2,i=0;下面程序可依次类推。如果是按1234的顺序按下按键,那么i的值为4。检测到i=4时 ,就让蜂鸣器响。这是我以前写过的一个程序,可能别人还有更好的。
谁能用郭天祥的51单片机开发板的矩阵键盘写个四位密码的程序,密码正 ...
可以设置一个变量i,初始值为0。如果密码为1234。可以这样写程序。按下1,i++;按下1后如果再按2,i++,如果不是2,i=0;下面程序可依次类推。如果是按1234的顺序按下按键,那么i的值为4。检测到i=4时 ,就让蜂鸣器响。这是我以前写过的一个程序,可能别人还有更好的。
郭天祥单片机键盘扫描中,如果真的有按下键盘,当第一次while循环结束后...
在子程序中,首先给temp赋值0xf0,然后将p3的值给temp,检测是否还是0xf0,如果不是,说明有按键按下,进入循环。延时防抖。再次检测是否等于0xf0,如果是确认有按键按下,在switch中判断按下的是哪一个按键。temp的值就是你的p3口的值。(1111 1111无按键。 1111 1110key1按下。1111 1101key2按下...
单片机。矩阵键盘的扫描程序。郭天祥的视频中写的。 首先这个程序是正确...
扫描键盘是这样操作的,低四位由编程方设置定时逐一变高,这样检查高4位哪位变低了,就是说低4位变高的那行上的某位有键按下,行号可以由低4位得到(相当于是输出的行号),而列号是高4位(相当于是输入的列号信息)你看程序中肯定能找到分别处理高、低4位的部分,可以理解一下处理思路。
郭天祥51单片机矩阵键盘编程0123不显示是怎么回事
这个问题最简单,拔掉下载线。只留个电源线就ok了。。。
4*4键盘扫描程序 问题 郭天祥新概念51单片机C语言教程
主程序中打开了4个数码管的位选端(P3=0X0f),P0直接连所有数码管的段输入 获得新的键值后,调用DISPLAY ,P0口送出数据后,你若不再对它进行重新赋值,当然它会保持了, 虽然仍在反复扫描按銉,但得不到新的键值,也就不再调用DISPLAY,P0口的数据得以保持(空扫描只用到了P1口)...
51单片机的问题,矩阵键盘和独立键盘混乱了。。。求帮助
你好:这是郭天祥的板子的按键接口。s6、10、14、18与s2接在一起了,s7、11、15、19与s3接在一起了。。。这样使用矩阵键盘时,独立按键对矩阵的影响是非常大的。希望我的回答能帮助到你。
郭天祥51学习,看下面的程序,例程给的,独立键盘按一下显示加一,感觉不太...
原来的程序,逻辑,够滥的。应该如下:void main(){ num = 0;P0 = 0xfe;wela = 1;wela = 0;\/\/ P3=0xff;这一句,不要也行 while(1) { P0 = table[num];dula = 1;dula = 0;if(!key1) { delay(5);if(!key1) { d1 = 0;while(!key1);d1 = 1;num++;if(num ==...
弘图洛欣: 你好:这是郭天祥的板子的按键接口.s6、10、14、18与s2接在一起了,s7、11、15、19与s3接在一起了...这样使用矩阵键盘时,独立按键对矩阵的影响是非常大的.希望我的回答能帮助到你.
隆德县13014972998: 郭天祥的51单片机,我写明明是检测矩阵键盘的,最后出来就变成了独立建盘的了, - ?
弘图洛欣: 第一:你最好把现象结果说清楚,你这个键盘显示出来肯定只会是0 1 2 3.第二:你这个矩阵键盘函数还是跟着郭天祥写的步子走,你使用两个while而没有第二个if不知是怎么回事.希望我的回答能帮助到你.
隆德县13014972998: 51单片机矩4X4阵键盘的第一排按键没反应. - ?
弘图洛欣: 你仔细看一下资料就会发现这个问题是开发板的问题,就是他用到的一个芯片会把单片机P3口的某个引脚置高,导致键盘不好使,解决方法是下载完程序之后拔掉下载USB线,只保留供电USB线再做测试
隆德县13014972998: 为什么我用郭天祥的单片机按键程序,按一下会加两次,吴鉴鹰老师的就很稳定啊,我是学生. - ?
弘图洛欣: 程序问题,把按键消抖的延时时间加大即可,并且要检测按键是否抬起 if(key==0) { delay_ms(20);//延时,可加长至40ms if(key==0) {while(key==0);//等待按键抬起a++; } }
隆德县13014972998: 郭天祥单片机键盘扫描中,如果真的有按下键盘,当第一次while循环结束后,判断while( )时 - ?
弘图洛欣: 看这个程序感觉好不顺眼啊.感觉有问题,1、在第一个while循环的前面紧跟着的是一个将temp赋值为0xf0的语句,那么根本进不了while循环啊.如果将temp=P3放在while前面就没有问题了.2、为什么我感觉应该把0xf0改成0xff呢?有可能这不...
隆德县13014972998: 用郭天祥板子写的一个电子钟程序,但是不对,请高手看看程序哪里逻辑出问题 - ?
弘图洛欣: 对人体就没听过就那么突然发
隆德县13014972998: 关于单片机矩阵键盘程序问题?
弘图洛欣: 我也看到这里遇到这个问题,想了很久 ,想明白了,特地告诉你. P3赋给temp, 确实没有跳出循环,但是这个switch里包含了4个按键,程序可以在CASE之间切换,也就是可以按出1/2/3/4来,但是只能按1/2/3/4,不能跳出来;这里如果不把P3赋给temp,则只能按出一个键的数字来.后来又加了个松手检测,在里面和0xf0又与了一次,赋给temp,这个时候就能跳出循环了.前面这里确实有点问题,没有跳出循环,只能读1/2/3/4.
隆德县13014972998: 51单片机矩阵键盘检测方面的问题 - ?
弘图洛欣: 第一个问题,应该是考虑如果先开锁存器,在那一时刻,P0的值还是上一次给P0赋的值,下在一条语句才将这次的值给P0,这样会造成数码管的余辉,静态显示的时候,因为太快看不到,动态显示时,就会比较明显了.第二个问题他的程序应该检测的是高四位,是否被拉低,因为temp和0xf0与,低四位不管是什么,都是0,只有高四位的值从1,变为0,0xf0才会发生改变.
隆德县13014972998: 郭天祥51学习,看下面的程序,例程给的,独立键盘按一下显示加一,感觉不太对,见我程序汉字,谢谢! - ?
弘图洛欣: 原来的程序,逻辑,够滥的.应该如下:void main() { num = 0; P0 = 0xfe; wela = 1; wela = 0;// P3=0xff;这一句,不要也行 while(1) { P0 = table[num]; dula = 1; dula = 0;if(!key1) { delay(5); if(!key1) { d1 = 0; while(!key1); d1 = 1; num++; if(num == 10) num = 0; } } } }
隆德县13014972998: 单片机矩阵键盘程序求解释和修正! - ?
弘图洛欣: 没有硬件电路,单从程序来看应该没错.我加了注释,你可以参考下.#include char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x00,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void delayms(int xms) { int i,j; for(i=xms;i>0;i--) //i=...