搜索
bottom↓
回复: 5

ICCAVR 转WINAVR flash存储问题

[复制链接]

出0入0汤圆

发表于 2012-9-4 15:59:03 | 显示全部楼层 |阅读模式
上面的程序在ICCAVR中可以实现液晶的正常显示,想请教用WINAVR的大师们,如何改在能在WINAVR中正常使用.
如果把字库存储到flash中,然后读取出来,谢谢.


display.H    无字库液晶,字模数据表
typedef   struct  typ_nAsciiDot8X16                  // 汉字字模数据结构
{
       unsigned char Index;               // 汉字内码索引
       unsigned char Msk[16];                       // 点阵码数据
};
// ------------------  ASCII字模的数据表 ------------------------ //
// 码表从0x20~0x7e                                                //
// 字库: C:\Documents and Settings\Administrator\桌面\解密与加密\12864液晶图片取模软件\12864液晶图片取模软件\Asc8X16E.dat 纵向取模下高位//
// -------------------------------------------------------------- //
const struct typ_nAsciiDot8X16   nAsciiDot8X16[] =              // ASCII
{
        '0',0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00,0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00, // -0-

        '1',0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00, // -1-

        '2',0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00,0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00, // -2-

        '3',0x08,0x0C,0x44,0x44,0x44,0xFC,0xB8,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00, // -3-

        '4',0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00, // -4-

        '5',0x7C,0x7C,0x44,0x44,0xC4,0xC4,0x84,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00, // -5-

        '6',0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00, // -6-

        '7',0x0C,0x0C,0x04,0x84,0xC4,0x7C,0x3C,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00, // -7-

        '8',0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00, // -8-

        '9',0x38,0x7C,0x44,0x44,0x44,0xFC,0xF8,0x00,0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00, // -9-
}
display.c
for(number=0;number<=100; number++)
  {
    if((cl==GB_16[number].Index[0])&&(ch==GB_16[number].Index[1]))
          {
             ICCAVR中的读取方式
            }
}

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-9-4 16:23:57 | 显示全部楼层
本帖最后由 ada1983 于 2012-9-4 16:25 编辑

struct typFNT_GB16               // 汉字字模数据结构
{
    signed char Index[2];               // 汉字内码索引
    unsigned char Msk[32];                       // 点阵码数据
};


struct typFNT_GB16 GB_16[] PROGMEM =          // 数据表
{
    {"电", {0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,
    0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,
    0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,
    0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,}},

    {"机", {0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFC,
    0x04,0x04,0x04,0xFE,0x04,0x00,0x00,0x00,
    0x04,0x03,0x00,0xFF,0x80,0x41,0x20,0x1F,
    0x00,0x00,0x00,0x3F,0x40,0x40,0x70,0x00,}},

    {"长", {0x80,0x80,0x80,0x80,0xFF,0x80,0x80,0xA0,
    0x90,0x88,0x84,0x86,0x80,0xC0,0x80,0x00,
    0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x23,
    0x04,0x08,0x10,0x20,0x60,0x20,0x00,0x00,}},

    {"度", {0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0xA5,
    0xA6,0xA4,0xFC,0x24,0x34,0x26,0x04,0x00,
    0x40,0x20,0x9F,0x80,0x42,0x42,0x26,0x2A,
    0x12,0x2A,0x26,0x42,0x40,0xC0,0x40,0x00,}},

};



for (k=0;k<sizeof(GB_16)/sizeof(GB_16[0]);k++)        // 查找定位
            {
                if (c1 ==pgm_read_byte(GB_16[k].Index) && c2 == pgm_read_byte(GB_16[k].Index+1))
                    break;
            }

有个关键字  PROGMEM  ,读取的时候用 pgm_read_byte();

******************************************************

以前折腾过一阵,翻了一堆程序翻出来的,你试下呢,我从ICC移植过去的,应该是试过的,时间久了......

出0入0汤圆

 楼主| 发表于 2012-9-4 16:43:45 | 显示全部楼层
ada1983 发表于 2012-9-4 16:23
struct typFNT_GB16               // 汉字字模数据结构
{
    signed char Index[2];               // 汉 ...

谢谢你,非常感谢..

出0入0汤圆

发表于 2012-9-4 16:46:00 | 显示全部楼层
忘说了,要引入这个头文件的   #include <pgmspace.h>  ......

出0入0汤圆

 楼主| 发表于 2012-9-5 10:00:50 | 显示全部楼层
ada1983 发表于 2012-9-4 16:46
忘说了,要引入这个头文件的   #include   ......

if (c1 ==pgm_read_byte(GB_16[k].Index) && c2 == pgm_read_byte(GB_16[k].Index+1))
最主要是你这种读取方式启发了我,  如何取得结构体的数组成员地址...我仔细看了#include "Pgmspace.h"这个头文件定义,是不是现在都不用typedef char PROGMEM prog_char这定义里面的prog_char,  我在studio 6里面如果这样定义: prog_char flash_a=100;   则会提示prog_char 未定义.现在是不是统一用  PROGMEM,比如 unsigned char a PROGMEM =100;这样定义的话,就不会报错..还请明示,刚从ICCAVR转过来,对这个非常不解.

出0入0汤圆

发表于 2012-9-5 10:38:41 | 显示全部楼层
const unsigned char sttBox[256] PROGMEM ={  
        0x11,0x11,0x11,0x11,0x11,0x11,0x11, 0x11,0x11,0x11,0x11,0x11,0x11,0x10}

如上,都是直接在定义最后加  PROGMEM  即可......

prog_char 没研究过,当时移植了好用就没深究了,主要还是用ICC的:)



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

本版积分规则

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

GMT+8, 2024-5-15 10:20

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

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