单片机 > 单片机程序设计 > 详情

基于51单片机12864液晶显示数字函数

发布时间:2020-05-29 发布时间:
|
经常去查些技术性的文章,很多人都以博客的形式写出来,说是利人利己。我觉得有道理。
回头又想到,自己申请的新浪微博也好些年了,确很少发博文,今天就发第一篇技术博客吧。
希望能养成这个习惯。。
 
好了,今天晚上花了我两个小时,就为了写一个简单的函数,可能不足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;
}
 
过两天写一个计算器程序。。。
关键字:51单片机  12864液晶  数字函数

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PIC单片机基础知识之二