找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1697|回复: 5
打印 上一主题 下一主题
收起左侧

关于51单片机液晶显示程序,不能同时显示字母和汉字?

[复制链接]
跳转到指定楼层
楼主
请问为什么液晶显示不能同时显示字母和汉字啊!是代码的问题吗?请问怎么改啊?这是我的仿真结果,乱码!

1.png (27.31 KB, 下载次数: 48)

1.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:978297 发表于 2021-11-9 21:33 | 只看该作者
#include <reg51.h> #include <stdio.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define DATA P2   //数据端口  sbit Reset = P3^0;   //复位 sbit RS = P3^7;    //指令数据选择 sbit E = P3^5;    //指令数据控制 sbit RW = P3^6;    //读写控制 sbit busy = P2^7;   //忙标志 sbit CS1 = P3^2;   //左屏幕选择,低电平有效 sbit CS2 = P3^3;   //右屏幕选择 /////////////////////////////////////// LCD /////////////////////////////////////   const uchar code Hzk[] = {  0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//*"E",0*/  0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//*"D",1*/  0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//*"G",2*/  0x00,0x40,0x20,0x1E,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,//*"牛",3*/  0x40,0x40,0x42,0xCC,0x00,0x82,0xBA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBA,0x82,0x00,0x00, 0x00,0x40,0x20,0x1F,0x20,0x5F,0x4A,0x4A,0x4A,0x4F,0x4A,0x4A,0x4A,0x5F,0x40,0x00//*"逼",4*/ };  const uchar code pic[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x00,0x00, 0x00,0x00,0x00,0x01,0xE0,0x07,0x00,0x00,0x00,0x00,0xC0,0x07,0xE1,0x1E,0x00,0x00, 0x00,0x00,0xE0,0x0F,0xE0,0x39,0x00,0x00,0x00,0xF0,0x3F,0x1C,0xC0,0x71,0x00,0x00, 0x00,0xFC,0xDF,0x19,0xF8,0x6F,0x00,0x00,0x00,0x1F,0xF0,0x33,0xFC,0xFF,0x00,0x00, 0x80,0x03,0x30,0x36,0xBF,0xFF,0x81,0x0F,0xC0,0x01,0x70,0xB6,0xE3,0xFF,0xFB,0x0F, 0xE0,0x00,0xE0,0xFE,0xC1,0xE3,0x7F,0x0C,0x60,0x00,0xF0,0xFF,0xC0,0x63,0x03,0x0C, 0x30,0x00,0xF8,0x7F,0xC0,0xC1,0x01,0xFC,0x30,0x00,0x6C,0xF8,0xF3,0xC1,0x00,0xF8, 0x30,0xF4,0xFF,0xF8,0xFF,0xF1,0x00,0x18,0x30,0xF8,0xFB,0x71,0xDE,0xFD,0x00,0x18, 0x30,0x98,0xED,0xF1,0xBF,0xDF,0x00,0xF8,0x30,0x8C,0xED,0xBD,0x37,0x83,0x01,0xF8, 0x70,0x8C,0xDD,0xFF,0x7E,0x80,0x01,0x18,0x60,0x0C,0xF8,0xFF,0xFF,0xC0,0x00,0xF8, 0x60,0x1C,0xF0,0xFE,0xFF,0x60,0x00,0xF8,0xE0,0x18,0x78,0xFE,0xFF,0xE0,0x00,0x18, 0xC0,0x18,0xFC,0x76,0x1F,0xC3,0x00,0x18,0xC0,0x8C,0xED,0xF1,0xFE,0x6F,0x00,0xF8, 0xC0,0x8C,0xAD,0xF1,0xF9,0xFF,0x00,0xF8,0xC0,0x99,0xBD,0x99,0xC1,0xF9,0x0F,0x0C, 0x80,0xF9,0xED,0x9C,0xF3,0x00,0x7F,0x0C,0x00,0xF3,0xFF,0x1F,0x7F,0x00,0xF8,0x0F, 0x00,0x87,0xFF,0x1B,0x6E,0x00,0x80,0x0F,0x00,0xFE,0xFF,0x18,0x66,0x08,0x00,0x00, 0x00,0xF8,0x3F,0x9C,0x63,0x00,0x00,0x00,0x00,0x00,0xF0,0xEF,0x31,0x00,0x00,0x10, 0x00,0x00,0xE0,0x67,0x1B,0x00,0x00,0x40,0x00,0x00,0x00,0xB0,0x0F,0x00,0x00,0x08, 0x00,0x00,0x00,0xF0,0x07,0x00,0x00,0x08,0x00,0x00,0x00,0xF0,0x06,0x00,0x00,0x08, 0x00,0x00,0x80,0x71,0x07,0x00,0x00,0x08,0x00,0x00,0x00,0xF8,0x03,0x00,0x00,0x38, 0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x10,0x20,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, 0x00,0x00,0x40,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04, 0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00, 0x08,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0x30,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x06,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x80,0x00,0x00,0x00, 0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00 }; void CheckState() {         uchar dat;         RS = 0;         RW = 1;             do         {                 DATA = 0x00;                 E = 1;                 _nop_();                 dat = DATA;                 E = 0;                 dat = 0x80&dat;         }while(!(dat==0x00));     }  void SendCommand(uchar com) {         CheckState();         RS = 0;         RW = 0;         DATA = com;         E = 1;         _nop_();         _nop_();         E = 0; }  void SetLine(uchar page) {         page = 0xb8|page;         SendCommand(page); }  void SetStartLine(uchar startLine) {         startLine = 0xc0 | startLine;         SendCommand(startLine); }  void SetColumn(uchar column) {         column &= 0x3f;         column |= 0x40;         SendCommand(column); }  void SetOnOff(uchar onOff) {         onOff |= 0x3e;         SendCommand(onOff); }  void WriteByte(uchar dat) {         CheckState();         RS=1;         RW = 0;         DATA = dat;         E = 1;         _nop_();         _nop_();         E = 0; }  void SelectScreen(uchar screen) {         switch(screen)         {                 case 0: //全屏                 CS1 = 1;                 CS2 = 1;                 break;                 case 1: //左屏                 CS1 = 1;                 CS2 = 0;                 break;                 case 2: //右屏                 CS1 = 0;                 CS2 = 1;                 break;         } }  void ClearScreen(uchar screen) {         uchar i,j;         SelectScreen(screen);         for(i=0; i<8; i++)         {                 SetLine(i);                 SetColumn(0);                 for(j=0; j<64; j++)                 {                         WriteByte(0x00);                 }         } }  void delay(uint z) {         uint i,j;         for(i=0; i<z; i++)         {                 for(j=0; j<110; j++)                 {                         ;                 }         }                  }  void InitLcd() {         CheckState();         SelectScreen(0);         SetOnOff(0);         SelectScreen(0);         SetOnOff(1);         SelectScreen(0);         ClearScreen(0);         SetStartLine(0); }  void Display(uchar ss, uchar page, uchar column, uchar number) {         int i;         SelectScreen(ss);         column &= 0x3f;         SetLine(page);         SetColumn(column);         for(i=0; i<16; i++)         {                 WriteByte(Hzk[i+32*number]);         }         SetLine(page+1);         SetColumn(column);         for(i=0; i<16; i++)         {                 WriteByte(Hzk[i+32*number+16]);         } } void showMsg(uchar page) {    uchar i;    for(i=0; i<2.5; i++)                                    {       Display(1+i/4,page,i*16,i);    } } void drawBmp() {    int i,j,k;    SelectScreen(1);    SetLine(0);    SetColumn(0);    for(i=0; i<64; i++)    {       for(j=0; j<8; j++)       {          SetLine(j);          SetColumn(i&0x3f);          WriteByte(pic[i*8+j]);       }    }    SelectScreen(2);    SetLine(0);    SetColumn(64);    for(i=0; i<64; i++)    {       for(j=0; j<8; j++)       {          SetLine(j);          SetColumn(i&0x3f);          WriteByte(pic[512+i*8+j]);       }    } }  //////////////////////////////////////// END LCD //////////////////////////////// void main(void) {     int i,j;    InitLcd();    //drawBmp();    showMsg(3);                            while(1); }
回复

使用道具 举报

板凳
ID:584814 发表于 2021-11-10 08:08 | 只看该作者
你的答案很正确,是代码问题,所以不用贴乱码了。
点阵显示器,它并不知道显示的是啥,只是按既定的规则显示点。
既然显示的点可以成英文,就可以成汉字,也可以是图形,硬件正确就是软件问题。
回复

使用道具 举报

地板
ID:277550 发表于 2021-11-10 10:34 | 只看该作者
显示的方法,要修改,英文一般是显示5X8点阵,而中文一般是16x16点阵(还有上下半截之分,取模时还分从左往右、还是从右往左),也有24点的、或更多点的,看显示的需要。
回复

使用道具 举报

5#
ID:978297 发表于 2021-11-20 18:28 | 只看该作者
devcang 发表于 2021-11-10 10:34
显示的方法,要修改,英文一般是显示5X8点阵,而中文一般是16x16点阵(还有上下半截之分,取模时还分从左往 ...

谢谢!  很有帮助!
回复

使用道具 举报

6#
ID:978297 发表于 2021-11-20 18:30 | 只看该作者
man1234567 发表于 2021-11-10 08:08
你的答案很正确,是代码问题,所以不用贴乱码了。
点阵显示器,它并不知道显示的是啥,只是按既定的规则显 ...

下一楼回答正确,确实字母和汉字的点阵出现问题,我全部考虑8X8点阵了!
还是谢谢你!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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