发 帖  
原厂入驻New
为什么我定义的code数组用变量做数组下标结果取不出数来?
527 Code LCD 数组
分享
这两天在做一个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 };        //大数码管
0
2019-8-8 02:53:40   评论 分享淘帖 邀请回答

相关问题

18个回答
问题已经解决了,应该和芯片的内存分布有关(可能不连续吧),把各个大数组改成256字节的整数倍就没问题了,类似rom的扇区。话说ram也有扇区的说法吗?
2019-8-8 05:29:40 评论

举报

Value是什么类型的变量?初始值是多少?
2019-8-8 05:45:46 评论

举报

描述的现象与数组的code修饰无关吧
2019-8-8 05:51:03 评论

举报

问题描述不清,问题难解决了
2019-8-8 06:03:28 评论

举报

2019-8-8 06:16:48 评论

举报

就是这么简单,我也不知道还能怎么描述啊,我感觉完全没问题,但它就是这样的现象。。。要不我把工程上传了?
2019-8-8 06:24:58 评论

举报

看2楼
别轻易上传程序、贴程序,轻易不看的
2019-8-8 06:30:48 评论

举报

哎,我明天再试试吧,这屏我都弄两天了
2019-8-8 06:41:28 评论

举报

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();
        }
}
只是想先试验一下循环计数,结果出来一个乱七八糟的数还超范围,还不会递增,郁闷
2019-8-8 06:56:13 评论

举报

按理说应该显示000010才对。你的代码中意思是想把i中的值显示出来,但是代码其实只能显示Value,i虽然定义了,但是没有使用。delay()函数延时是多少?你调试一下看看就明白了。
LED_G0 = LED1_Disp[Value%1000000/100000]这一句的意思是显示十万位,其余的以此类推。
2019-8-8 07:10:03 评论

举报

哈,我写错了,不过问题不在这里,找到解决方法了。
2019-8-8 07:29:47 评论

举报

可能是RAM不足导致,我把几个u16的大数组改成u8就可以了,算了一下超过大概4k就不行了。。。我用的是SCT8A8K64S4A12,应该是有8k的内部扩展RAM的吧,怎么会不足呢
2019-8-8 07:44:02 评论

举报

类型定义成long型试试
2019-8-8 08:03:47 评论

举报

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];  
2019-8-8 08:19:58 评论

举报

u8类型最大数也只255吧
2019-8-8 08:38:07 评论

举报

一个8位的数去对1000000求余也没意思呀
2019-8-8 08:57:51 评论

举报

这个程序从大体来看没什么太大的错误,但是有以下疑点
第一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里兴许有问题   
2019-8-8 09:16:39 评论

举报

LED_G5 = LED1_Disp[Value%1000000%100000%10000%1000%100%10];
这样的语句真让人头疼
2019-8-8 09:29:08 评论

举报

只有小组成员才能发言,加入小组>>

886个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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