常常去查些技能性的文章,很多人都以博客的方式写出来,说是利人利己。我觉得有道理。
回头又想到,自己请求的新浪微博也好些年了,确很少发博文,今日就发第一篇技能博客吧。
希望能养成这个习气。。
好了,今日晚上花了我两个小时,就为了写一个简略的函数,或许缺乏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;
}
过两天写一个计算器程序。。。