各位大虾们,小弟写了个12864的程序,在ATmega16上运行正常,烧到ATmega8L上就不行了,下面是详细的情况

各位大虾们,小弟写了个12864的程序,在ATmega16上运行正常,烧到ATmega8L上就不行了,下面是详细的情况,第1张

哇靠,这样的程序不手物神修改直接弄上去,能行蚂含才见毕亏鬼呢。

#include <iom16v.h>

也不改下#include <iom8v.h>

还有这是怎么写的程序,如此凌乱

array subscript is above array bounds

数组下标大于数组边界

t = (time_buf[4] >>4) + '0' 这句话中 '0'就等于0x30啊, 所以族祥t只是0x30以上

SEG_CODE[t] 应该是为了查表找字行码, SEG_CODE 的定义 可能是10 或者16 或者 。。

如果t值大于数组定义 肯定报错啊。

上面是语法上的问题分析

下面我说下逻辑上的问题

你用 (time_buf[4] >>4) + '0'做棚 是想得到ASCII 在有字库的系统中是可以的,如果是avr 那么我想到了12864lcd字库版本。

而PORTD =SEG_CODE[t]应该是驱动数码管用的。 t值不是ascii 应该是正常的10进制数。

以上只做交纯穗则流 如有错误欢迎批评指正

基于TLV2542的双通毕租道数字电压表程序设计简介:基于TLV2542的双通道数字电压表采用AVR单片机ATMEGA16作为主控芯片,数模转换采用TI公司生产的带自动掉电的、低功耗、12位、双通道串行模/数转换器TLV2542,采集后的电压值在带字库的字符型液晶12864上显示。编程采用AVR Studio4+WinAVR构成的GCC编译环境。 系统源程序及其手数卖注释如下所示: /*AVR单片机ATMEGA16在GCC下编程,*/ /*完成毕逗tlv2542双通道ADC的编程,*/ /*并将ADC采样的值送12864显示*/ #define F_CPU 2000000UL #include <avr/io.h>#include <util/delay.h>#include <math.h>#include <avr/interrupt.h>#define nop() asm("NOP") /*液晶显示引脚定义*/

en_1 _delay_us(200) busy_0 while((PINB&0x80)==1) en_0 busy_1 } /*写命令*/ void write_com(unsigned char cmd) { checkbusy() rs_0 rw_0 en_1 _delay_us(1) PORTB=cmd _delay_us(2) en_0 } /*写数据*/ void write_date(unsigned char dat)

{ checkbusy() rs_1 rw_0 en_1 _delay_us(2) PORTB=dat _delay_us(2) en_0 } /*液晶初始化*/ void init_lcd() { DDRB=0xff PORTB=0xff DDRD=0xff PORTB=0xff write_com(0x30) _delay_us(2) write_com(0x0c) _


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8273329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存