完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这两天在做一个LCD实验,用1621驱动一个定制屏,定义了一个code数组来存段码。结果用变量取数组的元素显示不出,用常量却能正常显示。。。。
比如这样: LED_G0 = LED1_Disp[Value%1000000/100000]; LED_G1 = LED1_Disp[Value%1000000%100000/10000]; LED_G2 = LED1_Disp[Value%1000000%100000%10000/1000]; LED_G3 = LED1_Disp[Value%1000000%100000%10000%1000/100]; LED_G4 = LED1_Disp[Value%1000000%100000%10000%1000%100/10]; LED_G5 = LED1_Disp[Value%1000000%100000%10000%1000%100%10]; HT1621_LCD(); //写入数据 给变量赋值了(比如10),就是显示不出想要的数字出来(显示207。。。),甚至对变量加加减减显示的数都不改变。 然后我改成这样: LED_G0 = LED1_Disp[123456%1000000/100000]; LED_G1 = LED1_Disp[123456%1000000%100000/10000]; LED_G2 = LED1_Disp[123456%1000000%100000%10000/1000]; LED_G3 = LED1_Disp[123456%1000000%100000%10000%1000/100]; LED_G4 = LED1_Disp[123456%1000000%100000%10000%1000%100/10]; LED_G5 = LED1_Disp[123456%1000000%100000%10000%1000%100%10]; HT1621_LCD(); //写入数据 就能正常显示123456了。换成其他数字,几个数字轮流显示也行得通(123456,234567,345678这样)。 究竟是什么原因,跟code这个关键字有关吗,我还把Memory Model改成Large了,有影响吗? 数组定义是这样的: //LED显示表(七段码) code u8 LED1_Disp[29] = { 0XF5,0X60,0XB6,0XF2,0X63,0XD3,0XD7,0X30,0XF7,0XF3, 0X77,0XC7,0X95,0XE6,0X97,0X17,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00 }; //大数码管 |
|
相关推荐
18个回答
|
|
问题已经解决了,应该和芯片的内存分布有关(可能不连续吧),把各个大数组改成256字节的整数倍就没问题了,类似rom的扇区。话说ram也有扇区的说法吗?
|
|
|
|
Value是什么类型的变量?初始值是多少?
|
|
|
|
描述的现象与数组的code修饰无关吧
|
|
|
|
问题描述不清,问题难解决了
|
|
|
|
u8,初始值10
|
|
|
|
就是这么简单,我也不知道还能怎么描述啊,我感觉完全没问题,但它就是这样的现象。。。要不我把工程上传了?
|
|
|
|
|
|
|
|
哎,我明天再试试吧,这屏我都弄两天了
|
|
|
|
void main()
{ u8 Value=10,i=0; BU = 0; GPIO_Configuration(); HT1621(); Init_LCD_Display(); while(1) { LED_G0 = LED1_Disp[Value%1000000/100000]; LED_G1 = LED1_Disp[Value%1000000%100000/10000]; LED_G2 = LED1_Disp[Value%1000000%100000%10000/1000]; LED_G3 = LED1_Disp[Value%1000000%100000%10000%1000/100]; LED_G4 = LED1_Disp[Value%1000000%100000%10000%1000%100/10]; LED_G5 = LED1_Disp[Value%1000000%100000%10000%1000%100%10]; i++; if(i>100) i=10; HT1621_LCD(); delay(); } } 只是想先试验一下循环计数,结果出来一个乱七八糟的数还超范围,还不会递增,郁闷 |
|
|
|
按理说应该显示000010才对。你的代码中意思是想把i中的值显示出来,但是代码其实只能显示Value,i虽然定义了,但是没有使用。delay()函数延时是多少?你调试一下看看就明白了。
LED_G0 = LED1_Disp[Value%1000000/100000]这一句的意思是显示十万位,其余的以此类推。 |
|
|
|
哈,我写错了,不过问题不在这里,找到解决方法了。
|
|
|
|
可能是RAM不足导致,我把几个u16的大数组改成u8就可以了,算了一下超过大概4k就不行了。。。我用的是SCT8A8K64S4A12,应该是有8k的内部扩展RAM的吧,怎么会不足呢
|
|
|
|
类型定义成long型试试
|
|
|
|
LED_G4 = LED1_Disp[Value%1000000%100000%10000%1000%100/10];
LED_G5 = LED1_Disp[Value%1000000%100000%10000%1000%100%10]; 这个代码 是不是 写得太长了. 换成下面这个写法是不是看着舒服些. LED_G4 = LED1_Disp[Value/10%10]; LED_G5 = LED1_Disp[Value%10]; |
|
|
|
u8类型最大数也只255吧
|
|
|
|
一个8位的数去对1000000求余也没意思呀
|
|
|
|
这个程序从大体来看没什么太大的错误,但是有以下疑点
第一Value变量类型设置u8,有些小做大255。 第二你这赋值数组的计算方法不对 LED_G1 = LED1_Disp[Value%1000000%100000/10000]; LED_G2 = LED1_Disp[Value%1000000%100000%10000/1000]; 这个代码写的算法不太对. 换成下面这个. LED_G1 = LED1_Disp[Value%100000/10000]; LED_G2 = LED1_Disp[Value%10000/1000]; 第三个是写数据函数 HT1621里兴许有问题 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3300 浏览 9 评论
2974 浏览 16 评论
3476 浏览 1 评论
9036 浏览 16 评论
4068 浏览 18 评论
1152浏览 3评论
595浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
582浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2320浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1881浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-11 17:26 , Processed in 1.512423 second(s), Total 84, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号