历史上的今天
返回首页

历史上的今天

今天是:2025年08月15日(星期五)

正在发生

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

2019-08-15 来源: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)

{

}

}


推荐阅读

史海拾趣

Everspin Technologies公司的发展小趣事

在寻求更广泛的市场应用和技术合作方面,Everspin与Quicklogic Corporation签订了分包协议。根据协议,Quicklogic将其部分开发服务分包给Everspin,共同推进战略辐射加固现场可编程门阵列原型项目的开发。这一合作不仅展示了Everspin在电子行业中的技术实力和市场影响力,也为其未来的发展开辟了新的道路。

以上五个故事概述了Everspin Technologies公司在电子行业中发展起来的关键历程和成就。这些故事展示了Everspin在MRAM技术领域的领先地位、创新能力和市场应用方面的成功。

B&K Precision公司的发展小趣事

在随后的几十年里,B&K Precision通过合并和收购其他电子公司,不断增强自身的市场竞争力。其中,1961年收购光远公司是一个重要的里程碑。这次收购不仅扩大了公司的业务范围,还带来了更多的技术和人才资源,为公司的后续发展注入了新的活力。

FUJI公司的发展小趣事

随着业务的不断发展,科恩和班意识到电子测试和测量领域的巨大潜力。1951年,他们将公司更名为B&K Precision,并开始扩展业务,涉足其他电子测试和测量领域。工程师们凭借在电视测试设备领域的丰富经验,不断研发新产品,获得了多项专利,并推动公司迅速成为全球电子测量领域的领导者。

DS-IMP公司的发展小趣事

DS-IMP公司非常重视人才培养和团队建设。公司建立了完善的人才培养机制,为员工提供丰富的培训和学习机会。同时,公司还注重团队建设和文化建设,通过组织各种团队活动和文化建设活动,增强员工的凝聚力和归属感。这些努力使得公司拥有一支高素质、专业化的团队,为公司的发展提供了坚实的人才保障。

Amprobe公司的发展小趣事

在电子行业,供应链管理是企业发展的关键因素之一。DS-IMP公司深知这一点,因此在发展过程中不断优化供应链管理。公司建立了完善的供应链体系,与供应商和客户建立了长期稳定的合作关系。同时,公司还引入了先进的供应链管理软件和技术手段,实现了对供应链的实时监控和精细化管理。这些措施不仅提高了公司的运营效率,还降低了成本风险,为公司的发展提供了有力保障。

Allied Wire & Cable Inc公司的发展小趣事

Allied公司成立于XXXX年,起初是一家小型电线电缆供应商。在创业初期,公司创始人凭借对电线电缆行业的深刻理解和丰富的行业经验,成功开发出了一系列质量上乘、性能稳定的电线电缆产品。通过不懈的努力和优质的客户服务,Allied公司逐渐在市场中树立起了良好的口碑,为后续的发展奠定了坚实的基础。

问答坊 | AI 解惑

【转】"如何正确使用保险丝"在线研讨会问答精粹

慢熔断保险丝与快熔断有什么不同的性能和应用;相同特性和额定电流的保险丝能直接替换吗;保险丝分断能力在实际应用中有什么意义;保险丝性能的影响因素;一次性保险丝和可恢复保险丝的异同;保险电阻能起到保险丝的作用吗?这些都是工程师在保险丝 ...…

查看全部问答>

我觉得裸奔也要带着操作系统思想裸奔

我程序一直都是裸体的,在裸体中发现了几个问题: (1)WARNING L15: MULTIPLE CALL TO SEGMENT --函数重入 其实这个问题实际上就是函数重入问题,在操作系统的多线程很常见。例如在主循环里调用了一个函数,而在中断服务中,你又一次调用了同样 ...…

查看全部问答>

我的小本系统是win7的,但装不了Protel 99se软件

我的小本系统是win7的,但装不了Protel 99se软件,装的是Protel 99se汉化中文第六版(含第二版),请各位友友帮帮忙…小弟我感激不尽……

查看全部问答>

SD卡的识别问题,一些卡无法识别。

SD卡驱动在很多情况下都可以正常的识别SD卡,但是有一些卡却无法识别。 查看log,可以看到一些初始化命令无法获得响应,总是超时。 请问大家遇到过类似的问题吗?可能是哪些方面的原因呢?…

查看全部问答>

ads中用jlink调试时 调试窗口看不到存储器变化? 但运行结果正常! 求救!!!

ads中用jlink调试时 调试窗口看不到存储器变化? 但运行结果正常! 求救!!!…

查看全部问答>

2440 camera 问题????--献上所有分

刚接触CE1个月 马上要在公司自己开发的主板上移植7645BF驱动了 还有些有关camera驱动问题还不是很清楚 希望高人解答!!! 比如 2440上 camera分配的是irq6 该irq可能由INTSUB_CAM_P、INTSUB_CAM_C或INT_CAM 被置一而引起,有的资料上说中断由VSYN ...…

查看全部问答>

大家觉得这个车架适合不适合做智能车!~

RT 在淘宝上看到的,就是价格稍高318元,但是相对飞思卡尔官方的车体价格还是便宜一点的!~   …

查看全部问答>

加载失败和运行不起来的原因

本帖最后由 dontium 于 2015-1-23 13:21 编辑 在我加载程序时,它提示我Data verification failed at address 0x48a0。Please  verify target memory and memory map.点我点确定后,又出现这个错误对话框,可地址改为ox6320了,当我打开 ...…

查看全部问答>

转贴:FreeRTOS port to eZ430-RF2500

FreeRTOS 在eZ430-RF2500 的移植,秒到eZ430-RF2500可以玩…

查看全部问答>

大神,求助?

    学习DSP真的让我学到了很多的东西,最开心的就是问题解决后高兴和满足,但是当困恼在一个地方的时候会很烦恼,但是这是一个学技术的历练。    最近在连接一个F28035和TOPWAY 的液晶屏,但是会出现一些问题,有的已经 ...…

查看全部问答>