找回密码
 立即注册

QQ登录

只需一步,快速开始

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

LCD12864如何显示英文啊(汉字的单片机程序我有)

  [复制链接]
跳转到指定楼层
楼主
ID:463208 发表于 2019-2-8 20:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LCD12864如何显示英文字母啊,(用51单片机)求相关例程,我有显示汉字的例程,但是不知道如何改编成显示英文字母的
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:473186 发表于 2019-2-9 02:26 | 只看该作者
LCD12864显示英文要自定义自符,因为你字库中没有这些东东

评分

参与人数 1黑币 +35 收起 理由
钻牛尖滴刘尖尖 + 35 很给力!

查看全部评分

回复

使用道具 举报

板凳
ID:432823 发表于 2019-2-9 08:21 | 只看该作者
LCD12864汉字显示用二个字节的,英文数字用一个字节。
回复

使用道具 举报

地板
ID:237868 发表于 2019-2-9 12:52 | 只看该作者
  1. #define DATA12864 P0
  2. void   write_data(char data1)  //传送数据
  3.         {
  4.             WRD=0;
  5.             RS=1;
  6.             delay(1);
  7.             DATA12864=convert(data1);  //数据口翻转
  8.             E=1;
  9.             delay(1);
  10.             E=0;
  11.            }

  12. void dis_array(uchar a,uchar b,uchar c[],uchar d,uchar e)//显示数组,(x轴,y轴,数组名,数组起始值,数组结束值)
  13. {
  14.         uchar i;
  15.         xy(a,b);
  16.         for(i=d;i<e;i++)
  17.         write_data(c[i]);
  18.        
复制代码
回复

使用道具 举报

5#
ID:472242 发表于 2019-2-9 14:18 | 只看该作者
这是一位坛友分享的写英与汉字的技巧,你可以参考一下

今天晚上花了我两个小时,就为了写一个简单的函数,可能不足40行。但确实遇到了点问题,最后还是解决了。
函数的作用就是用12864液晶显示器,来显示任意位数的数字。为什么要写这个函数呢?因为我在使用12864的过程中经常用到一些接口函数,十分的方便。比如write_char();write_string();写字符和写字符串函数。
但是要写一个数字,却没法了,我可以一位数一位数拆开来用显示字符函数。但是这样很麻烦,最要命的一点是,由于12864的地址是2个字节单位的(这里有些不专业了),可能是为了写汉字,数字不能紧紧靠在一起,中间会空一格字节,很是浪费啊。于是就有了这个写数字函数。
void write_num(uchar x,uchar y,unsigned long int num)
{
uchar i=10;
switch (y)
{
case 0: Lcd_WriteCmd(0x80+x);break;
case 1: Lcd_WriteCmd(0x90+x);break;
case 2: Lcd_WriteCmd(0x88+x);break;
case 3: Lcd_WriteCmd(0x98+x);break;
default: ;
}
while(i>=1)
{
if((uchar)(num/pow(10,i-1))!=0)
break;
i--;
}
while(i)
{
Lcd_WriteData(num/(u32)(pow(10,i-1))+'0');
num=num%(u32)(pow(10,i-1));
i--;
}   
}
首先肯定不是任意位数了,毕竟显示屏就那么大,显示位数肯定有限。我们注意到C语言里
unsigned long int型是很大的了,是32位,4个字节,最大是4294967295..
这里是十个位数,所以我们的参数是u32类型,另XY参数就是在12864上显示的坐标位置。
这个函数值是先确定要写入的坐标,然后确定数的位数,然后从高位开始一位一位写入。
定义一个变量i;初始化位10。
值得一提的是,我遇到的问题,不知道其他人有没有遇到。
用pow函数时,由于库函数定义的都是double型的,在取余数是会报错。我先加了强制类型转换。发现不行,显示很多数都出错。经过仿真调试,觉得问题就出现在pow函数这里。
于是,我自己写pow函数,数据类型都用整型的,这样就免去数据类型转换时候的数据丢失了。
这样改了以后就可以了。ok
写上我写的pow函数把,,很简单的。
u32 pow(uchar a,uchar b)
{
u32 result=1;//  初始化为 1
for(;b>0;b--)
{
result*=a;
}
return result;
}

评分

参与人数 7黑币 +148 收起 理由
chutii + 30 很给力!
Trump1438 + 16 很给力!
就你**** + 10
还有谁? + 12
zhengchong60 + 15
sheng7533967 + 15
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:477134 发表于 2020-10-18 16:43 | 只看该作者
shuisheng60 发表于 2019-2-9 14:18
这是一位坛友分享的写英与汉字的技巧,你可以参考一下

今天晚上花了我两个小时,就为了写一个简单的函数 ...

可以,很给力
回复

使用道具 举报

7#
ID:420836 发表于 2020-10-19 10:08 | 只看该作者
谢谢分享代码,我正在学习是否可以在我的项目中使用它。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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