EDN首页   博客首页

最新日志

发表于:2009/6/16 8:46:03
标签:学习笔记,AVR  

2

史上最全的AVR单片机学习笔记

史上最全的AVR单片机学习笔记,希望对于AVR的初学者有所帮助!

实验44:基于TC1的ICP频率计(ATmega16)

实验42:L298电机驱动程序(M16+12V直流电机)

实验41:TLC5615驱动程序(M16+MAX7219+8位数码管)

实验40:MAX7219驱动实验02(第3种算法)

实验39:MAX7219驱动实验(2种算法)

实验30:ADC实验

实验25:LCD1602B八线制驱动实验

实验24:四线制LCD1602B驱动实验

实验23:模拟比较器1

实验22:TC0用作计数器

实验21:USART实验(中断方式收发数据)

实验20:USART实验(查询方式收发数据)

实验19:音乐键盘

实验18:TC1比较中断实现10ms定时实验

实验17:TC0定时器溢出定时实验

实验16:TC0定时器中断实验

实验15:TC0定时器四种工作模式实验

实验14:TC0用作PWM相位修正模式

实验13:SPI实验(数码管显示INT0次数)

实验12:SPI实验(数码管位显示控制)

实验11:SPI实验(数码管显示)

实验10:按键扫描(KEY控制对应LED亮灭)

实验9:蜂鸣器产生音节节拍

实验8:7种LED亮灭模式+INT0中断+蜂鸣器

实验7:外部中断INT0实验

实验6:无源蜂鸣器驱动实验

实验5:按键扫描(用KEY选择LED点亮模式)

实验4:按键扫描+8种LED亮灭模式控制

实验3:按键扫描(用KEY选择对应LED点亮)

实验2:有源蜂鸣器驱动实验

实验1:8种LED点亮模式

系统分类: 单片机   |    用户分类:    |    来源: 原创

该用户于2009/6/16 8:53:40编辑过该文章

评论(4) | 阅读(1705)
发表于:2009/5/22 15:01:04
标签:AVR,ARM,PCB  

2

AVRgroup嵌入式开发论坛,从AVR入手,向ARM进军,带你步入嵌入式开发的神圣殿堂!

点击进入》》

论坛主要版块设置

点击开大图

        AVRgroup嵌入式开发论坛,从AVR入手,向ARM进军,带你步入嵌入式开发的神圣殿堂!

       论坛以“资源共享才有价值”为理念,是一个完全开源的专业技术交流论坛。


部分资源:PCB设计元件库大全分享

包含:protel/dxp/ad6/orcad原理图和PCB元件库,种类齐全!

图例如下:

点击开大图

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

该用户于2009/6/17 9:06:13编辑过该文章

评论(0) | 阅读(235)
发表于:2009/5/3 11:45:12
标签:avr  

1

AVR初学者的向导:马伟力AVR学习笔记系列

        论坛邀请马伟力开辟“马伟力AVR学习笔记专区”。马伟力,网名tiankai,他倾心编写的AVR系列学习笔记在网络上盛传,相信很多AVR初学者都受益匪浅,得到过指导。笔记讲解精辟,通俗易懂,是初学者入门的经典教程。欢迎大家一起学习交流,早日步入AVR嵌入式殿堂!
点击开大图
 
【资源链接】

系统分类: 单片机   |    用户分类:    |    来源: 整理

该用户于2009/5/3 11:51:35编辑过该文章

评论(0) | 阅读(293)
发表于:2009/4/27 22:24:23
标签:proteus  

1

图解详说proteus 7.4 安装全过程

        Proteus(海神)的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。

该软件的特点:
① 全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。

②具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS一232动态仿真、1 C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

③ 目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

④ 支持大量的存储器和外围芯片。总之该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大,可仿真51、AVR、PIC。

 软件安装过程和破解方法:

1、解压文件

点击开大图

2、双击“proteus_setup74.exe”,开始安装。

点击开大图

3、点击“Next”

点击开大图

4、点击“Yes”

点击开大图

5、选择第一项后,点击“Next”。

点击开大图

6、点击“Next”。

点击开大图

7、选择第一项。

点击开大图

8、浏览“7.4 破解”文件夹中“Grassington North Yorkshire.lxk”,点击“打开”。

点击开大图

9、点击第三项“Install”。

点击开大图

10、点击“是”

点击开大图

11、点击“Close”。

点击开大图

12、点击“Next”。

点击开大图

13、选择安装路径。

点击开大图

14、选择安装组件。

点击开大图

15、点击“Next”。

点击开大图

16、等上一会儿吧。

点击开大图

17、两项都不选择,点击“Finish”。

点击开大图

18、运行“7.4 破解”文件夹中的“LXK Proteus 7.4 SP3 PRO v1.6.2.exe”,点击“Update”。

点击开大图

19、破解成功,点击“确定”。

点击开大图

20、安装成功,可以使用了!

点击开大图

21、软件版本为“7.4 SP3”。

请支持正版软件。

系统分类: 单片机   |    用户分类:    |    来源: 原创

该用户于2009/4/27 22:24:37编辑过该文章

评论(1) | 阅读(950)
发表于:2009/4/23 13:28:24
标签:无标签

1

纪念:本博访客突破10,0000万人次!

三年时间,本博访客突破10,0000万人次!

希望得到更多新老朋友的支持和光临!

资源共享才有价值,学习永无止境!

系统分类: 生活点滴   |    用户分类:    |    来源: 原创

该用户于2009/4/23 13:29:07编辑过该文章

评论(1) | 阅读(298)
发表于:2009/4/22 23:18:45
标签:pads,PCB  

2

图解详说pads2007安装全过程(经过验证)

       最近一个项目,工程师用到PADS绘制PCB,但硬件原理图却是由AD6和ORCAD10.5共同绘制的。且AD6绘制的原理图需要整合为ORCAD格式,以便于导出网络表,供PADS使用。从AD6转换为ORCAD格式,难到不难,但却出了一堆问题,特别是部分AD6电路符号被转的面目全非,且AD6里定义的PCB封装全部丢失,不得不重新的一一再定义,很是头疼。

      趁着这次机会,刚好可以熟悉一下PADS的使用环境。早就听它的强大功能。于是从迅雷里淘到一个,文件大小700M左右。下面是下载地址和具体的安装破解步骤。

软件下载地址:

http://content.gougou.com/content?cid=46DDA6E5A1575663BC54242306CDE57427B1D6AA#com_anchor

安装步骤:

1、解压安装包,经验证安装包不可解压到有中文名字的文件夹下,否则安装出错。

点击看大图

 

2、运行“MentorKG.exe”,得到“LICENSE.txt”

点击看大图

 

3、双击“msi_setup.exe”安装,出现第4步安装界面。

点击看大图

 

4、点击第一项,进入第5步。

点击开大图

 

5、点击“Agree”

点击开大图

 

6、默认即可,点击“NEXT”.

点击开大图

 

7、选择安装组件(根据个人需要)

点击开大图

 

8、点击“Install”安装,出现第9步界面

点击开大图

 

9、喝杯茶吧,不用管它。

点击开大图

 

10、安装过程中,弹出下图对话框,选择第三项“At a later time”后,点击“Done”

点击开大图

 

11、当出现下图界面后,点击“Done”,程序安装完成。

点击开大图

 

12、关闭安装界面。

点击开大图

 

13、破解,将第2步生成的“LICENSE.txt”改为“LICENSE.dat”

点击开大图

 

14、在C盘根目录下新建“Flexlm”文件夹,然后将13步的“LICENSE.dat”放入其中,如下图。至此,PADS2007安装完成。

点击开大图

 

15、下面两图,为PADS Layout和PADS Logic的工作界面。

点击开大图

点击开大图

系统分类: PCB   |    用户分类:    |    来源: 原创

该用户于2009/4/22 23:27:46编辑过该文章

评论(2) | 阅读(1545)
发表于:2009/4/15 13:51:58
标签:AVR,TWI  

2

可直接用于项目开发的TWI头文件

1、以下程序经调试可用,请保存为*.h文件。
2、使用时直接调用“API函数:即可。
3、可直接应用于实际项目中。

/*--------------------------文件说明----------------------------------
文件用途      :TWI/I2C驱动,查询方式,主机模式
原创者        :SEE
修改者        :林夕依然
最后修改时间  :2009.03.15
使用说明      :调用最后6个API应用程序接口函数进行I2C读写
调试说明      :ATmega16L+ICC+AVR studio 4 环境下调试通过。
注意事项      :根据原创者意愿,如用于商业用途请注明文件来源。
--------------------------------------------------------------------*/
#ifndef I2C_H
#define I2C_H

//主模式启动状态
#define I2C_START                       0x08   //启动总线
#define I2C_RESTART          0x10   //重新启动总线

//主发送模式各种状态
#define I2C_MT_SLA_ACK       0x18   //SLA_W写地址已发送,收到应答位
#define I2C_MT_SLA_NACK      0x20   //SLA_W写地址已发送,收到非应答位
#define I2C_MT_DATA_ACK      0x28   //写入数据已发送,收到应答位
#define I2C_MT_DATA_NACK     0x30   //写入数据已发送,收到应答位
#define I2C_MT_ARB_LOST      0x38   //SLA_W或数据仲裁失败

//主接收模式各种状态
#define I2C_MR_ARB_LOST      0x38   //SLA_W或数据仲裁失败
#define I2C_MR_SLA_ACK       0x40   //SLA_R已发送,收到应答位
#define I2C_MR_SLA_NACK      0x48   //SLA_R已发送,收到非应答位
#define I2C_MR_DATA_ACK      0x50   //接收到数据,应答位已返回
#define I2C_MR_DATA_NACK     0x58   //接收到数据,非应答位已返回

//从接收模式各种状态
#define I2C_SR_SLA_ACK        0x60
#define I2C_SR_ARB_LOST_SLA_ACK    0x68
#define I2C_SR_GCALL_ACK       0x70
#define I2C_SR_ARB_LOST_GCALL_ACK   0x78
#define I2C_SR_DATA_ACK        0x80
#define I2C_SR_DATA_NACK       0x88
#define I2C_SR_GCALL_DATA_ACK     0x90
#define I2C_SR_GCALL_DATA_NACK    0x98
#define I2C_SR_STOP         0xA0

//从发送模式各种状态
#define I2C_ST_SLA_ACK       0xA8
#define I2C_ST_ARB_LOST_SLA_ACK   0xB0
#define I2C_ST_DATA_ACK       0xB8
#define I2C_ST_DATA_NACK     0xC0
#define I2C_ST_LAST_DATA      0xC8

//Misc
#define I2C_NO_INFO        0xF8
#define I2C_BUS_ERROR       0x00

//定义SLA中读写控制位极性
#define I2C_READ   1
#define I2C_WRITE  0

#define I2CStart()      (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
#define I2CStop()       (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
#define I2C_STATUS      (TWSR & 0xf8)
#define I2CSendAck()    (TWCR|=(1<<TWEA))
#define I2CSendNoAck()  (TWCR&=~(1<<TWEA))
#define I2CRcvNckByte() (TWCR=(1<<TWINT)|(1<<TWEN))
#define I2CRcvAckByte() (TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA))

//定义运行状态返回值极性
#define I2C_ERR   0     //错误
#define I2C_CRR   1     //正确

//定义TWINT位置位查询等待时间
#define WAITCOUNT  50

/*--------------------------------------------------------------------
函数名称:I2C_Init
函数功能:TWI初始化
注意事项:(须根据具体情况设置)
提示说明:
输    入:
返    回:
--------------------------------------------------------------------*/
void I2C_Init(void)
{
TWBR=0x0f;    //波特率设置,必须大于 10
TWSR=0;       //状态寄存器初始化
//TWAR=       //从机地址和通用呼叫设置,多CPU时使用
}
/*--------------------------------------------------------------------
函数名称:I2C_WaitINT
函数功能:等待TWINT位置位
注意事项:需定义 WAITCOUNT
提示说明:
输    入:
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_WaitINT(void)
{
unsigned int i="WAITCOUNT";
while(!(TWCR&(1<<TWINT)))      //等待TWINT置1
{if((--i)==0) return I2C_ERR;}
return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_SendByte
函数功能:发送一字节数据
注意事项:
提示说明:
输    入:待发送数据
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
void I2C_SendByte(unsigned char x)
{
   TWDR=(x);
  TWCR=(1<<TWINT)|(1<<TWEN);
}
/*--------------------------------------------------------------------
函数名称:I2C Start
函数功能:发出起始信号
注意事项:
提示说明:
输    入:
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_Start()     
{
I2CStart();                        //发出起始信号
if(!I2C_WaitINT()) return I2C_ERR; //等待启动完成
if( I2C_STATUS!=I2C_START )        //检查是否启动成功
return I2C_ERR;                    //启动失败,返回0
return I2C_CRR;                    //启动成功,返回1
}
/*--------------------------------------------------------------------
函数名称:I2C ReStart
函数功能:发出重复起始信号
注意事项:
提示说明:
输    入:
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_Restart()     
{
I2CStart();      
if(!I2C_WaitINT()) return I2C_ERR;
if( I2C_STATUS!=I2C_RESTART )     //检查是否重复启动成功
return I2C_ERR;
return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_SendWrDAdr
函数功能:发送 7位 器件写地址: XXXX XXX0
注意事项:
提示说明:
输    入:写地址
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_SendWrDAdr(unsigned char wrDAdr)
{
I2C_SendByte(wrDAdr);   //设置器件写地址
if(!I2C_WaitINT()) return I2C_ERR;
if( I2C_STATUS!=I2C_MT_SLA_ACK )  
  return I2C_ERR;
return I2C_CRR;  
}
/*--------------------------------------------------------------------
函数名称:I2C_SendWrDAdr_
函数功能:发送 10位 器件写地址: 1111 0XX0, XXXX XXXX
注意事项:
提示说明:兼容 发送 7位 器件写地址: XXXX XXX0
输    入:
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_SendWrDAdr_(unsigned int wrDAdr)
{
if( wrDAdr&0xF000 == 0xF000 )           //判断是否为 10位 器件地址
  if( I2C_SendWrDAdr((unsigned char )wrDAdr>>8)==I2C_ERR ) //设置(高位)器件写地址
   return I2C_ERR;
if( I2C_SendWrDAdr( (unsigned char)wrDAdr )==I2C_ERR ) //设置 (低位)器件写地址
  return I2C_ERR;
return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_SendRdDAdr
函数功能:发送7位器件读地址: XXXX XXX1
注意事项:
提示说明:
输    入:读地址
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_SendRdDAdr(unsigned char rdDAdr)
{
I2C_SendByte(rdDAdr);   //设置器件读地址
if(!I2C_WaitINT()) return I2C_ERR;
if( I2C_STATUS!=I2C_MR_SLA_ACK )  
  return I2C_ERR;
return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_SendRdDAdr_
函数功能:发送 10位 器件读地址: 1111 0XX0, XXXX XXXX
注意事项:
提示说明:兼容 发送 7位 器件读地址: XXXX XXX1
输    入:
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_SendRdDAdr_(unsigned char rdDAdr)
{
if( rdDAdr&0xF000 == 0xF000 )        //判断是否为 10位 器件地址
if( I2C_SendWrDAdr( (unsigned char)rdDAdr>>8 )==I2C_ERR ) //设置 (高位)器件读地址
   return I2C_ERR;
if( I2C_SendWrDAdr( (unsigned char)rdDAdr )==I2C_ERR ) //设置 (低位)器件读地址
return I2C_ERR;
return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_SendDat
函数功能:I2C发送数据
注意事项:
提示说明:
输    入:待发送的字节数据
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_SendDat(unsigned char data)
{
I2C_SendByte(data);   
if(!I2C_WaitINT()) return I2C_ERR;
if( I2C_STATUS!=I2C_MT_DATA_ACK )
return I2C_ERR;
return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_RcvNAckDat
函数功能:I2C接收数据且不产生应答
注意事项:
提示说明:
输    入:接收数据存储空间指针
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_RcvNAckDat(unsigned char *pRdDat)
{
I2CRcvNckByte();
if(!I2C_WaitINT()) return I2C_ERR;
if( I2C_STATUS!=I2C_MR_DATA_NACK )
  return I2C_ERR;
*pRdDat=TWDR;
return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_RcvAckDat
函数功能:I2C接收数据且产生应答
注意事项:
提示说明:
输    入:接收数据存储空间指针
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_RcvAckDat(unsigned char *pRdDat)
{
I2CRcvAckByte();     
if(!I2C_WaitINT()) return I2C_ERR;
if( I2C_STATUS!=I2C_MR_DATA_ACK )
  return I2C_ERR;
*pRdDat=TWDR;
return I2C_CRR;
}


/*以下是API函数*/
//(Application Program Interface 应用程序接口)
/*--------------------------------------------------------------------
函数名称:I2C_Write(unsigned int wrDAdr,unsigned char wordAdr,unsigned char dat)
函数功能:I2C写器件,写一个字节
注意事项:
提示说明:
输    入:wrDAdr : write device-address 写器件地址
         wordAdr: word address 从地址
          dat: data 数据
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_Write(unsigned int wrDAdr,unsigned char wordAdr,unsigned char dat)
{
if( I2C_Start()==I2C_ERR )
  return I2C_ERR;
//wrDAdr &=0xfffe;
if( I2C_SendWrDAdr_((wrDAdr&0xfffe)|I2C_WRITE)==I2C_ERR )//保证写控制位正确
  return I2C_ERR;

if( I2C_SendDat(wordAdr)==I2C_ERR )//从地址当作一般数据发送
  return I2C_ERR;

if( I2C_SendDat(dat)==I2C_ERR )
  return I2C_ERR;

I2CStop();
return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_Write_
函数功能:I2C写器件,写N个数据
注意事项:
提示说明:
输    入:wrDAdr : write device-address 写器件地址
         wordAdr: word address 从地址
          *pWrDat: p->write data 写入数据的指针
          num    : number 写入数据个数
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_Write_(unsigned int wrDAdr,unsigned char wordAdr,
      unsigned char *pWrDat,unsigned char num)
{
    unsigned char i;

if( I2C_Start()==I2C_ERR )
  return I2C_ERR;

  //wrDAdr &=0xfffe;
if( I2C_SendWrDAdr_((wrDAdr&0xfffe)|I2C_WRITE)==I2C_ERR )//保证写控制位正确
  return I2C_ERR;

if( I2C_SendDat(wordAdr)==I2C_ERR )//从地址当作一般数据发送
  return I2C_ERR;

for(i=0;i<num;i++)
  if( I2C_SendDat(*(pWrDat++))==I2C_ERR )
  return I2C_ERR;

I2CStop();

return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_Read
函数功能:I2C读器件,读一个数据
注意事项:
提示说明:
输    入:rdDAdr : read device-address 读器件地址
         wordAdr: word address 从地址
       *pRdDat: p->read data 读取数据指针
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_Read(unsigned int rdDAdr,unsigned char wordAdr,unsigned char *pRdDat)
{
if( I2C_Start()==I2C_ERR )
  return I2C_ERR;

   //rdDAdr &=0xfffe;
if( I2C_SendWrDAdr_((rdDAdr&0xfffe)|I2C_WRITE)==I2C_ERR )//保证写控制位正确
  return I2C_ERR;

if( I2C_SendDat(wordAdr)==I2C_ERR )//从地址当作一般数据发送。
  return I2C_ERR;

if( I2C_Restart()==I2C_ERR )//重启动
  return I2C_ERR;

  //rdDAdr &=0xfffe;
if( I2C_SendRdDAdr((rdDAdr&0xfffe)|I2C_READ)==I2C_ERR )//保证读控制位正确
  return I2C_ERR;

if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )//接收数据
  return I2C_ERR;

I2CStop();
return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_Read_
函数功能:I2C读器件,读N个数据
注意事项:
提示说明:
输    入:rdDAdr : read device-address 读器件地址
          wordAdr: word address 字地址
       *pRdDat: p->read data 读取数据指针
       num    : number 读取数据个数
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_Read_(unsigned int rdDAdr,unsigned char wordAdr,
      unsigned char *pRdDat,unsigned char num)
{
  unsigned char i;

if( I2C_Start()==I2C_ERR )
  return I2C_ERR;
//rdDAdr &=0xfffe;
if( I2C_SendWrDAdr_((rdDAdr&0xfffe)|I2C_WRITE)==I2C_ERR )//保证写控制位正确
  return I2C_ERR;

if( I2C_SendDat(wordAdr)==I2C_ERR )//从地址当作一般数据发送。
  return I2C_ERR;

if( I2C_Restart()==I2C_ERR )//重启动
  return I2C_ERR;

  //rdDAdr &=0xfffe;
if( I2C_SendRdDAdr((rdDAdr&0xfffe)|I2C_READ)==I2C_ERR )//保证读控制位正确
  return I2C_ERR;

for(i=0;i<num-1;i++)           //接收数据
  if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
   return I2C_ERR;

if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
   return I2C_ERR;

I2CStop();

return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_Write_direct
函数功能:I2C写无从地址器件,写一个字节
注意事项:
提示说明:
输    入:wrDAdr : write device-address 写器件地址
          dat: data 数据
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_Write_direct(unsigned int wrDAdr,unsigned char dat)
{
if( I2C_Start()==I2C_ERR )
  return I2C_ERR;
//wrDAdr &=0xfffe;
if( I2C_SendWrDAdr_((wrDAdr&0xfffe)|I2C_WRITE)==I2C_ERR )//保证写控制位正确
  return I2C_ERR;

if( I2C_SendDat(dat)==I2C_ERR )//直接写数据
  return I2C_ERR;

I2CStop();
return I2C_CRR;
}
/*--------------------------------------------------------------------
函数名称:I2C_Read_direct
函数功能:I2C读无从地址器件,读一个数据
注意事项:
提示说明:
输    入:rdDAdr : read device-address 读器件地址
       *pRdDat: p->read data 读取数据指针
返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
--------------------------------------------------------------------*/
unsigned char I2C_Read_direct(unsigned int rdDAdr,unsigned char wordAdr,unsigned char *pRdDat)
{
if( I2C_Start()==I2C_ERR )
  return I2C_ERR;

   //rdDAdr &=0xfffe;
if( I2C_SendWrDAdr_((rdDAdr&0xfffe)|I2C_WRITE)==I2C_ERR )
  return I2C_ERR;

if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )//直接读数据
  return I2C_ERR;

I2CStop();
return I2C_CRR;
}
#endif

系统分类: 单片机   |    用户分类:    |    来源: 整理

该用户于2009/4/15 13:52:08编辑过该文章

评论(0) | 阅读(286)
发表于:2009/4/7 9:42:16
标签:protel99,PCB  

6

protel99原理图元件库大全(8个种类)

》》点此进入      http://avrgroup.5d6d.com/  

       AVR单片机学习小组推出protel99原理图元件库大全(8个种类)共8个种类,请需要的朋友速去下载!

点击开大图

【相关资源】
 Altium Designer 6原理图元件库大全(7个种类)

系统分类: PCB   |    用户分类:    |    来源: 原创

该用户于2009/5/3 11:52:30编辑过该文章

评论(3) | 阅读(1506)
发表于:2009/4/7 9:37:46
标签:Altium  Designer,PCB  

2

Altium Designer 6原理图元件库大全(7个种类)

》》点此进入      http://avrgroup.5d6d.com/  

       AVR单片机学习小组推出【Altium Designer 6 原理图元件库大全】,共7个种类,请需要的朋友速去下载!

点击开大图

【相关资源】
  protel99原理图元件库大全(8个种类)

系统分类: PCB   |    用户分类:    |    来源: 原创

该用户于2009/5/3 11:52:51编辑过该文章

评论(2) | 阅读(571)
23456789Next >Total , Page /