最新日志

发表于:2007-11-27 20:15:42
标签:C  液晶  字模  

1

[老王卖瓜]使用标准字模在液晶点阵任意位置显示字符(一)

        标准的字模一般都是以字节为单位存储的(每8个点存储在一个字节中)。在单色LCD点阵屏幕上显示字符,并非难事。然而,如果要在LCD的任意x,y坐标显示字符,就稍微有点麻烦了。为了解决这个问题,需要一系列的函数。前两天搞定了第一个核心函数,暂且放到这里吧。应该不会做更大的修改了。

/***********************************************************
*   函数说明:位图偏移函数                                 *
*   输入:    输入缓冲,位移,输入长度,输出缓冲           *
*   输出:    输出缓冲指针                                 *
*   调用函数:无                                           *
***********************************************************/
uint8 Character_BitMap_Offset(uint8 *pcInputBuffer,uint8 chOffset,
                uint8 pcInputLength,uint8 *pcOutputBuffer)
{
    uint8 n = 0;
    uint8 chByteOffset = chOffset >> 3;
    chOffset &= 0x07;
    if ((pcInputBuffer == NULL) || (pcOutputBuffer == NULL))
    {
        return NULL;
    }
   
    pcOutputBuffer[chByteOffset] = pcInputBuffer[0] >> chOffset;
   
    for (n = 1 + chByteOffset;n < pcInputLength+chByteOffset;n++)
    {
        pcOutputBuffer[n] = pcInputBuffer[n - chByteOffset] >> chOffset;
    }
    pcOutputBuffer[n] = (pcInputBuffer[pcInputLength-1]
                        & (BIT(chOffset)-1))<< (8 - chOffset);
   
    if (chOffset)
    {
        return pcInputLength + chByteOffset + 1;
    }
    else
    {
        return pcInputLength + chByteOffset;
    }
}

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(535)
发表于:2007-11-23 15:54:33
标签:编程体会  

0

[绝对原创]对学习编程的一点个人观点

关于编程,有人说学习语法容易,写成具体的语句就难了。小时候学习语文还不是一样?语法人人都会,造句还不是难倒了很多小英雄汉。有人说学习算法容易,要写成具体的程序就难了。写文章还不是一样?各种修辞手法人人都会,写出好文章的人还不是凤毛麟角?现在,如果有人抱怨:写程序容易,写软件很难。我们又要笑了:文章人人会写,能写出精彩小说的又有几个? 
    编写程序,甚至编写软件,不同于一般的应用文写作。它是一种创作,一种需要人们运用自己的聪明才智,经过一定的思维过程,通过动手实践才能完成的艺术。从某种意义上说,编写程序更像是文学创作——一个火花般闪耀的灵感,一种轻松屈驾语言的能力,再加上作者一颗对生活充满感悟的心。一杯咖啡抑或是一壶清茶,悠悠的散发着暖香……伴随着轻快而又坚定的键盘敲击声,屏幕上的光标流水般的跳动……不用多久,随着一个让人舒畅的懒腰,一段佳作跃然纸上。 
    编写程序真的很难么?如果你只把它看作是一堆前人的技巧和规范机械堆积的结果,那么,学习这些技巧、强记这些规范,对任何人来说都不是一件轻松的事情。编写程序或者说编写软件是一种艺术,它需要作者用一种对待艺术的心态去学习它。它讲求在生活中感悟,捕捉那些日后能伴你度过难关的灵感;它讲求在实践中学习,唯独亲手做过才可以体会其中的奥妙;它更讲求在与他人的交流中成长,唯独在你的拥有了生活的积累和实践的经验以后,也许不经意间的一点交流就会让你从共鸣中得到升华。 
    这段文字其实并不像你想象的那样脱离实际、纯属作者的“病态陶醉”。对初学者来说,在新的领域面前一穷二白,要学的东西太多太多。对于编程这种非常讲求“语感和思想”的技能来说,如果不能掌握正确的学习方法,一味机械的试图学习那些“高深的语法”和“看不懂的技巧”,胡乱模仿些别人的“优秀风格”,不能说完全无所得,只能说会学得很累而且往往事倍功半——久而久之,信心丧失殆尽,半途而废,叫人看了怎能不觉得可惜? 
    学习编程,做自己便好。学习眼前能够看懂的内容,多写自己会写的程序。对于已经学到的东西,仔细的体会、思考,挖掘其中的发展;学会用一种研究的心态去考察你的每一个疑问;不可以轻易的人云亦云,在网上看了别人无责任的经验、甚至是写错了、丢在一边、懒得改的东西之后,就放弃了自己的探索;要学会坚持自我,遇到别人先进的做法,在自己还没体会到自己当前这种做法的劣势之前,不要轻易盲从;同样,使用了先进的方法,在没有同时理解这种做法的优点和缺点之前,请不要轻易的就感叹“这种方法好,跟贴顶一下!”。“大师高手宁有种乎?”坚持“体会到了才是学到了”的态度,最终形成自己的风格,形成自己的技巧

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 原创

评论(0) | 阅读(452)
发表于:2007-11-23 15:51:00
标签:C  工程模板  串口  调度器  

1

[工程模板][AVR][ICC]双串口通讯模板(含调度器)

rar双串口通讯模板(含调度器)

------------------------------------模板结构-------------------------------------

[说明文档]
[MY_LIB_H]
LIB_Config.h
RD_MacroAndConst.h
RD_UseAVRPORTBit.h
RD_UseBITs.h
RD_UseCooperatingMiniOs.h
RD_ADT_QUEUE.h
RD_Serial_Buffer.h
[MY_LIB_C]
RD_UseCooperatingMiniOs.c
RD_ADT_QUEUE.c
RD_Serial_Buffer.c
[平台声明库]
PF_Config.h
HD_Support.h
EX_Support.h
[平台函数库]
HD_Support.c
EX_Support.c
PF_Config.c
[系统声明库]
PROC_Config.h
[系统函数库]
PROC_Config.c
[Main]
System.c

------------------------------------模板结构-------------------------------------

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(1) | 阅读(453)
发表于:2007-11-23 15:48:41
标签:C  工程模板  串口  调度器  

1

[工程模板][AVR][ICC]单串口通讯模板(含调度器)

rar单串口通讯模板(含调度器)

------------------------------------模板结构----------------------------------

[说明文档]
[MY_LIB_H]
LIB_Config.h
RD_MacroAndConst.h
RD_UseAVRPORTBit.h
RD_UseBITs.h
RD_UseCooperatingMiniOs.h
RD_UseSerialBuff.h
[MY_LIB_C]
RD_UseCooperatingMiniOs.c
RD_UseSerialBuff.c
[平台声明库]
PF_Config.h
HD_Support.h
EX_Support.h
[平台函数库]
HD_Support.c
EX_Support.c
PF_Config.c
[系统声明库]
PROC_Config.h
[系统函数库]
PROC_Config.c
[Main]
System.c

------------------------------------模板结构----------------------------------

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(400)
发表于:2007-11-23 15:43:09
标签:C  工程模板  

1

[工程模板][AVR][ICC]基本工程模板(含调度器)

rar基本工程模板(含调度器)

--------------------------------模板结构----------------------------------

[说明文档]
[MY_LIB_H]
LIB_Config.h
RD_MacroAndConst.h
RD_UseAVRPORTBit.h
RD_UseBITs.h
RD_UseCooperatingMiniOs.h
[MY_LIB_C]
RD_UseCooperatingMiniOs.c
[平台声明库]
PF_Config.h
HD_Support.h
EX_Support.h
[平台函数库]
HD_Support.c
EX_Support.c
PF_Config.c
[系统声明库]
PROC_Config.h
[系统函数库]
PROC_Config.c
[Main]
System.c

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(349)
发表于:2007-11-23 15:40:46
标签:C  工程模板  调度器  

1

[工程模板][AVR][ICC]基本工程模板

rar基本工程模板

--------------------------------模板结构----------------------------------

[说明文档]
[MY_LIB_H]
LIB_Config.h
RD_MacroAndConst.h
RD_UseAVRPORTBit.h
RD_UseBITs.h
[MY_LIB_C]
[平台声明库]
PF_Config.h
HD_Support.h
EX_Support.h
[平台函数库]
EX_Support.c
HD_Support.c
PF_Config.c
[系统声明库]
[系统函数库]
[Main]
System.c

--------------------------------模板结构----------------------------------

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(304)
发表于:2007-11-23 15:37:32
标签:C  位段  

1

[函数库][AVR]8位单片机常见数据类型位拆分(位段)

RD_UseBits.h

--------------------------------------------------------------------------------

#ifndef _USE_BITS_H_
#define _USE_BITS_H_
/***********************************************************
*   声明库说明:系统位段操作函数库                         *
*   版本:      v1.01                                      *
*   作者:      傻孩子                                     *
*   创建时间:  2006年5月4日                               *
* -------------------------------------------------------- *
*  [支 持 库]                                              *
*   支持库名称:                                           *
*   需要版本:                                             *
*   支持库说明:                                           *
* -------------------------------------------------------- *
*  [版本更新]                                              *
*   修改:      傻孩子                                     *
*   修改日期:  2007年9月3日                               *
*   版本:      v1.01                                      *
* -------------------------------------------------------- *
*  [版本历史]                                              *
*      v1.00   包含了从32位到8位对16位8位4位1位的各种映射  *
*              允许通过功能宏定义中定义的宏拆分任意的地址  *
*      v1.01   修改了一处BUG                               *
* -------------------------------------------------------- *
*  [使用说明]                                              *
*          1、该头文件属于基层头文件。                     *
*          2、兼容32位16位8位单片机系统。                  *
*          3、饱含该头文件以后,可以通过功能宏定义中定义的 *
*             宏拆分任意地址,也可以直接使用后面自定义的位 *
*             段类型定义新的位段变量或者指针。             *
*          4、需要注意的是,使用功能宏定义中的宏只是将指定 *
*             变量的地址强行邦定为指定类型的位段,并不真正 *
*             分配一个地址空间,如果指定类型的位段长度和地 *
*             址实际长度不相同将会导致不可预期的后果。     *
***********************************************************/

/********************
*   系 统 宏 定 义  *
********************/

/*------------------*
*   常 数 宏 定 义  *
*------------------*/
   
/*------------------*
*   功 能 宏 定 义  *
*------------------*/
# define SET_BIT8_FORMAT(Addr)     (*((volatile BYTEBIT *)&Addr))
# define SET_BYTE_DIV_2(Addr)      (*((volatile BYTE2HBYTE *)&Addr))

# define SET_BIT16_FORMAT(Addr)    (*((volatile WORDBIT *)&Addr))
# define SET_WORD_DIV_2(Addr)      (*((volatile WORD2BYTE *)&Addr))
# define SET_WORD_DIV_4(Addr)      (*((volatile WORD2HBYTE *)&Addr))

# define SET_BIT32_FORMAT(Addr)    (*((volatile DWORDBIT *)&Addr))
# define SET_DWORD_DIV_2(Addr)     (*((volatile DWORD2WORD *)&Addr))
# define SET_DWORD_DIV_4(Addr)     (*((volatile DWORD2BYTE *)&Addr))
# define SET_DWORD_DIV_8(Addr)     (*((volatile DWORD2HBYTE *)&Addr))

/********************
* 结 构 体 定 义 区 *
********************/

/*------------------*
*   8位变量位映射   *
*------------------*/
typedef struct BYTE_BIT
{
    unsigned BIT0:1;
    unsigned BIT1:1;
    unsigned BIT2:1;
    unsigned BIT3:1;
    unsigned BIT4:1;
    unsigned BIT5:1;
    unsigned BIT6:1;
    unsigned BIT7:1;
}BYTEBIT;

/*------------------*
*   16位变量位映射  *
*------------------*/
typedef struct WORD_BIT
{
    unsigned BIT0:1;
    unsigned BIT1:1;
    unsigned BIT2:1;
    unsigned BIT3:1;
    unsigned BIT4:1;
    unsigned BIT5:1;
    unsigned BIT6:1;
    unsigned BIT7:1;
   
    unsigned BIT8:1;
    unsigned BIT9:1;
    unsigned BIT10:1;
    unsigned BIT11:1;
    unsigned BIT12:1;
    unsigned BIT13:1;
    unsigned BIT14:1;
    unsigned BIT15:1;
}WORDBIT;

/*------------------*
*  32位变量位映射   *
*------------------*/
typedef struct DWORD_BIT
{
    unsigned BIT0:1;
    unsigned BIT1:1;
    unsigned BIT2:1;
    unsigned BIT3:1;
    unsigned BIT4:1;
    unsigned BIT5:1;
    unsigned BIT6:1;
    unsigned BIT7:1;
   
    unsigned BIT8:1;
    unsigned BIT9:1;
    unsigned BIT10:1;
    unsigned BIT11:1;
    unsigned BIT12:1;
    unsigned BIT13:1;
    unsigned BIT14:1;
    unsigned BIT15:1;
   
    unsigned BIT16:1;
    unsigned BIT17:1;
    unsigned BIT18:1;
    unsigned BIT19:1;
    unsigned BIT20:1;
    unsigned BIT21:1;
    unsigned BIT22:1;
    unsigned BIT23:1;
   
    unsigned BIT24:1;
    unsigned BIT25:1;
    unsigned BIT26:1;
    unsigned BIT27:1;
    unsigned BIT28:1;
    unsigned BIT29:1;
    unsigned BIT30:1;
    unsigned BIT31:1;
}DWORDBIT;

/*------------------*
*  32位变量4分映射  *
*------------------*/
typedef struct DWORD_BYTE
{
    unsigned BYTEA:8;
    unsigned BYTEB:8;
    unsigned BYTEC:8;
    unsigned BYTED:8;
}DWORD2BYTE;

/*------------------*
*  32位变量2分映射  *
*------------------*/
typedef struct DWORD_WORD
{
    unsigned WORDA:16;
    unsigned WORDB:16;
}DWORD2WORD;

/*------------------*
*  32位变量16分映射 *
*------------------*/
typedef struct DWORD_HBYTE
{
    unsigned BYTEAL:4;
  unsigned BYTEAH:4;
  
  unsigned BYTEBL:4;
  unsigned BYTEBH:4;
  
  unsigned BYTECL:4;
  unsigned BYTECH:4;
  
  unsigned BYTEDL:4;
  unsigned BYTEDH:4;
  
}DWORD2HBYTE;

/*------------------*
* 16位变量2分映射   *
*------------------*/
typedef struct WORD_BYTE
{
    unsigned BYTEA:8;
    unsigned BYTEB:8;
}WORD2BYTE;

/*------------------*
*  16位变量4分映射  *
*------------------*/
typedef struct WORD_HBYTE
{
    unsigned BYTEAL:4;
  unsigned BYTEAH:4;
  
  unsigned BYTEBL:4;
  unsigned BYTEBH:4;
}WORD2HBYTE;

/*------------------*
*  8位变量2分映射   *
*------------------*/
typedef struct BYTE_DIV2
{
    unsigned BYTEAL:4;
    unsigned BYTEAH:4;
}BYTE2HBYTE;

#endif

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(382)
发表于:2007-11-23 15:35:29
标签:AVR  函数库  位操作  

1

[函数库][AVR][ICC]端口位操作支持库

RD_UseAVRPortBit.h

---------------------------------------------------------------------------------

#ifndef _USE_AVR_PORT_BIT_H_
#define _USE_AVR_PORT_BIT_H_
/***********************************************************
*   声明库说明:AVR位操作通用支持库                        *
*   版本:      v1.10                                      *
*   作者:      傻孩子                                     *
*   创建日期:  2006年4月25日                              *
* -------------------------------------------------------- *
*  [支 持 库]                                              *
*   库名称:    RD_UseBITs.h                               *
*   需要版本:  v1.00 &abv                                 *
*   支持库说明:系统位段操作函数库                         *
*                                                          *
*   库名称:    RD_MacroAndConst.h                         *
*   需要版本:  v0.01 &abv                                 *
*   支持库说明:系统常用宏定义库                           *
* -------------------------------------------------------- *
*  [版本更新]                                              *
*   修改:      傻孩子                                     *
*   修改日期:  2006年5月4日                               *
*   版本:      v1.01                                      *
*                                                          *
*   修改:      傻孩子                                     *
*   修改日期:  2007年7月17日                              *
*   版本:      v1.10                                      *
* -------------------------------------------------------- *
*  [版本历史]                                              *
*     前身版本  在该版本最终生成之前,经历过针对各种芯片的 *
*               专用版本,这些版本提供了针对PORT的位操作和 *
*               部分PIN、DDR的位操作。                     *
*        v1.00  该版本支持几乎所有的芯片,具有完善的宏定义 *
*               系统,相对前身版本最小的资源占用。增加了对 *
*               各种常用变量用户类型的定义。               *
*        v1.01  增加了关于布尔型变量类型的宏定义。         *
*               修改了头文件的位段映射模式。通过统一的头文 *
*               件RD_UseBITs.h来实现位段类型的定义和声明。 *
*        v1.10  规范了宏的名称DDR_PXn PIN_PXn              *
* -------------------------------------------------------- *
*  [使用说明]                                              *
*            1、在使用该头文件之前先包含您需要使用的芯片   *
*               的官方头文件,例如:# include <iom8v.h>    *
*            2、如果你不是ICC的用户,请在使用该头文件之前  *
*               先绑定各个端口的地址到相应的宏定义上,例如 *
*               # define PORTA (*((volatile char *)0x3b))  *
*            3、如果你使用的是非ICC系统,请在调用文件之前  *
*               定义宏 _USE_NON_ICC_IDE。                  *
*            4、可以使用SET_BITS_FORMAT(变量)把任意变量拆  *
*               成位定义的模式。                           *
***********************************************************/

/********************
* 头 文 件 配 置 区 *
********************/
# include "RD_UseBITs.h"

/********************
*   系 统 宏 定 义  *
********************/

/*------------------*
*   常 数 宏 定 义  *
*------------------*/
#ifndef PDIR_OUT
    # define PDIR_OUT            0x01
#endif
#ifndef PDIR_IN
    # define PDIR_IN             0x00
#endif

/*------------------*
* 硬 件 连 接 定 义 *
*------------------*/

/*---------------- PORT口绑定 ---------------*/
#ifdef PORTA
    # define PORTA_BIT     SET_BIT8_FORMAT(PORTA)
#endif
#ifdef PORTB
    # define PORTB_BIT     SET_BIT8_FORMAT(PORTB)
#endif
#ifdef PORTC
    # define PORTC_BIT     SET_BIT8_FORMAT(PORTC)
#endif
#ifdef PORTD
    # define PORTD_BIT     SET_BIT8_FORMAT(PORTD)
#endif
#ifdef PORTE
    # define PORTE_BIT     SET_BIT8_FORMAT(PORTE)
#endif
#ifdef PORTF
    # define PORTF_BIT     SET_BIT8_FORMAT(PORTF)
#endif
#ifdef PORTG
    # define PORTG_BIT     SET_BIT8_FORMAT(PORTG)
#endif


/*---------------- DDR 口绑定 ---------------*/
#ifdef DDRA
    # define DDRA_BIT     SET_BIT8_FORMAT(DDRA)
#endif
#ifdef DDRB
    # define DDRB_BIT     SET_BIT8_FORMAT(DDRB)
#endif
#ifdef DDRC
    # define DDRC_BIT     SET_BIT8_FORMAT(DDRC)
#endif
#ifdef DDRD
    # define DDRD_BIT     SET_BIT8_FORMAT(DDRD)
#endif
#ifdef DDRE
    # define DDRE_BIT     SET_BIT8_FORMAT(DDRE)
#endif
#ifdef DDRF
    # define DDRF_BIT     SET_BIT8_FORMAT(DDRF)
#endif
#ifdef DDRG
    # define DDRG_BIT     SET_BIT8_FORMAT(DDRG)
#endif

/*---------------- PIN 口绑定 ---------------*/
#ifdef PINA
    # define PINA_BIT     SET_BIT8_FORMAT(PINA)
#endif
#ifdef PINB
    # define PINB_BIT     SET_BIT8_FORMAT(PINB)
#endif
#ifdef PINC
    # define PINC_BIT     SET_BIT8_FORMAT(PINC)
#endif
#ifdef PIND
    # define PIND_BIT     SET_BIT8_FORMAT(PIND)
#endif
#ifdef PINE
    # define PINE_BIT     SET_BIT8_FORMAT(PINE)
#endif
#ifdef PINF
    # define PINF_BIT     SET_BIT8_FORMAT(PINF)
#endif
#ifdef PING
    # define PING_BIT     SET_BIT8_FORMAT(PING)
#endif

/*------------------*
*   端 口 宏 定 义  *
*------------------*/

/*-------------PORT位操作定义--------------*/
#ifdef PORTA
    # define _PA0        PORTA_BIT.BIT0
    # define _PA1        PORTA_BIT.BIT1
    # define _PA2        PORTA_BIT.BIT2
    # define _PA3        PORTA_BIT.BIT3
    # define _PA4        PORTA_BIT.BIT4
    # define _PA5        PORTA_BIT.BIT5
    # define _PA6        PORTA_BIT.BIT6
    # define _PA7        PORTA_BIT.BIT7
#endif
#ifdef PORTB
    # define _PB0        PORTB_BIT.BIT0
    # define _PB1        PORTB_BIT.BIT1
    # define _PB2        PORTB_BIT.BIT2
    # define _PB3        PORTB_BIT.BIT3
    # define _PB4        PORTB_BIT.BIT4
    # define _PB5        PORTB_BIT.BIT5
    # define _PB6        PORTB_BIT.BIT6
    # define _PB7        PORTB_BIT.BIT7
#endif
#ifdef PORTC
    # define _PC0        PORTC_BIT.BIT0
    # define _PC1        PORTC_BIT.BIT1
    # define _PC2        PORTC_BIT.BIT2
    # define _PC3        PORTC_BIT.BIT3
    # define _PC4        PORTC_BIT.BIT4
    # define _PC5        PORTC_BIT.BIT5
    # define _PC6        PORTC_BIT.BIT6
    # define _PC7        PORTC_BIT.BIT7
#endif
#ifdef PORTD
    # define _PD0        PORTD_BIT.BIT0
    # define _PD1        PORTD_BIT.BIT1
    # define _PD2        PORTD_BIT.BIT2
    # define _PD3        PORTD_BIT.BIT3
    # define _PD4        PORTD_BIT.BIT4
    # define _PD5        PORTD_BIT.BIT5
    # define _PD6        PORTD_BIT.BIT6
    # define _PD7        PORTD_BIT.BIT7
#endif
#ifdef PORTE
    # define _PE0        PORTE_BIT.BIT0
    # define _PE1        PORTE_BIT.BIT1
    # define _PE2        PORTE_BIT.BIT2
    # define _PE3        PORTE_BIT.BIT3
    # define _PE4        PORTE_BIT.BIT4
    # define _PE5        PORTE_BIT.BIT5
    # define _PE6        PORTE_BIT.BIT6
    # define _PE7        PORTE_BIT.BIT7
#endif
#ifdef PORTF
    # define _PF0        PORTF_BIT.BIT0
    # define _PF1        PORTF_BIT.BIT1
    # define _PF2        PORTF_BIT.BIT2
    # define _PF3        PORTF_BIT.BIT3
    # define _PF4        PORTF_BIT.BIT4
    # define _PF5        PORTF_BIT.BIT5
    # define _PF6        PORTF_BIT.BIT6
    # define _PF7        PORTF_BIT.BIT7
#endif
#ifdef PORTG
    # define _PG0        PORTG_BIT.BIT0
    # define _PG1        PORTG_BIT.BIT1
    # define _PG2        PORTG_BIT.BIT2
    # define _PG3        PORTG_BIT.BIT3
    # define _PG4        PORTG_BIT.BIT4
    # define _PG5        PORTG_BIT.BIT5
    # define _PG6        PORTG_BIT.BIT6
    # define _PG7        PORTG_BIT.BIT7
#endif


/*------------- DDR 位操作定义 -------------*/
#ifdef DDRA
    # define DDR_PA0     DDRA_BIT.BIT0
    # define DDR_PA1     DDRA_BIT.BIT1
    # define DDR_PA2     DDRA_BIT.BIT2
    # define DDR_PA3     DDRA_BIT.BIT3
    # define DDR_PA4     DDRA_BIT.BIT4
    # define DDR_PA5     DDRA_BIT.BIT5
    # define DDR_PA6     DDRA_BIT.BIT6
    # define DDR_PA7     DDRA_BIT.BIT7
#endif
#ifdef DDRB
    # define DDR_PB0     DDRB_BIT.BIT0
    # define DDR_PB1     DDRB_BIT.BIT1
    # define DDR_PB2     DDRB_BIT.BIT2
    # define DDR_PB3     DDRB_BIT.BIT3
    # define DDR_PB4     DDRB_BIT.BIT4
    # define DDR_PB5     DDRB_BIT.BIT5
    # define DDR_PB6     DDRB_BIT.BIT6
    # define DDR_PB7     DDRB_BIT.BIT7
#endif
#ifdef DDRC
    # define DDR_PC0     DDRC_BIT.BIT0
    # define DDR_PC1     DDRC_BIT.BIT1
    # define DDR_PC2     DDRC_BIT.BIT2
    # define DDR_PC3     DDRC_BIT.BIT3
    # define DDR_PC4     DDRC_BIT.BIT4
    # define DDR_PC5     DDRC_BIT.BIT5
    # define DDR_PC6     DDRC_BIT.BIT6
    # define DDR_PC7     DDRC_BIT.BIT7
#endif
#ifdef DDRD
    # define DDR_PD0     DDRD_BIT.BIT0
    # define DDR_PD1     DDRD_BIT.BIT1
    # define DDR_PD2     DDRD_BIT.BIT2
    # define DDR_PD3     DDRD_BIT.BIT3
    # define DDR_PD4     DDRD_BIT.BIT4
    # define DDR_PD5     DDRD_BIT.BIT5
    # define DDR_PD6     DDRD_BIT.BIT6
    # define DDR_PD7     DDRD_BIT.BIT7
#endif
#ifdef DDRE
    # define DDR_PE0     DDRE_BIT.BIT0
    # define DDR_PE1     DDRE_BIT.BIT1
    # define DDR_PE2     DDRE_BIT.BIT2
    # define DDR_PE3     DDRE_BIT.BIT3
    # define DDR_PE4     DDRE_BIT.BIT4
    # define DDR_PE5     DDRE_BIT.BIT5
    # define DDR_PE6     DDRE_BIT.BIT6
    # define DDR_PE7     DDRE_BIT.BIT7
#endif
#ifdef DDRF
    # define DDR_PF0     DDRF_BIT.BIT0
    # define DDR_PF1     DDRF_BIT.BIT1
    # define DDR_PF2     DDRF_BIT.BIT2
    # define DDR_PF3     DDRF_BIT.BIT3
    # define DDR_PF4     DDRF_BIT.BIT4
    # define DDR_PF5     DDRF_BIT.BIT5
    # define DDR_PF6     DDRF_BIT.BIT6
    # define DDR_PF7     DDRF_BIT.BIT7
#endif
#ifdef DDRG
    # define DDR_PG0     DDRG_BIT.BIT0
    # define DDR_PG1     DDRG_BIT.BIT1
    # define DDR_PG2     DDRG_BIT.BIT2
    # define DDR_PG3     DDRG_BIT.BIT3
    # define DDR_PG4     DDRG_BIT.BIT4
    # define DDR_PG5     DDRG_BIT.BIT5
    # define DDR_PG6     DDRG_BIT.BIT6
    # define DDR_PG7     DDRG_BIT.BIT7
#endif

/*------------- PIN 位操作定义 -------------*/
#ifdef PINA
    # define READ_PA0     PINA_BIT.BIT0
    # define READ_PA1     PINA_BIT.BIT1
    # define READ_PA2     PINA_BIT.BIT2
    # define READ_PA3     PINA_BIT.BIT3
    # define READ_PA4     PINA_BIT.BIT4
    # define READ_PA5     PINA_BIT.BIT5
    # define READ_PA6     PINA_BIT.BIT6
    # define READ_PA7     PINA_BIT.BIT7
   
    # define PIN_PA0      PINA_BIT.BIT0
    # define PIN_PA1      PINA_BIT.BIT1
    # define PIN_PA2      PINA_BIT.BIT2
    # define PIN_PA3      PINA_BIT.BIT3
    # define PIN_PA4      PINA_BIT.BIT4
    # define PIN_PA5      PINA_BIT.BIT5
    # define PIN_PA6      PINA_BIT.BIT6
    # define PIN_PA7      PINA_BIT.BIT7
#endif
#ifdef PINB
    # define READ_PB0     PINB_BIT.BIT0
    # define READ_PB1     PINB_BIT.BIT1
    # define READ_PB2     PINB_BIT.BIT2
    # define READ_PB3     PINB_BIT.BIT3
    # define READ_PB4     PINB_BIT.BIT4
    # define READ_PB5     PINB_BIT.BIT5
    # define READ_PB6     PINB_BIT.BIT6
    # define READ_PB7     PINB_BIT.BIT7
   
    # define PIN_PB0      PINB_BIT.BIT0
    # define PIN_PB1      PINB_BIT.BIT1
    # define PIN_PB2      PINB_BIT.BIT2
    # define PIN_PB3      PINB_BIT.BIT3
    # define PIN_PB4      PINB_BIT.BIT4
    # define PIN_PB5      PINB_BIT.BIT5
    # define PIN_PB6      PINB_BIT.BIT6
    # define PIN_PB7      PINB_BIT.BIT7
#endif
#ifdef PINC
    # define READ_PC0     PINC_BIT.BIT0
    # define READ_PC1     PINC_BIT.BIT1
    # define READ_PC2     PINC_BIT.BIT2
    # define READ_PC3     PINC_BIT.BIT3
    # define READ_PC4     PINC_BIT.BIT4
    # define READ_PC5     PINC_BIT.BIT5
    # define READ_PC6     PINC_BIT.BIT6
    # define READ_PC7     PINC_BIT.BIT7
   
    # define PIN_PC0      PINC_BIT.BIT0
    # define PIN_PC1      PINC_BIT.BIT1
    # define PIN_PC2      PINC_BIT.BIT2
    # define PIN_PC3      PINC_BIT.BIT3
    # define PIN_PC4      PINC_BIT.BIT4
    # define PIN_PC5      PINC_BIT.BIT5
    # define PIN_PC6      PINC_BIT.BIT6
    # define PIN_PC7      PINC_BIT.BIT7
#endif
#ifdef PIND
    # define READ_PD0     PIND_BIT.BIT0
    # define READ_PD1     PIND_BIT.BIT1
    # define READ_PD2     PIND_BIT.BIT2
    # define READ_PD3     PIND_BIT.BIT3
    # define READ_PD4     PIND_BIT.BIT4
    # define READ_PD5     PIND_BIT.BIT5
    # define READ_PD6     PIND_BIT.BIT6
    # define READ_PD7     PIND_BIT.BIT7
   
    # define PIN_PD0      PIND_BIT.BIT0
    # define PIN_PD1      PIND_BIT.BIT1
    # define PIN_PD2      PIND_BIT.BIT2
    # define PIN_PD3      PIND_BIT.BIT3
    # define PIN_PD4      PIND_BIT.BIT4
    # define PIN_PD5      PIND_BIT.BIT5
    # define PIN_PD6      PIND_BIT.BIT6
    # define PIN_PD7      PIND_BIT.BIT7
#endif
#ifdef PINE
    # define READ_PE0     PINE_BIT.BIT0
    # define READ_PE1     PINE_BIT.BIT1
    # define READ_PE2     PINE_BIT.BIT2
    # define READ_PE3     PINE_BIT.BIT3
    # define READ_PE4     PINE_BIT.BIT4
    # define READ_PE5     PINE_BIT.BIT5
    # define READ_PE6     PINE_BIT.BIT6
    # define READ_PE7     PINE_BIT.BIT7
   
    # define PIN_PE0      PINE_BIT.BIT0
    # define PIN_PE1      PINE_BIT.BIT1
    # define PIN_PE2      PINE_BIT.BIT2
    # define PIN_PE3      PINE_BIT.BIT3
    # define PIN_PE4      PINE_BIT.BIT4
    # define PIN_PE5      PINE_BIT.BIT5
    # define PIN_PE6      PINE_BIT.BIT6
    # define PIN_PE7      PINE_BIT.BIT7
#endif
#ifdef PINF
    # define READ_PF0     PINF_BIT.BIT0
    # define READ_PF1     PINF_BIT.BIT1
    # define READ_PF2     PINF_BIT.BIT2
    # define READ_PF3     PINF_BIT.BIT3
    # define READ_PF4     PINF_BIT.BIT4
    # define READ_PF5     PINF_BIT.BIT5
    # define READ_PF6     PINF_BIT.BIT6
    # define READ_PF7     PINF_BIT.BIT7
   
    # define PIN_PF0      PINF_BIT.BIT0
    # define PIN_PF1      PINF_BIT.BIT1
    # define PIN_PF2      PINF_BIT.BIT2
    # define PIN_PF3      PINF_BIT.BIT3
    # define PIN_PF4      PINF_BIT.BIT4
    # define PIN_PF5      PINF_BIT.BIT5
    # define PIN_PF6      PINF_BIT.BIT6
    # define PIN_PF7      PINF_BIT.BIT7
#endif
#ifdef PING
    # define READ_PG0     PING_BIT.BIT0
    # define READ_PG1     PING_BIT.BIT1
    # define READ_PG2     PING_BIT.BIT2
    # define READ_PG3     PING_BIT.BIT3
    # define READ_PG4     PING_BIT.BIT4
    # define READ_PG5     PING_BIT.BIT5
    # define READ_PG6     PING_BIT.BIT6
    # define READ_PG7     PING_BIT.BIT7
   
    # define PIN_PG0      PING_BIT.BIT0
    # define PIN_PG1      PING_BIT.BIT1
    # define PIN_PG2      PING_BIT.BIT2
    # define PIN_PG3      PING_BIT.BIT3
    # define PIN_PG4      PING_BIT.BIT4
    # define PIN_PG5      PING_BIT.BIT5
    # define PIN_PG6      PING_BIT.BIT6
    # define PIN_PG7      PING_BIT.BIT7
#endif

#endif

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(881)
发表于:2007-11-23 15:33:01
标签:无标签

1

[函数库][AVR]系统常用宏定义

RD_MacroAndConst.h

--------------------------------------------------------------------------------------

#ifndef _USE_MACRO_AND_CONST_H_
#define _USE_MACRO_AND_CONST_H_
/***********************************************************
*   声明库说明:系统常用宏定义声明库                       *
*   版本:      v0.11                                      *
*   作者:      傻孩子                                     *
*   创建日期:  2006年5月4日                               *
* -------------------------------------------------------- *
*  [支 持 库]                                              *
*   支持库名称:                                           *
*   需要版本:                                             *
*   支持库说明:                                           *
* -------------------------------------------------------- *
*  [版本更新]                                              *
*   修改:      王卓然                                     *
*   修改日期:  2007年1月31日                              *
*   版本:      v0.05                                      *
*                                                          *
*   修改:      王卓然                                     *
*   修改日期:  2007年2月20日                              *
*   版本:      v0.06                                      *
*                                                          *
*   修改:      王卓然                                     *
*   修改日期:  2007年2月27日                              *
*   版本:      v0.07                                      *
*                                                          *
*   修改:      王卓然                                     *
*   修改日期:  2007年5月14日                              *
*   版本:      v0.09                                      *
*                                                          *
*   修改:      王卓然                                     *
*   修改日期:  2007年8月15日                              *
*   版本:      v0.11                                      *
* -------------------------------------------------------- *
*  [版本历史]                                              *
*       v0.04  修改了NULL的定义,增加了MAX()和MIN两个宏;  *
*              修改了关于char的符号定义。                  *
*       v0.05  针对新规范进行了宏的扩充,删除了一些无效的  *
*              非规范的宏定义和类型声明。                  *
*       v0.06  增加了对新的位操作方式的支持。              *
*       v0.07  增加了一个SAFE_CODE_PERFORMANCE()宏,用来保 *
*              正原子操作的正确运行。                      *
*       v0.09  增加了一个强制类型转换宏TYPE_CONVERSION(), *
*              和一个绝对值宏ABS()                         *
*       v0.11  增加了一个用于从任意整数中提取16进制数字的  *
*              宏SELECT_HEX()。和一个将任意整数进行等效的  *
*              正数求模。也就是说,即便是负数,也会映射到  *
*              等效的正数上。                              *
* -------------------------------------------------------- *
*  [使用说明]                                              *
*           1、该库文件属于基础库文件。                    *
***********************************************************/

/********************
*   系 统 宏 定 义  *
********************/
#ifndef _USE_NON_ICC_IDE
    # include
#endif

/*------------------*
*   常 数 宏 定 义  *
*------------------*/
#ifndef TRUE
    # define TRUE    0x01
#endif
#ifndef FALSE
    # define FALSE   0x00
#endif
#ifndef HIGH
    # define HIGH    0x01
#endif
#ifndef LOW
    # define LOW     0x00
#endif
#ifndef PI
    # define PI      3.1415926535897932f
#endif
# define K_D2R   (PI/180.0)
# define K_R2D   (180.0/PI)          

/*------------------*
*   动 作 宏 定 义  *
*------------------*/
# define SIN(x)  sin((float)x * K_D2R)
# define COS(x)  cos((float)x * K_D2R)
# define TAN(x)  tan((float)x * K_D2R)
# define ATAN(x) (K_R2D*atan(x))
# define ASIN(x) (K_R2D*asin(x))
# define ACOS(x) (K_R2D*acos(x))

#ifndef NULL
    # define NULL    0
#endif

# define SET(Reg,n)    Reg |= BIT(n);
# define CLR(Reg,n)    Reg &= ~BIT(n);

#define MAX(a,b)  (((a) > (b)) ? (a) : (b))
#define MIN(a,b)  (((a) < (b)) ? (a) : (b))

#define UBOUND(a) (sizeof(a)/sizeof(a[0]))

# define SAFE_CODE_PERFORMANCE(Code)     CLI();Code;SEI();

# define TYPE_CONVERSION(Addr,Type)     (*((Type *)(Addr)))

# define ABS(Number)    (((Number) < 0)?(-(Number)):(Number))

# define SELECT_HEX(Value,n,Type)       ((Value << (n) * 4) >> ((sizeof(Type) * 8) - 4))

# define ABS_MOD(x,y)                   (((x) < 0) ? ((((x) % (y)) + (y)) % (y)):((x) % (y)))


/********************
*  用户变量类型定义 *
********************/
typedef unsigned int uint16;
typedef unsigned int UINT;
typedef unsigned int uint;
typedef unsigned int UINT16;
typedef unsigned int WORD;
typedef unsigned int word;
typedef int          int16;
typedef int          INT16;

typedef unsigned long uint32;
typedef unsigned long UINT32;
typedef unsigned long DWORD;
typedef unsigned long dword;
typedef long          int32;
typedef long          INT32;

typedef signed   char int8;
typedef signed   char INT8;
typedef unsigned char byte;
typedef unsigned char BYTE;
typedef unsigned char UINT8;
typedef unsigned char uint8;
typedef unsigned char BOOL;

#endif

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(415)
发表于:2007-11-20 21:08:27
标签:AVR  ASCII  字模  VB  LCD  

1

ASCII码16*8字模库函数的建立和使用

最近作毕业设计,想做键盘显示模组。弄了一块320240的屏幕,可惜屏幕太袖珍,LCD自带的8*8字符集太小了,于是决定在AVR的FLASH里面嵌一个16*8的标准ASCII字符集。字库文件从UCDOS的FNT文件架下面很容易获得(ASC16,没有扩展名)。这是一个二进制文件。问题在于,为了正常使用该文件,必须以数组形式放到程序中,或者通过编程器烧入到外扩的存储器里面(比如24CXX系列)。为了简单,我选择将该字库文件转换成数组,直接放到程序中。

问题随之而来,将二进制文件的数据转换成{ 0xXX }的数组形式,这类软件貌似很多,可是下载下来,没有一个好用的。花费了一个小时搜索了各种子模软件,无不要注册的,一气之下,用了10分钟写了一个VB小程序搞定——仔细想来,如果不是一开始想偷懒,直接用VB写了程序,可能事情早就搞定了吧。废话少说,贴出VB程序:

rarVB源程序下载

Option Explicit

Private Sub Form_Load()
Dim TempData As Byte
Dim a, b As Integer

Open App.Path + "/ASC16.bin" For Binary As #1

    Open App.Path + "/ASC16_BitMap.h" For Output As #2
   
    Print #2, "uint8 ASCII_Bitmap[][16] = {"
   
   
    For a = 0 To 255
        Print #2, "        {";
        For b = 0 To 15
            Get #1, , TempData
            Print #2, "0x" + Right("00" + Trim(Hex(Str(TempData))), 2);
            If b <> 15 Then
            Print #2, ",";
            End If
        Next b
        If a >= 32 And a <= 127 Then
            Print #2, "},       //0x" + Right("00" + Trim(Hex(Str(a))), 2) + "'" + Chr(a) + "'"
        Else
            Print #2, "},       //0x" + Right("00" + Trim(Hex(Str(a))), 2)
        End If
    Next a
   
    Print #2, "};"
   
    Close #2
Close #1


End Sub

 

把ASC16.bin(这个.bin的扩展名是我自己重命名加上的)拷贝到VB工程的同一个文件夹下,运行程序,在同一目录下就获得了一个.h文件。对其进行加工我们得到如下的库函数:

 

RD_ASC16_BitMap.c

------------------------------------------------------------------------------------

/***********************************************************
*   函数库说明:标准ASCII码16*8字模函数库                  *
*   版本:      v1.00                                      *
*   作者:      王卓然                                     *
*   创建日期:  2007年11月12日                             *
* -------------------------------------------------------- *
*  [支 持 库]                                              *
*   支持库名称:RD_MacroAndConst.h                         *
*   需要版本:  v0.01 &abv                                 *
*   支持库说明:系统常用宏定义库                           *
*                                                          *
*   支持库名称:LIB_Config.h                               *
*   需要版本:  -----                                      *
*   支持库说明:库函数配置声明库                           *
* -------------------------------------------------------- *
*  [版本更新]                                              *
*   修改:                                                 *
*   修改日期:                                             *
*   版本:                                                 *
* -------------------------------------------------------- *
*  [版本历史]      &nb