单片机学习小组
直播中

盛越熊

7年用户 225经验值
私信 关注

为什么我定义的code数组用变量做数组下标结果取不出数来?

这两天在做一个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)

李雨欣

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

刘建华

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

李博

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

李如昊

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

更多回帖

发帖
×
20
完善资料,
赚取积分