bowen, 2018-12-24 16:17 采纳率: 0%
浏览 648

编译没有错误 烧录进单片机 LCD1602一直显示A 不知道怎么办

LCD1602头文件
```#ifndef LCD1602_H

#include

 #define _LCD1602_H_

 #define LCD1602_A P0

   sbit RS = P3^5;
   sbit RW = P3^6;
 sbit EN = P3^4;

  typedef unsigned char uchar;
typedef unsigned char uint;

   void delay_ms(uint n);
     void Dis_onechar(uchar x,uchar y,uchar dat);
     void Dis_str(uchar x,uchar y,uchar *str);
     void Init_LCD1602();
     void Read_busy();
     void Write_cmd(uchar cmd);
     void Write_dat(uchar dat);
     void clear_LCD1602();

#endif 
LCD1602程序

```#include "LCD1602.h"


void delay_ms(uint n) 
{ 
uint i,y; 
for(i=n;i>0;i--) 
    {
  for(y=114;y>0;y--);
    }       
}


// º¯ÊýÃû£ºÅÐ溯Êý
// º¯Êý¹¦ÄÜ£ºÅжÏÒº¾§ÊÇ·ñ·±Ã¦
void Read_busy()
{
   uchar busy;
     LCD1602_A = 0xff;
     RS = 0;
     RW = 1;
    do{
       EN = 1;
         busy = LCD1602_A;
         EN = 0;//À­µÍʹÄÜ¶Ë ±ãÓÚÏ´ÎʹÓÃ
    }while(busy & 0x80);//²»ÎªÁã¾ÍÒ»Ö±Ö´ÐÐ
}
//º¯ÊýÃû³Æ£ºÐ´ÃüÁî
//º¯Êý¹¦ÄÜ£ºÏòLCDÖÐдÈëÃüÁî
void Write_cmd(uchar cmd)
  {
    Read_busy();
      RS = 0;
        RW = 0;
        LCD1602_A = cmd;
        EN = 1;
        EN = 0;
}
//º¯ÊýÃû³Æ£ºÐ´Êý¾Ý
//º¯Êý¹¦ÄÜ£ºÏòLCDÖÐдÈëÊý¾Ý
void Write_dat(uchar dat)
{
  Read_busy();
    RS = 1;
    RW = 0;
    LCD1602_A = dat;
    EN = 1;
    EN = 0;
}
//º¯ÊýÃû³Æ£ºÏÔʾһ¸ö×Ö·û
//º¯Êý¹¦ÄÜ£ºÔÚÖ¸¶¨µÄλÖÃÏÔʾһ¸ö×Ö·û
void Dis_onechar(uchar x, uchar y, uchar dat)
{
   if(y) x |= 0x40;
       x |= 0x80;
    Write_cmd(x);
    Write_dat(dat);
}
//º¯ÊýÃû³Æ£ºÏÔʾһ¸ö×Ö·û´®
//º¯Êý¹¦ÄÜ£ºÁ¬ÐøµÄÏÔʾ×Ö·û
void Dis_str(uchar x, uchar y, uchar *str)//strÊÇÖ¸Õë±äÁ¿(µØÖ·)*strÊÇÖ¸Õë»òµØÖ·ÀïµÄÄÚÈÝ
{
   if(y) x |= 0x40;
        x |= 0x80;
     Write_cmd(x);
     while(*str != '\0')
     {
        Write_dat(*str++);//Ö¸ÏòÏÂÒ»¸öµØÖ· µÄÄÚÈÝ
     }
}
//º¯ÊýÃû³Æ£ºLCD³õʼ»¯
//º¯Êý¹¦ÄÜ£º³õʼ»¯LCD
void Init_LCD1602()
{
   Write_cmd(0x38);//ÉèÖÃÏÔʾģʽ
     Write_cmd(0x0c);// ¿ªÏÔʾ ÏÔʾ¹â±ê ¹â±ê²»ÉÁ
     Write_cmd(0x06);//µØÖ·Ö¸Õë¼ÓÒ» ¹â±ê¼ÓÒ»
     Write_cmd(0x01);//ÇåÆÁ
}
void clear_LCD1602()
{
    Write_cmd(0x01);
}

矩阵键盘的程序

#include "LCD1602.h"

uchar str[] = {"0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L"};


//º¯ÊýÃû£ºÉ¨Ã躯Ê
//º¯Êý¹¦ÄÜ£ºÅжÏ20¸ö°´¼üÄǸö±»°´ÏÂÁË
uchar Keyscan()
{
    uchar dat_l,dat_h;//l ÐÐ h ÁÐ
    P3 = 0xf0;// 1111 0000 ¸ßλÊÇÁÐ µÍλÊÇÐÐ
    if((P3 & 0xf0)!= 0xf0)
    {
        delay_ms(10);
        if((P3 & 0xf0) != 0xf0)
        {
           dat_l = P3 & 0xf0;//´¢´æÁеÄÖµ ¸ßËÄλ µÍËÄλʼÖÕΪÁã
             P3 = P3 | 0x0f;//µÍËÄλȫΪһ ÅжÏÄÄÒ»ÐÐ
             dat_h = P3 & 0x0f;// ¸ßËÄλΪ0 µÍËÄλΪÐÐÖµ ´¢´æÐÐÖµ
            while((P3 & 0x0f) != 0x0f)//Åжϰ´¼üÊÇ·ñËÉ¿ª ²»³ÉÁ¢Ìø³öÑ­»·
                return(dat_l+dat_h);//·µ»Ø¼üÂëÖµ
            }
    }
}
//º¯ÊýÃû³Æ£»Êä³öº¯Êý
//º¯Êý¹¦ÄÜ£»Êä³öÿ¸ö¼üËù´ú±íµÄÊý×Ö
uchar keypro()
{

      switch(Keyscan())
            {
                //µÚÒ»ÐмüÅÌ
                case 0xee: return 0;  break;
              case 0xde: return 1;  break;
                case 0xbe: return 2;  break;
                case 0x7e: return 3;  break;
                //µÚ¶þÐмüÅÌ
                case 0xed: return 4;  break;
                case 0xdd: return 5;  break;
                case 0xbd: return 6;  break;
                case 0x7d: return 7;  break;
                //µÚÈýÐмüÅÌ
                case 0xeb: return 8;  break;
                case 0xdb: return 9;  break;
                case 0xbb: return 10; break;
                case 0x7b: return 11; break;
                //µÚËÄÐмüÅÌ
                case 0xe7: return 12; break;
                case 0xd7: return 13; break;
                case 0xb7: return 14; break;
                case 0x77: return 15; break;

                //¶ÀÁ¢¼üÅÌ
                case 0xfe: return 16; break;
                case 0xfd: return 17; break;
                case 0xfb: return 18; break;
                case 0xf7: return 19; break;
            default: return 20;break;
            }
}
void main()
{
    uchar num;

    while(1)
    {

        Init_LCD1602();
        num = keypro();
        //clear_LCD1602();
      Dis_onechar(2,0,str[num]); 
        delay_ms(10);
    }
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 15:18
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。