历史上的今天
返回首页

历史上的今天

今天是:2025年04月08日(星期二)

正在发生

2019年04月08日 | 51单片机之IIC&EEPROM的驱动程序

2019-04-08 来源:eefocus


#include

#include "./delay/delay.h"

sbit SCL = P2^0;

sbit SDA = P2^1;

bit ack = 0;

 

unsigned char flag = 1;

#define LCDPORT P0

#define LCD_WRITE_DATA 1

#define LCD_WRITE_COM 0

sbit RS = P2^4;

sbit RW = P2^5;

sbit E = P2^6;

 

#define SUCC 0

#define ERR 1

 

void iic_start()

{

SDA = 1;  //先操作SDA,在操作SCL

  SCL = 1;

  delay_us(1);

  SDA = 0;

delay_us(1);

  SCL = 0;   //钳住总线

}

 

void iic_stop()

{

SDA = 0;

SCL = 1;

delay_us(1);

SDA = 1;

delay_us(1);

SCL = 0;    //钳住总线

}

 

bit iic_send_byte(unsigned char byte)     //发送数据,先发送高位,再发送低位  只发送一个字节

{

unsigned char i;

for(i = 0; i < 8; i++)

{

SDA = byte & 0x80;   //与上为非0时,SDA = 1; 与上为0时,SDA = 0;

SCL = 1;

delay_us(1);         //延时1us

  SCL = 0;

  byte <<= 1;

}

SCL = 1;

SDA = 1;

delay_us(2);

if(0 == SDA)

{

ack = 1;

}

else

{

ack = 0;

}

SCL = 0;


return ack;

}

unsigned char iic_rcv_byte()       //接收数据

{

unsigned char i;

unsigned char temp = 0;

unsigned char a;

SDA = 1;

for(i = 0; i < 8; i++)

{

SCL = 0;

delay_us(1);

SCL = 1;

if(SDA)

{

a = 0x01;

}

else

{

a = 0;

}

temp |= (a << (7 - i));

delay_us(1);

}

SCL = 0;

return temp;

}

void iic_ack()         //响应信号

{

SDA = 0; //拉低数据总线

SCL = 1; //时钟总线拉高

delay_us(1);


SCL = 0;           //钳住总线

}

void iic_noack()      //非响应信号

{

SDA = 1; //释放数据总线

SCL = 1; //拉高时钟总线

delay_us(1);


SCL = 0;         //钳住总线

}

unsigned char AT24c02_send_byte(unsigned char devaddr, unsigned char romaddr, unsigned char *s, unsigned char num)     //发送字符串

{

unsigned char i;


iic_start();                       //起始信号

iic_send_byte(devaddr); //写硬件地址

if(0 == ack) //等待响应

{

return ERR;

}

iic_send_byte(romaddr);         //写物理地址

if(0 == ack) //等待响应

{

return ERR;

}

for(i = 0; i < num; i++)       //发送num个字符

{

iic_send_byte(*s);       //逐个字节发送

if(0 == ack)

{

return ERR;

}

s++;

}

iic_stop();


return SUCC;

}

unsigned char AT24c02_rcv_byte(unsigned char devaddr, unsigned char romaddr, unsigned char *s, unsigned char num)

{

unsigned char i;

iic_start();

delay_us(10);

iic_send_byte(devaddr);             //写硬件地址

if(0 == ack)                        //等待响应

{

return ERR;

}

iic_send_byte(romaddr);         //写物理地址

if(0 == ack) //等待响应

{

return ERR;

}

iic_start();

iic_send_byte(devaddr + 1);

if(0 == ack) //等待响应

{

return ERR;

}

for(i = 0; i < num -1; i++)     //开始读数据

{

*s = iic_rcv_byte();

iic_ack();

s++;

}

*s = iic_rcv_byte();

iic_noack();

  delay_us(10);

iic_stop();

return SUCC;

}

void lcd1602_write(unsigned char byte, unsigned char flag)

{

if(flag)

{

RS = 1; 

}

else

{

RS = 0;     

}

RW = 0;     

E = 1;      

LCDPORT = byte;

delay_ms(5);

E = 0;   


}

void lcd_init()

{

delay_ms(15);

  lcd1602_write(0x38,LCD_WRITE_COM);

  delay_ms(5);

  lcd1602_write(0x38,LCD_WRITE_COM);

  delay_ms(5);

  lcd1602_write(0x38,LCD_WRITE_COM);

  delay_ms(5);

  lcd1602_write(0x38,LCD_WRITE_COM);

  delay_ms(5);

  lcd1602_write(0x08,LCD_WRITE_COM);

  delay_ms(5);

  lcd1602_write(0x01,LCD_WRITE_COM);

  delay_ms(5);

  lcd1602_write(0x06,LCD_WRITE_COM);

  delay_ms(5);

  lcd1602_write(0x0c,LCD_WRITE_COM);

  delay_ms(5);

}

void lcd_dis_char(unsigned char x, unsigned char y, unsigned char *str)

{

if((x > 15) || (y > 1))

{

return ;

 

}

if(0 == y)

{

lcd1602_write(0x80 + x, LCD_WRITE_COM);

}

else 

{

lcd1602_write(x + 0xc0,LCD_WRITE_COM);

}

while(*str != '')

{

  

lcd1602_write(*str , LCD_WRITE_DATA);

str++;

}

}

 

 

void main()

{

//unsigned char i;

unsigned char test[10] = {'0','1','2','3','4','5','6','7','8','9'};

unsigned char temp[11];

lcd_init();

AT24c02_send_byte(0xae,100,test,10);

delay_s(1);

AT24c02_rcv_byte(0xae,100,temp,10);

temp[10] = '';

lcd_dis_char(0,0,temp);

lcd_dis_char(0,1,temp);

 

while(1)

{



}

}


推荐阅读

史海拾趣

AMI Semiconductor公司的发展小趣事

AMI Semiconductor,全称为Analog Mixed-Signal Interface Semiconductor,是一家在模拟、混合信号和接口领域提供集成电路解决方案的公司。以下是关于AMI Semiconductor公司发展的五个相关故事:

  1. 公司成立与初期发展:AMI Semiconductor公司成立于1966年,总部位于美国爱达荷州普克斯。公司最初专注于生产模拟集成电路和混合信号集成电路,为各种应用领域提供解决方案。在成立初期,AMI Semiconductor致力于技术创新和产品质量,赢得了客户的信任和认可。

  2. 技术创新和产品多样化:AMI Semiconductor不断进行技术创新,推出了一系列高性能、高可靠性的集成电路产品。公司的产品涵盖了模拟信号处理、数据转换、传感器接口、通信接口等多个领域,广泛应用于汽车电子、工业自动化、医疗设备等行业。

  3. 公司并购与扩张:为了拓展业务和加强市场竞争力,AMI Semiconductor进行了一系列并购和合并。这些并购使得公司能够快速扩大规模、拓展产品线,并进入新的市场领域。例如,2008年,AMI Semiconductor被ON Semiconductor收购,成为其子公司,加强了在模拟和混合信号领域的领先地位。

  4. 全球布局与市场拓展:AMI Semiconductor在全球范围内建立了广泛的销售网络和生产基地,实现了全球化发展战略。公司在美国、欧洲、亚洲等地设有研发中心、生产基地和销售办事处,为客户提供及时的技术支持和服务。这种全球布局有助于拓展市场份额,满足不同地区客户的需求。

  5. 持续创新与发展:AMI Semiconductor持续致力于技术创新和产品研发,以满足不断变化的市场需求。公司不断投入资金和人力资源,加强与客户的合作,开发定制化的解决方案,提升产品性能和竞争力。AMI Semiconductor不断追求卓越,致力于成为行业领先的模拟和混合信号集成电路供应商。

这些故事展示了AMI Semiconductor公司从成立初期到如今在技术创新、产品多样化、并购与扩张、全球布局和持续发展等方面取得的重要进展。

E. Dold & Söhne KG公司的发展小趣事

在E. Dold & Söhne KG公司的发展历程中,品质始终是公司最重视的方面之一。公司严格把控原材料采购、生产过程和产品检验等环节,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求使得E. Dold & Söhne KG公司的产品在市场上赢得了广泛的认可和信任。

Harvatek Corporation公司的发展小趣事

背景:随着全球经济的一体化和电子信息产业的快速发展,Hantronix意识到市场拓展的重要性。公司开始积极寻求国际合作机会,拓展其全球业务版图。

发展:Hantronix通过参加国际展会、建立海外销售网络等方式,成功将产品推向全球市场。其高品质的产品和优质的服务赢得了众多国际客户的信赖和好评。同时,公司还加强了与国际知名企业的合作,共同推动电子显示技术的进步和应用。

Elytone Electronics Co Ltd公司的发展小趣事

Elytone Electronics Co Ltd成立于XXXX年,最初是一家仅有几名员工的小型电子产品加工厂。公司创始人凭借对电子技术的热爱和对市场敏锐的洞察力,带领团队开始了艰苦的创业之路。在资源有限的情况下,他们不断研发新产品,优化生产工艺,逐步在行业内建立起了一定的知名度。

集创北方(CHIPONE)公司的发展小趣事

在显示芯片领域,集创北方是国产化替代的积极推动者。公司凭借自身在显示芯片领域的深入研究和创新实力,成功打破了国外厂商的技术垄断,为国内厂商提供了更多选择。同时,集创北方还积极参与行业标准制定,推动了国内显示芯片产业的健康发展。

Chino-Excel公司的发展小趣事

在发展过程中,Chino-Excel公司注重品牌建设和市场推广。公司投入大量资金进行品牌宣传和推广活动,提升品牌知名度和美誉度。同时,公司积极参加国际电子展会和行业交流活动,与国内外客户建立广泛的联系和合作,为公司的快速发展奠定了坚实基础。

问答坊 | AI 解惑

ScanWedge 扫描后自动回车

怎么写配置文件才能自动回车? 这个文件放在Application 下, 同目录下有一个ScanWedge.reg 内容是这样的 [HKEY_CURRENT_USER\\Software\\Symbol\\ScanWedge] \"AutoEnter\"=dword:00000001 为什么不行呢,改怎么写,高手请指教…

查看全部问答>

PDA开发任务外包

本公司想开发一个PDA抄表器,PC数据库SQLSERVER 2000 如有意者,可与列联系 QQ:463071950,武汉本地最好,便于直接沟通…

查看全部问答>

如何使自己编写的驱动开机时候就运行?

如题。比如一个使LED灯不断闪烁的GPIO驱动。谢谢。…

查看全部问答>

键入字母a到屏幕显示a计算机做了什么操作?

键入字母a到屏幕显示a计算机做了什么操作? …

查看全部问答>

请问现在哪个厂家生产的音频类控件最好?在什么地方能够买到?

美国Ligos公司是一家专门从事音频,视频控件开发的厂商,所生产的音频,视频类控件功能相当强大,为软件产品的开发提高了效率,也节约了成本,在全球都是享有地位的! 在慧都控件网能买到!重庆慧都科技有限公司---提供专业的控件产品咨询,代理全 ...…

查看全部问答>

小型太阳能供电板的制作方法图解

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 本刊前几期介绍了太阳能电池板及相关的小制作,引发了包括笔者在内的许多读者的兴趣。闲来无事,突发奇想,决定利用手头上的两块太阳能电池板DIY一个微型太阳能供电系统,模拟现代化太阳能电 ...…

查看全部问答>

stm32i2c2上拉电阻电压的问题

                                 最近做了块板子,用STM32F103VB,在用24C256的时候,忘加上拉电阻,好不容易弄上去两个2.2K的上拉电阻,结果发现我 ...…

查看全部问答>

【求助】用TA能产生2MHZ的方波吗?急,在线等!!!

我用的是MSPF1611 MCLK=7.3728MHZ现在想产生一个最高频率为2M的方波,程序我是这样写的 void main(void) { WDTCTL = WDTPW +WDTHOLD; // Stop WDT P3DIR|=0x04; P3OUT|=0x04; CCR0 = 4; // ...…

查看全部问答>

职场人士应如何控制情绪?

  职场中要避免不良情绪发生,控制好自己的情绪对工作前途和同事关系都会带来影响。学会控制情绪会让你变得更成熟,那么职场人士应如何控制情绪呢?一起来看看下面的介绍吧,希望对您有所帮助。   用理智控制你的情绪   如果你怒气冲冲 ...…

查看全部问答>