搜索
bottom↓
回复: 9

液晶N5110 驱动 编译常量不能读出? PROGMEM const内详

[复制链接]

出0入0汤圆

发表于 2013-7-21 10:54:23 | 显示全部楼层 |阅读模式
本帖最后由 wmsky 于 2013-7-21 11:05 编辑

历史,上一贴,想把89s52 的keil 程序转为AVR M8这么难啊
http://www.amobbs.com/thread-5542767-1-1.html
解决了 IO转换问题 和include 问题

编译环境 Atmel studio 6.1
新的问题,定义在Flash里显示不正常
PROGMEM const  unsigned char   Font_code[][6] = {   
        {0x00,0x00,0x00,0x00,0x00,0x00},// (0)
        {0x00,0x00,0x00,0x4F,0x00,0x00},//!(1)



定义在内存里显示是正常
unsigned char   Font_code[][6] = {   
        {0x00,0x00,0x00,0x00,0x00,0x00},// (0)
        {0x00,0x00,0x00,0x4F,0x00,0x00},//!(1)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-7-21 11:51:23 | 显示全部楼层
定义在flash中的数组要用pgm_read_byte()读出~~~

出0入0汤圆

 楼主| 发表于 2013-7-21 12:09:11 | 显示全部楼层
elsonx 发表于 2013-7-21 11:51
定义在flash中的数组要用pgm_read_byte()读出~~~

谢谢,回复,好像见过这个,我试试

出0入0汤圆

 楼主| 发表于 2013-7-21 13:37:50 | 显示全部楼层
本帖最后由 wmsky 于 2013-7-21 16:46 编辑
elsonx 发表于 2013-7-21 11:51
定义在flash中的数组要用pgm_read_byte()读出~~~


void LCD_printc(unsigned char x, unsigned char y, unsigned char c_dat)
{
        unsigned char i;
    c_dat -=32 ;                //查表
        x *= 6;                                //宽6

        LCD_pos_byte(x, y);        //坐标
        for(i = 0; i < 6; i++)
        LCD_write_dat(Font_code[c_dat] [ i ]) ;  ///
}  //

还是不会,请教上面函数怎么改才行呢?

//

出0入0汤圆

发表于 2013-7-21 16:21:34 | 显示全部楼层
wmsky 发表于 2013-7-21 13:37
void LCD_printc(unsigned char x, unsigned char y, unsigned char c_dat)
{
        unsigned char i;

LCD_write_dat(pgm_read_byte(Font_code[c_dat+i]));

出0入0汤圆

 楼主| 发表于 2013-7-21 16:56:01 | 显示全部楼层
本帖最后由 wmsky 于 2013-7-21 19:15 编辑
elsonx 发表于 2013-7-21 16:21
LCD_write_dat(pgm_read_byte(Font_code[c_dat+i]));


谢谢你。看了好多例子都不行,好晕,换回AVR studio 4试试

出0入0汤圆

 楼主| 发表于 2013-7-22 09:31:56 | 显示全部楼层
礼拜一了,顶一顶,继续求解

出0入0汤圆

发表于 2013-7-22 23:30:01 | 显示全部楼层
开一个缓冲区 先把FLASH内的数据prog_read_byte读出来到缓冲区 再把缓冲区的数据写进LCD  这样应该可以了吧

出0入0汤圆

 楼主| 发表于 2013-7-23 11:17:43 | 显示全部楼层
本帖最后由 wmsky 于 2013-7-23 11:19 编辑
yklstudent 发表于 2013-7-22 23:30
开一个缓冲区 先把FLASH内的数据prog_read_byte读出来到缓冲区 再把缓冲区的数据写进LCD  这样应该可以了吧 ...


谢谢,试了还是不行,用的是Atmel studio6.1的编译。
中间用了
学习进程  卡在这个点上了,

/*--------------------------------------------------------------*/
//液晶字符输出(6*8字体)
//x: 0 - 13
//y: 0 - 5
void LCD_printc(unsigned char x, unsigned char y, unsigned char c_dat)
{
        unsigned char i;
       unsigned char a;     //debug

        c_dat -=32 ;                //查表
        x *= 6;                                //宽6

        LCD_pos_byte(x, y);        //坐标
        for(i = 0; i < 6; i++)
        //LCD_write_dat(Font_code[c_dat] [ i ] );
          a=prog_read_byte(Font_code[c_dat] [ i ] );     //prog_read_byte(&(Font_code[c_dat] [ i ] ));    //debug
        LCD_write_dat(a);
}

出0入0汤圆

 楼主| 发表于 2013-7-23 16:22:01 | 显示全部楼层
问题解决了
参考了E文help。
Optimization 优化改为  none(-00)
LCD_write_dat(Font_code[c_dat][i]) ;  改为:
LCD_write_dat(pgm_read_byte(&(Font_code[c_dat] [ i ]))) ;

常量文件定义:
PROGMEM const unsigned char   Font_code[][6]     = {
        {0x00,0x00,0x00,0x00,0x00,0x00},// (0)
        {0x00,0x00,0x00,0x4F,0x00,0x00},//!(1)

同时再谢谢上面各位的回复。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 01:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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