#include

#include

/*********************************LCD定义部分********************************/

//输入方式设置

#define LCD_AC_AUTO_INCREMENT 0x06 //数据读、写操作后,AC自动增一

#define LCD_AC_AUTO_DECREASE 0x04 //数据读、写操作后,AC自动减一

#define LCD_MOVE_ENABLE 0x05 //数据读、写操作,画面平移

#define LCD_MOVE_DISENABLE 0x04 //数据读、写操作,画面不动

#define LCD_GO_HOME 0x02 //AC=0,光标、画面回HOME位

//设置显示、光标及闪烁开、关

#define LCD_DISPLAY_ON 0x0C //显示开

#define LCD_DISPLAY_OFF 0x08 //显示关

#define LCD_CURSOR_ON 0x0A //光标显示

#define LCD_CURSOR_OFF 0x08 //光标不显示

#define LCD_CURSOR_BLINK_ON 0x09 //光标闪烁

#define LCD_CURSOR_BLINK_OFF 0x08 //光标不闪烁

//光标、画面移动,不影响DDRAM

#define LCD_LEFT_MOVE 0x18 //LCD显示左移一位

#define LCD_RIGHT_MOVE 0x1C //LCD显示右移一位

#define LCD_CURSOR_LEFT_MOVE 0x10 //光标左移一位

#define LCD_CURSOR_RIGHT_MOVE 0x14 //光标右移一位

//工作方式设置

#define LCD_DISPLAY_DOUBLE_LINE 0x38 //两行显示

#define LCD_DISPLAY_SINGLE_LINE 0x30 //单行显示

#define LCD_CLEAR_SCREEN 0X01 //清屏

/***********************LCD1602地址相关******************************/

#define LINE1_HEAD 0x80 // 第一行DDRAM起始地址

#define LINE2_HEAD 0xc0 // 第二行DDRAM起始地址

#define LINE1 0 //第一行

#define LINE2 1 //第二行

#define LINE_LENGTH 16 //每行的最大字符长度

/***********************LCD1602接线引脚定义**************************

**********************可根据实际电路改变*******************************/

#define LCDIO P3 //定义P2口与LCD1602的数据口相接

sbit LCD_RS=P1^4;

sbit LCD_RW=P1^3;

sbit LCD_EN=P1^2;

sbit LCD_BUSY=LCDIO^7;

/**********************另外相关的定义*********************************/

#define HIGH 1

#define LOW 0

#define TURE 1

#define FALSE 0

#define uchar unsigned char

#define uint unsigned int

#define NUM 12

/*************************以下是函数的申明部分*************************/

void LCD_init(void); //LCD1602初始化

void LCD_send_command(uchar command); //

void LCD_send_data(uchar dat);

void LCD_write_char(uchar x,uchar y,uchar dat);

void LCD_write_string(uchar x,uchar y,char *Data);

void delay_ms(uint n);

void LCD_check_busy(void);

/*********************结束***********************************************/

//at24c02 part

#define WRITE24C02 0xA0

#define READ24C02 0xA1

//I2C part

#define Wait1us _nop_();

#define Wait2us {_nop_();_nop_();}

#define Wait4us {Wait2us;Wait2us;}

#define Wait8us {Wait4us;Wait4us;}

#define Wait10us {Wait8us;Wait2us;}

sbit SDA=P2^7; //AT24C02 serial data pin 5

sbit SCL=P2^6; //AT24C02 serial clock pin 6

/********************************************************************/

void I2C_start(void);//I2C start function

void I2C_stop(void);//I2C stop function

//void I2C_send_ack(void);//I2C send responsion function

void I2C_send_noack(void);

bit I2C_write_byte(unsigned char IIC_data);//I2C bus write byte function

unsigned char I2C_read_byte(void);//I2C bus read byte function

/********************************************************************/

void AT24C02_write(unsigned char address,unsigned char *buf,unsigned char n);//write 24c02 information function

void AT24C02_read(unsigned char address,unsigned char *buf,unsigned char n);//read 24c02 information function

/********************************************************************/

void Mcu_init(void);//system initize funcition

void I2C_init(void);

unsigned char count[2];

unsigned char sharebuf[NUM]={'A','B','C','D','1','2','3',')','\0','\0','\0','\0'};

//unsigned char sharebuf[NUM];

unsigned char readbuf[NUM];

/********************************************************************/

delay32()

{

unsigned int i=300;

while(i--);

}

void main()

{

unsigned char temp;

Mcu_init();

AT24C02_write(0x00,sharebuf,8);

AT24C02_read(0x00,readbuf,8);

//LCD_write_char(0x08,LINE2,(readbuf[3]/10)|0x30);

//LCD_write_char(0x09,LINE2,(readbuf[3]%10)|0x30);

//LCD_write_char(0x0a,LINE2,(readbuf[4]/10)|0x30);

//LCD_write_char(0x0b,LINE2,(readbuf[4]%10)|0x30);

//LCD_write_char(0x0c,LINE2,(readbuf[5]/10)|0x30);

//LCD_write_char(0x0d,LINE2,(readbuf[5]%10)|0x30);

//LCD_write_char(0x0e,LINE2,(readbuf[6]/10)|0x30);

//LCD_write_char(0x0f,LINE2,(readbuf[6]%10)|0x30);

LCD_write_string(0x00,LINE1,sharebuf);

LCD_write_string(0x00,LINE2,readbuf);

while(1){}

/*while(1)

{

sharebuf[0]=count[1];

sharebuf[1]=count[0];

AT24C02_write(0x00,sharebuf,2);

AT24C02_read(0x00,sharebuf,2);

temp=sharebuf[0];

LCD_write_string(0x00,LINE1,"AT24C02 TEST");

LCD_write_char(0x0e,LINE1,(temp/10)|0x30);

LCD_write_char(0x0f,LINE1,(temp%10)|0x30);

LCD_write_string(0x00,LINE2,"TIMER0 JISHU");

LCD_write_char(0x0e,1,(count[1]/10)|0x30);

LCD_write_char(0x0f,1,(count[1]%10)|0x30);

}*/

}

/***********************************************************************/

void timer0(void) interrupt 1 using 1

{

TH0=-(12000/256);

TL0=-(12000%256);

count[0]=count[0]+1;

if(count[0]==100)

{

count[0]=0;

count[1]=count[1]+1;

if(count[1]==99)

count[1]=0;

}

//12ms中断1次

}

/***********************************************************************/

void Mcu_init(void)

{

TMOD=0x01;

TH0=-(12000/256);

TL0=-(12000%256);

EA=HIGH; //启用所有中断功能

ET0=HIGH; //启用TF0中断功能;

//以上两句相当于 IE= 0x82;

TR0=HIGH; //启动定时器0;

LCD_init();

}

/***********************************************************************/

/******************************** I2C PART **************************/

void I2C_start(void)

{

SCL=1; Wait2us;

SDA=1; Wait2us;

SDA=0; Wait2us;

SCL=0; Wait2us;

}

/***********************************************************************/

void I2C_stop(void)

{

SDA=0;Wait2us;

SCL=1;Wait2us;

SDA=1;Wait2us;

SCL=0;Wait2us;

}

/***********************************************************************/

void I2C_send_ack(bit sig)

{

SDA=0;Wait2us

SCL=1;Wait2us

SCL=0;Wait2us

SDA=1;

}

/*************************************************************************/

void I2C_send_noack(void)

{

SDA=1;Wait2us

SCL=1;Wait2us

SCL=0;

}

/*****************************************************************************/

void I2C_send_ackold(bit sig)

{

SDA=sig;

SCL=0;Wait2us;

SCL=1;Wait2us;

SCL=0;Wait2us;

}

void I2C_TestACK(void){

Wait10us;

}

/***********************************************************************/

bit I2C_write_byte(unsigned char input)

{

bit ack;

unsigned char temp;

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

{

SDA=0;

if ((input<

SCL=1;Wait2us;

SCL=0;

}

SDA=1;Wait2us;//释放数据线,准备接收应答信号

ack=SDA;

SCL=1;Wait2us;

SCL=0;

return ack;

}

/***********************************************************************/

unsigned char I2C_read_byte(void)

{

unsigned char temp,rbyte=0;

SDA=1;

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

{

SCL=0;Wait2us

SCL=1;

rbyte<<=1;

if (SDA==1){rbyte+=1;}

}

SCL=0;

return(rbyte);

}

/************************************************************************/

void AT24C02_write(unsigned char address,unsigned char *buf,unsigned char Nbyte)

{

I2C_start();

I2C_write_byte(WRITE24C02);

I2C_TestACK();

I2C_write_byte(address);

I2C_TestACK();

for(;Nbyte!=0;Nbyte--)

{

I2C_write_byte(*buf);

I2C_TestACK();

buf++;

}

I2C_TestACK();

I2C_stop();

delay_ms(10);//这个很重要,调了几天问题就是出在h里的,最好在每个函数之间加延时

}

/************************************************************************/

void AT24C02_read(unsigned char address,unsigned char *buf,unsigned char Nbyte)

{

I2C_start();

I2C_write_byte(WRITE24C02);

I2C_TestACK();

I2C_write_byte(address);

I2C_TestACK();

I2C_start();

I2C_write_byte(READ24C02);

I2C_TestACK();

while(Nbyte!=1)

{

*buf=I2C_read_byte();

I2C_send_ack(0);

buf++;

Nbyte--;

}

*buf=I2C_read_byte();

I2C_send_noack();

I2C_stop();

}

/**************LCD1602的初始化***************************/

void LCD_init(void)

{

LCD_send_command(LCD_DISPLAY_DOUBLE_LINE);

LCD_send_command(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);

LCD_send_command(LCD_DISPLAY_ON|LCD_CURSOR_OFF);

LCD_send_command(LCD_CLEAR_SCREEN);

}

/***********************检测LCD状态*********************************/

void LCD_check_busy(void)

{

do

{

LCD_EN=0;

LCD_RS=0;

LCD_RW=1;

LCDIO=0xff;

LCD_EN=1;

}

while(LCD_BUSY==1);

LCD_EN=0;

}

/************LCD1602写命令*******************************/

void LCD_send_command(uchar command)

{

LCD_check_busy();

LCD_RS=LOW;

LCD_RW=LOW;

LCD_EN=HIGH;

LCDIO=command;

LCD_EN=LOW;

}

/********************************************************/

/*****************LCD1602写数据**************************/

void LCD_send_data(uchar dat)

{

LCD_check_busy();

LCD_RS=HIGH;

LCD_RW=LOW;

LCD_EN=HIGH;

LCDIO=dat;

LCD_EN=LOW;

}

/***********************LCD1602显示字符*********************************/

void LCD_write_char(uchar x,uchar y,uchar dat)

{

unsigned char address;

if (y == LINE1)

address = LINE1_HEAD + x;

else

address = LINE2_HEAD + x;

LCD_send_command(address);

LCD_send_data(dat);

}

/******************LCD1602显示字符串*********************/

void LCD_write_string(uchar x,uchar y,uchar *Data)

{

if(y==LINE1)

{

if(x

{

LCD_send_command(LINE1_HEAD+x);

for(;x

{

LCD_send_data(*(Data++));

}

if(*Data!='\0')

{

x=0;

y=LINE2;

}

}

}

if(y==LINE2)

{

LCD_send_command(LINE2_HEAD+x);

for(;x

{

LCD_send_data(*(Data++));

}

}

}

/****************************************************************/

/********************延时函数***********************************/

/***************************************************************/

void delay_ms(uint n)

{

uint i,j;

for(i=n;i>0;i--)

for(j=0;j<1140;j++)

;

}

/*********************************************************************/

at24c16如何划分出多个读写区_读写AT24C02,并用1602显示相关推荐

  1. at24c16如何划分出多个读写区_漫话:如何给女朋友解释为什么Windows上面的软件都想把自己安装在C盘...

    周末,我在家里面看电视,女朋友正在旁边鼓捣她的电脑,但是好像并不是很顺利,于是就有了以下对话. 计算机存储 我们使用的计算机中,保存信息的介质有两类: 一类是内部存储器,一断电就会把记住的东西丢失. ...

  2. mysql读写分离优点_mssql2008 读写分离_mysqlproxy读写分离_读写分离的好处

    mssql2008 读写分离 在一些大型的网站或者应用中,单台的SQL Server 服务器可能难以支撑非常大的访问压力.mssql2008 读写分离很在这时候,第一个想到的就是一个解决性能问题的利器 ...

  3. at24c16如何划分出多个读写区_如何1分钟遍历100T数据?

    如何快速遍历一个超大数据集 ? 文件是存储在磁盘上的,文件的读写访问速度受限于磁盘的物理限. 如果才能在1 分钟内完成 100T 大文件的遍历呢? 磁盘存储结构 磁盘是一种可持久保存,持续读写数据的存 ...

  4. at24c16如何划分出多个读写区_AVR学习笔记九、基于AT24C16的数据存储实验

    Ema{@AVR 学习笔记九.基于 AT24C16 的数据存储实验 ------- 基于 LT_Mini_M16 9.1 用 I/O 口模拟 I2C 总线实现 AT24C16 的读写 9.1.1 .实 ...

  5. at24c16如何划分出多个读写区_51单片机向at24c16EPROM写入一个数据每问题,写入多个数据,读出的数据都一样...

    #include#defineucharunsignedcharsbitsda=P2^0;sbitscl=P2^1;uchara;voiddelay(){;;}voidstart()//开始信号{sd ...

  6. raid读写速度对比_读写速度对比:两者伯仲之间_三星 840EVO mSATA_固态硬盘评测-中关村在线...

    ■ATTO Disk Benchmark最大读写测试 ATTO Disk Benchmark是一款优秀且免费的磁盘基准测试软件,支持对稳定性/突发性传输速率进行读写测试,适用于常规硬盘.RAID.US ...

  7. 什么是堆栈?内存中划分出按FIL0方式操作的特殊区域,叫做堆栈

    内存中划分出按FIL0方式操作的特殊区域,叫做堆栈 有两个操作,分为压栈,出栈 每次压栈和出栈以字为单位. SS存放段基值,SP存放栈顶单元偏移量 SS:SP构成堆栈指针 物理地址SSx16+SP 常 ...

  8. 长安二中计算机学院,最新!第一波中考录取分数线出炉!长安区12所高中录取分数线正式公布!...

    原标题:最新!第一波中考录取分数线出炉!长安区12所高中录取分数线正式公布! 8月1日,长安区正式公布本区12所高中录取分数线信息. 从分数线情况来看,长安区2017中考录取分数线最高的为长安一中60 ...

  9. 深耕技术的同时,别忘了走出自己的舒适区

    01 最近认识一个大学生,一个让我觉得非常厉害的大学生--有三个工作室,还有一间店铺:月收入具体有多少,我红着脸不敢问,据他自己说这一周光投资区块链就亏损了一万八! 听他侃侃而谈的时候,总有一根神经在 ...

最新文章

  1. android应用去掉状态栏_Android 显示、隐藏状态栏和导航栏
  2. gvim在windows下中文乱码的终极解决方案
  3. 信息系统项目管理师-项目人力资源管理核心知识点思维脑图
  4. matlab中sign函数用法
  5. CSS3中的2D和3D转换知识介绍
  6. oc引导windows蓝屏_人人都会遇到系统蓝屏问题,教大家自已排除蓝屏,学会一辈子受用...
  7. mongodb 数字 _id_MongoDB学习笔记MongoDB简介及数据类型
  8. 多么痛的领悟--写在领英股票被腰斩之后
  9. c语言凸包算法,基于C语言的凸包算法实现
  10. 应用安全-提权/降权相关整理
  11. 套现4.88亿美元,百度从此告别外卖!
  12. 中国住户收入调查(CHIP)数据及问卷(1988-2008年)
  13. 设计模式七大原则——里氏替换原则
  14. 原生JS实现刮刮乐功能
  15. [NLP]高级词向量表达之Word2vec详解(知识点全覆盖)
  16. BUUCTF NewStarCTF一些新知识记录
  17. 量子擦除延迟选择实验时间猜想
  18. 企业宣传类PPT模板
  19. 【socket】socket编程总目录
  20. Vue2到Vue3实战必备技能(一)

热门文章

  1. 最近写SQL老出错!
  2. SAP Spartacus 单元测试开发规范
  3. TypeScript class 的静态成员变量
  4. SAP Spartacus list view里router-outlet的填充逻辑
  5. SAP Spartacus cost center list的数据源分析
  6. scss 里的 Mixins 用法介绍
  7. SAP CRM 产品主数据搜索alternative ID type下拉菜单的渲染逻辑
  8. SpringBoot的端口配置server.port没办法设置成Linux的环境变量
  9. 将阿里云上的nodejs应用配置成SAP云平台上destination的目的地之后
  10. Hybris commerce的promotion rule里的固定折扣功能