程序非常的简单,就是先定义一个数组初始化了其中的12x5个,然后让lcd显示第1行,第4列的数字(小数点后两位),程序如下
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "lcd.h"
int main(void)
{
float propertiestot[12][5]= {{1 , 22064000, 647.1400, 0.34437, 18.0150},
{2 , 3399000, 126.2600, 0.03593, 28.0000},
{3 , 7386000, 304.2100, 0.22394, 44.0100},
{4 , 4599000, 190.5500, 0.01140, 16.0430},
{5 , 4872000, 305.3300, 0.09909, 30.0700},
{6 , 4246000, 369.8500, 0.15611, 44.0970},
{7 , 3640000, 407.8500, 0.18465, 00.0000},
{8 , 3784000, 425.1400, 0.19777, 58.1240},
{9 , 3196000, 433.7500, 0.19528, 00.0000},
{10, 3370000, 460.3900, 0.22606, 00.0000},
{11, 3364000, 469.6900, 0.24983, 00.0000},
{12, 3020000, 507.8500, 0.29600, 00.0000}};
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LCD_Init();
  OINT_COLOR=RED;
while(1)
{
if(propertiestot[0][3]<0)
{LCD_ShowString(100,150,"-");}
else
{LCD_ShowString(100,150,"+");}
LCD_ShowNum(110,150,abs(propertiestot[0][3]),2,18);
LCD_ShowString(130,150,".");
LCD_ShowNum(138,150,(abs(10*propertiestot[0][3]))%10,1,18);
LCD_ShowNum(146,150,(abs(100*propertiestot[0][3]))%10,1,18);
delay_ms(10000);
}
}
然后调试
Program Size: Code=9496 RO-data=3208 RW-data=16 ZI-data=608
显示结果为:0.34
没有问题
现在其他的都不变将这个数组的大小改为12x9,即只将上述程序中的 float propertiestot[12][5]改为float propertiestot[12][9]
然后调试
Program Size: Code=9496 RO-data=3400 RW-data=16 ZI-data=608
显示结果为:0.34
也没有问题
然后做法同上,将这个数组大小改为12x10, 即只将上述程序中的 float propertiestot[12][9]改为float propertiestot[12][10]
然后调试
Program Size: Code=9496 RO-data=3448 RW-data=16 ZI-data=608
结果显示为白屏,没有任何数字
同样的将数组大小改为12x11也显示为白屏
同样的将数组大小改为12x12这时候连白屏也不显示了直接黑屏。
(注意以上改动在keil 4软件中编译均没有问题)
用库函数版本的keil---keil 4在线调试,一步步的运行,运行几步之后就出现一下问题:
*** error 65: access violation at 0x1FFFFFFC : no 'write' permission
我想问问原子哥,这是为什么呢,以为内存不够的原因么? 怎么解决。
|