公告

非常抱歉,由于我们的服务器提供商硬盘出错,数据丢失,网站重建中...
I am so sorry, because of our server's hard disk error, data lost, the website reconstructioning
QQ:512000523
MSN : funchip@hotmail.com

 
首页 arrow 支持论坛
杭州福芯-支持论坛
欢迎您, 游客
登录注册.    忘记密码?
回复:ZLG7290的IIC驱动 (1 个人正在浏览) (1) 个游客
到底部 发表回复
被收藏: 0
话题: 回复:ZLG7290的IIC驱动
#6
fcdpj (管理员)
管理员
帖子: 13
graph
该会员已离线 点此观看该会员的个人资料
ZLG7290的IIC驱动
发表于 2007-11-19 09:25
评分: 0  

代码: :

头文件: //#####################---文件信息-----############################ //文   件   名   :   7290.h //创   建   人   :   ZXJ //建  立 时 间   :   2004-2-17 //版  本 描 述   :   V1.0 //功  能 描 述   :   ZLG7290使用代码 7290.c的头文件 //备      注   :   调试环境为AVRGCC 3.3.1,MCU为Mega8 //最后修改时间   :   2004-2-19 //################################################################## #ifndef _7290_H_ #define _7290_H_ #include #include #include #include //----------------------- //I2C定义,可根据具体情况配置 //相应的管脚 //----------------------- #define SDA PB1 #define SCL PB0 #define   I2C_PORT    DDRB #define I2C_PIN      PINB #define   SCL_1   cbi(I2C_PORT, SCL); #define   SCL_0   sbi(I2C_PORT, SCL); #define   SDA_1   cbi(I2C_PORT, SDA); #define   SDA_0   sbi(I2C_PORT, SDA); //------------------------ //数据类型重新定义 //------------------------ #ifndef u08    #define u08 unsigned char #endif #ifndef u16    #define u16 unsigned int #endif #define True   0x01 #define False   0x00 u08 ack;            //应答标志位 //------------------------------- //ZLG7290相应的声明 //------------------------------- #define zlg7290    0x70 //ZLG7290的IIC地址 #define SubKey     0x01 #define SubCmdBuf    0x07 #define SubDpRam    0x10 //#define USE_INT   //声明使用中断方式检测有按键 #define USE_RST   //声明使用控制ZLG7290的复位 #ifdef USE_RST    #define ZLG_RST_DDR      DDRB    #define ZLG_RST_PORT   PORTB    #define ZLG_RST         PB2    #define RST_INIT      sbi(ZLG_RST_DDR,ZLG_RST)    #define   RST_0         cbi(ZLG_RST_PORT,ZLG_RST)    #define RST_1         sbi(ZLG_RST_PORT,ZLG_RST) #endif //--------------------------------- //LED显示字码,如果要显示小数点,则加上 pd //--------------------------------- #define pd 0x01; extern const u08 LED_Font[10]; //I2C函数声明 void Start_I2c(void); void Stop_I2c(void); void Ack_I2c(u08 a); void I2c_Read(u08 icadder, u08 adder, u08 count, u08 *buff); u08 I2c_Send(u08 icadder, u08 adder, u08 value); //控制ZLG7290 u08 ZLG_Get_Key(void); //读取ZLG7290中点键值,地址是0x01 u08 ZLG_Disp_Cnt(u08 Count); //设置要显示的LED数量 u08 ZLG_Disp_LED(u08 Led_Index,u08 Led_Num); //显示特定的LED u08 ZLG_Cls(u08 Type); //清LED显示 #ifndef USE_INT  //使用中断函数暂无    u08 ZLG_Check_Key(void); //检查是否有按键 #endif u08 ZLG_Read_Reg(u08 reg);  //读取指定寄存器 u08 ZLG_Write_reg(u08 reg, u08 value); //向指定寄存器写入数据 #ifdef USE_RST    u08 RST_ZLG(void);   //复位ZLG7290 #endif #endif


请注意, 尽管 boardcode 及表情图案按钮没有显示,它们仍然可以通过手动输入生效。
 
向版主举报   已记录 已记录  
 
最后编辑: 2007-11-19 09:26 由: fcdpj.
  Reply Quote
#7
fcdpj (管理员)
管理员
帖子: 13
graph
该会员已离线 点此观看该会员的个人资料
回复:ZLG7290的IIC驱动
发表于 2007-11-19 09:25
评分: 0  

代码: :

文件: //#####################---文件信息-----############################ //文   件   名   :   7290.c //创   建   人   :   ZXJ //建  立 时 间   :   2004-2-17 //版  本 描 述   :   V1.0 //功  能 描 述   :   ZLG7290使用代码 ,使用模拟I2C //备      注   :   调试环境为AVRGCC 3.3.1,MCU为Mega8 晶振为3.6864MHZ //               由于ZLG7290的速度很慢,换晶振时注意延时程序的调整.实际测试中 //               死机现象比较严重,建议使用控制ZLG7290的复位 //最后修改时间   :   2004-2-19 //################################################################## #include "7290.h" //0到9 //const u08 LED_Font[10] = {0xCF,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; //正 const u08 LED_Font[10] = {0xfc,0x0c,0xda,0x9e,0x2e,0xb6,0xf6,0x1c,0xfe,0xbe}; //反 //---------------------------------------------------------------- void I2c_Send_Byte(u08 data); u08 I2c_Rev_Byte(void); //***************************************************************** //函   数   名   :   _Nop    //建 立 时  间   :   2004-2-17 //功 能 描  述   :   延时函数,最大值为0xff //备      注   :   没有返回值 //最后修改时间   :   2004-2-18 //***************************************************************** void  _Nop(u08 dly)   {    u08 i;    for(i=0;i; } //***************************************************************** //函   数   名   :   I2c_Send_Byte    //建 立 时  间   :   2004-2-17 //功 能 描  述   :   向I2c总线发送1个字节的数据/命令 //备      注   :   没有返回值 //最后修改时间   :   2004-2-18 //***************************************************************** void I2c_Send_Byte(u08 data) {    u08 BitCnt;    for(BitCnt=0;BitCntL_1     _Nop(15);     if(bit_is_set(I2C_PIN,SDA))ack=0;             else ack=1;        //判断是否接收到应答信号     SCL_0     _Nop(15); } //***************************************************************** //函   数   名   :   Stop_I2c    //建 立 时  间   :   2004-2-17 //功 能 描  述   :   从I2c总线接收1个字节的数据/命令 //备      注   :   返回接收到的数据/命令 //最后修改时间   :   2004-2-18 //***************************************************************** u08 I2c_Rev_Byte(void) {   u08 retc;   u08 BitCnt;      retc=0;   SDA_1             //置数据线为输入方式   for(BitCnt=0;BitCnt//备      注   :   有返回值,成功写入数据返回True,注意ZLG7290扫描位数寄存器的设置 //最后修改时间   :   2004-2-19 //***************************************************************** u08 ZLG_Disp_LED(u08 Led_Index,u08 Led_Num) {    u08 tmp;    tmp = 0;    if ((Led_Index  0x17))       return False;        I2c_Send(zlg7290,Led_Index,Led_Num);    asm("nop");    I2c_Read(zlg7290,Led_Index,0x01,&tmp);    asm("nop");    if (tmp == Led_Num)       return True;    else       return False; } //***************************************************************** //函   数   名   :   ZLG_Cls //建 立 时  间   :   2004-2-18 //功 能 描  述   :   清LED显示,Type =0 全部清除显示为0,Type=1 全部不显示,默认为1 //备      注   :   有返回值,成功则返回True,失败返回False //最后修改时间   :   2004-2-18 //***************************************************************** u08 ZLG_Cls(u08 Type) {    u08 tmp,i;    u08 Num;    tmp = 0;        Num = 0x00;        if (Type == 0x00)       Num = 0xFC;           for(i=0;i       if ((tmp & 0x01) == 0x01 )          return True;       else          return False;    } #endif //***************************************************************** //函   数   名   :   ZLG_Read_Reg //建 立 时  间   :   2004-2-19 //功 能 描  述   :   读取指定寄存器,作为I2c的读取数据的API使用,扩展功能用 //备      注   :   有返回值 //最后修改时间   :   2004-2-19 //***************************************************************** u08 ZLG_Read_Reg(u08 reg) {    u08 tmp;    tmp = 0;    I2c_Read(zlg7290,reg,0x01,&tmp);    return tmp; } //***************************************************************** //函   数   名   :   ZLG_Write_reg //建 立 时  间   :   2004-2-19 //功 能 描  述   :   向指定寄存器写入数据,作为I2c的写入数据的API使用,扩展功能用 //备      注   :   有返回值 //最后修改时间   :   2004-2-19 //***************************************************************** u08 ZLG_Write_reg(u08 reg, u08 value) {    u08 tmp;    tmp = 0;    I2c_Send(zlg7290,reg,value);    _Nop(1);    I2c_Read(zlg7290,reg,0x01,&tmp);        if (tmp == value)       return True;    else       return False; } //***************************************************************** //函   数   名   :   RST_ZLG //建 立 时  间   :   2004-2-19 //功 能 描  述   :   由于ZLG的不稳定,控制它的复位,达到整个系统的健壮 //备      注   :   有返回值,此函数未经实际测试 //最后修改时间   :   2004-2-19 //***************************************************************** #ifdef USE_RST    void delay(u16 dly_Time)    {       u16 i,t;       t = dly_Time;       while(t--)          for(i=0;i


请注意, 尽管 boardcode 及表情图案按钮没有显示,它们仍然可以通过手动输入生效。
 
向版主举报   已记录 已记录  
 
最后编辑: 2007-11-19 09:26 由: fcdpj.
  Reply Quote
到顶部 发表回复

© 2008 杭州福芯电子 浙ICP备05040812号
Joomla!是基于GNU/GPL许可发行的免费软件.