微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请帮忙看一下 我想用矩阵键盘控制lcd1602

请帮忙看一下 我想用矩阵键盘控制lcd1602

时间:10-02 整理:3721RD 点击:
帮忙看看错在哪里,可以显示Enter Password,但是按下键不能显示 * 我想按一个键显示一下* ,就是银行输入密码的那个操作。谢谢了


#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define KEYP P2
#define SEG  P0       
char code TAB[]={0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};           //矩阵键盘的输出数字
char code scan[]={0xef,0xdf,0xbf,0x7f};                                                           //键盘的扫描码
sbit rs=P1^0;
sbit rw=P1^1;
sbit e=P1^2;
uchar code table[]="******";
uchar code table1[]="Enter Password";
scanner();                            //声明键盘扫描函数
void delay(int z)
{
        int i,j;
        for(i=0;i<110;i++)
                for(j=0;j<z;j++)
                        ;
}
void write_com(uchar com)//用来写指令
{
        rs=0;//表示写指令
        P0=com;
        delay(5);
        e=1; //一个高脉冲度字噶钶
        delay(5);//高脉冲延时一段时间
        e=0;//将使能端啦为低电平
}
void write_date(uchar date)//本函数用来写数据
{
        rs=1;//表示写数据
        P0=date;
        delay(5);
        e=1; //一个高脉冲读走数据
        delay(5);//高脉冲延时5毫秒                                                               
        e=0;//将使能端拉为低电平
}
void init()//初始化函数
{
        rw=0;//表示写指令或数据 RW=1表示读数据或指令
        e=0;
        write_com(0x38);//设置为5×7点阵
        write_com(0x0c);//设置不显示光标
        write_com(0x06);//当读或者写一个字符是地址自动加1指针也自动加1
        write_com(0x01);//清屏指令(当为1时清屏)
        write_com(0x80);//设置1602在第一行第一个显示


}
scanner()
{
        unsigned char col,row;
        unsigned char rowkey,kcode;
        for(col=0;col<4;col++)
        {
                KEYP=scan[col];       
               
                rowkey=~KEYP&0x0f;
                if(rowkey!=0)
                {
                        if(rowkey==0x01) row=0;
                        else
                                if(rowkey==0x02)  row=1;
                        else
                                if(rowkey==0x04)  row=2;
               
                        kcode=3*col+row;
                        return kcode;
                }
        }
         
}
void main()
{
        unsigned char kcode;
        int i;
        init();       
        for(i=0;table1[i];i++)
        {
               
                write_date(table1[i]);
                delay(5);
        }
       
        write_com(0x80+0x40+5);
        while(1);//将主函数停止在此处
        scanner();
        switch(kcode)
        {
                case 1:
                           write_com(0x80+0x40+5);write_date(table[0]);
                case 2:
                          write_com(0x80+0x40+6);write_date(table[1]);
                case 3:
                           write_com(0x80+0x40+7);write_date(table[2]);
                case 4:
                           write_com(0x80+0x40+8);write_date(table[3]);
                case 5:
                           write_com(0x80+0x40+9);write_date(table[4]);
                case 6:
                           write_com(0x80+0x40+10);write_date(table[5]);
                case 7:
                           write_com(0x80+0x40+11);write_date(table[6]);
                case 8:
                           write_com(0x80+0x40+12);write_date(table[7]);
                case 9:
                           write_com(0x80+0x40+13);write_date(table[8]);
        }
       
       
       
}

求大神援助啊,我是初学者,拜托

  while(1);//将主函数停止在此处
你的程序就在这儿等了,执行不到后面去。

谢谢了 小编 我自己改改

对啊,是while那里出现了问题啊,后面加分号干嘛?它是一个循环...

没显示出来啊,求解释

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top