找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 2095|回复: 0
收起左侧

试验板键盘问题

[复制链接]
ID:47343 发表于 2015-1-23 19:24 | 显示全部楼层 |阅读模式
首先说下,刚开始学习c51程序,是根据郭天祥的教程写的
发现实验板的键盘电路图有问题。
图上标的是
s6       s7      s8       s9

s10     s11    s12     s13

s14     s14    s16     s17

s18     s19    s20     s21      

实际是

s6    s10     s14    s18

s7    s11     s15    s19

s8    s12    s16     s20

s9    s13   s17      s21      

//键盘按列依次被按下,数码管依次显示0-F
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar temp,num;
/////////////////延时程序////////////////       
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
        {
                for(y=250;y>0;y--)
                {
                };
        };
}
/////////////////延时程序////////////////
void main()
{       
        dula=1;
        P0=0;
        dula=0;
        wela=1;
        P0=0x00;
        wela=0;
        while(1)
        {
                P3=0xef;
                temp=P3;
                temp=temp&0x0f;
/////////////////消去按键时的抖动////////////////
                while(temp!=0x0f)//检测是否有按键被按下
                {
                        delay(5);
                        temp=P3;
                        temp=temp&0x0f;
/////////////////消去按键时的抖动////////////////
                        while(temp!=0x0f)//检测是否真有按键被按下
                        {                               
                                temp=P3;
                                switch(temp)
                                {
                                        case 0xee:num=1;       
                                                break;
                                        case 0xed:num=2;
                                                break;
                                        case 0xeb:num=3;
                                                break;
                                        case 0xe7:num=4;
                                                break;
                                };
/////////////////第一列键盘扫描的松手检测////////////////       
                                while(temp!=0x0f)
                                {
                                        temp=P3;
                                        temp=temp&0x0f;

                                }       
/////////////////第一列键盘扫描的松手检测////////////////       
/////////////////数码管根据按键信息显示////////////////       
                                dula=1;
                                P0=table[num-1];
                                dula=0;       
/////////////////数码管根据按键信息显示////////////////               
                        };
                };

//第二列键盘扫描程序
                P3=0xdf;
                temp=P3;
                temp=temp&0x0f;
                while(temp!=0x0f)
                {
                        delay(5);
                        temp=P3;
                        temp=temp&0x0f;
                        while(temp!=0x0f)
                        {                               
                                temp=P3;
                                switch(temp)
                                {
                                        case 0xde:num=5;       
                                                break;
                                        case 0xdd:num=6;
                                                break;
                                        case 0xdb:num=7;
                                                break;
                                        case 0xd7:num=8;
                                                break;
                                };       
                                while(temp!=0x0f)
                                {
                                        temp=P3;
                                        temp=temp&0x0f;

                                }                                                       
                                dula=1;
                                P0=table[num-1];
                                dula=0;               
                        };

                       
                };
//第三列键盘扫描程序
                P3=0xbf;
                temp=P3;
                temp=temp&0x0f;
                while(temp!=0x0f)
                {
                        delay(5);
                        temp=P3;
                        temp=temp&0x0f;
                        while(temp!=0x0f)
                        {                               
                                temp=P3;
                                switch(temp)
                                {
                                        case 0xbe:num=9;       
                                                break;
                                        case 0xbd:num=10;
                                                break;
                                        case 0xbb:num=11;
                                                break;
                                        case 0xb7:num=12;
                                                break;
                                };       
                                while(temp!=0x0f)
                                {
                                        temp=P3;
                                        temp=temp&0x0f;

                                }                                                       
                                dula=1;
                                P0=table[num-1];
                                dula=0;               
                        };

                       
                };
//第四列键盘扫描程序
                P3=0x7f;
                temp=P3;
                temp=temp&0x0f;
                while(temp!=0x0f)
                {
                        delay(5);
                        temp=P3;
                        temp=temp&0x0f;
                        while(temp!=0x0f)
                        {                               
                                temp=P3;
                                switch(temp)
                                {
                                        case 0x7e:num=13;       
                                                break;
                                        case 0x7d:num=14;
                                                break;
                                        case 0x7b:num=15;
                                                break;
                                        case 0x77:num=16;
                                                break;
                                };       
                                while(temp!=0x0f)
                                {
                                        temp=P3;
                                        temp=temp&0x0f;

                                }                                                       
                                dula=1;
                                P0=table[num-1];
                                dula=0;               
                        };

                       
                };

        };
               
}
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表