#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) _
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)