单片机c措辞1602液晶显示器上显示24c02贮存数据定稿.docx

上传人:b****2 文档编号:12886174 上传时间:2023-04-22 格式:DOCX 页数:12 大小:15.86KB
下载 相关 举报
单片机c措辞1602液晶显示器上显示24c02贮存数据定稿.docx_第1页
第1页 / 共12页
单片机c措辞1602液晶显示器上显示24c02贮存数据定稿.docx_第2页
第2页 / 共12页
单片机c措辞1602液晶显示器上显示24c02贮存数据定稿.docx_第3页
第3页 / 共12页
单片机c措辞1602液晶显示器上显示24c02贮存数据定稿.docx_第4页
第4页 / 共12页
单片机c措辞1602液晶显示器上显示24c02贮存数据定稿.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

单片机c措辞1602液晶显示器上显示24c02贮存数据定稿.docx

《单片机c措辞1602液晶显示器上显示24c02贮存数据定稿.docx》由会员分享,可在线阅读,更多相关《单片机c措辞1602液晶显示器上显示24c02贮存数据定稿.docx(12页珍藏版)》请在冰豆网上搜索。

单片机c措辞1602液晶显示器上显示24c02贮存数据定稿.docx

单片机c措辞1602液晶显示器上显示24c02贮存数据定稿

单片机c措辞_1602液晶显示器上显示24c02贮存数据[定稿]

单片机C语言_1602液晶显示器上显示24c02储存数据

/*********************包含的头文件

****************************/#include

#include

#defineucharunsignedchar

#defineuintunsignedint

/*********************定义LCD端口

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

/*LCD的RS,RW,EN分别是P2.6、P2.5、P2.7端口*/

/*P0.0--P0.7端口接LCD的数据端口D0--D7*/

/*24c02的sda端和scl端分别接P2.0和P2.1

*/

/*24c02的VCC端接+5V,GND,A0,A1,A2,WP都接GND*/

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

***/

sbitLCD_RS=P2^6;

sbitLCD_RW=P2^5;

sbitLCD_EN=P2^7;

sbitsda=P2^0;

sbitscl=P2^1;

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

***/

/*

*/

/*延时子程序

*/

/**/

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

#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};

voiddelay2()

{;;}

voiddelay(ucharx)

{ucharj;

while((x--)!

=0)

{for(j=0;j<125;j++)

{;}

}

}

voiddelay1(ucharx)

{

uchara,b;

for(a=x;a>0;a--)

for(b=100;b>0;b--);

}

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

/**/

/*存储芯片24c02设置

*/

/**/

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

***/

voidstart()//开始信号{

sda=1;

delay2();

scl=1;

delay2();

sda=0;

delay2();

}

voidstop()//停止信号{

sda=0;

delay2();

scl=1;

delay2();

sda=1;

delay2();

}

voidrespons()//应答信号{

uchari;

scl=1;

delay2();

while((sda==1)&&(i<250))i++;//sda为1则应答或250个机器

周期后默认为应答

scl=0;

delay2();

}

voidinit()//24c02初始化

{

sda=1;

delay2();

scl=1;

delay2();}

voidwrite_byte(uchardate)//写入1byte数据

{

uchari,temp;

temp=date;

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

{

temp=temp<<1;

scl=0;

delay2();

sda=CY;

delay2();

scl=1;

delay2();

}

scl=0;

delay2();

sda=1;

delay2();}

ucharread_byte()//读出1byte数据

{

uchari,k;

scl=0;

delay2();

sda=1;

delay2();

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

{

scl=1;

delay2();

k=(k<<1)|sda;

scl=0;

delay2();

}

returnk;

}

/*****************在地址address处写入数据date*****************/voidwrite_add(ucharaddress,uchardate)

{

start();

write_byte(0xa0);

respons();

write_byte(address);

respons();

write_byte(date);

respons();

stop();

}

/*************读出24c02的地址address处的数据********************/ucharread_add(ucharaddress){

uchardate;

start();

write_byte(0xa0);

respons();

write_byte(address);

respons();

start();

write_byte(0xa1);

respons();

date=read_byte();

stop();

returndate;

}

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

/**/

/*LCD1602设置

*/

/**/

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

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

/*检查LCD忙状态*/

/*lcd_busy为1时,忙,等待。

lcd-busy为0时,闲,可写指令与数

据*/

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

bitlcd_busy()

{

bitresult;

LCD_RS=0;

LCD_RW=1;

LCD_EN=1;

delayNOP();

result=(bit)(P0&0x80);

LCD_EN=0;

return(result);

}

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

*********/

/*写指令数据到LCD

*/

/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。

*/

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

*********/

voidlcd_wcmd(ucharcmd){

while(lcd_busy());

LCD_RS=0;

LCD_RW=0;

LCD_EN=0;

_nop_();

_nop_();

P0=cmd;

delayNOP();

LCD_EN=1;

delayNOP();

LCD_EN=0;

}

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

/*写显示数据到LCD*/

/*RS=H,RW=L,E=高脉冲,D0-D7=数据。

*/

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

voidlcd_wdat(uchardat)

{

while(lcd_busy());

LCD_RS=1;

LCD_RW=0;

LCD_EN=0;

P0=dat;

delayNOP();

LCD_EN=1;

delayNOP();

LCD_EN=0;

}

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

/*LCD初始化设定*/

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

voidlcd_init()

{

delay(15);

lcd_wcmd(0x38);//16*2显示,5*7点阵,8位数据

delay(5);

lcd_wcmd(0x38);//重复

delay(5);

lcd_wcmd(0x38);//再重复

delay(5);

lcd_wcmd(0x0c);//显示开,关光标

delay(5);

lcd_wcmd(0x06);//移动光标

delay(5);

lcd_wcmd(0x01);//清除LCD的显示内容

delay(5);

}

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

***/

/*写入字符函数LCD_write_char(x,y,dat)*/

/*将字符“dat”写入LCD的第(x+1)行第(y+1)位*/

/*设定第1行显示位置:

数据指针=80+地址变量*/

/*设定第2行显示位置:

数据指针=c0+地址变量*/

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

***/

voidLCD_write_char(unsignedcharx,unsignedchary,unsigned

chardat)

{

if(x==0)

{

lcd_wcmd(0x80+y);

}

else

{

lcd_wcmd(0xc0+y);

}

lcd_wdat(dat);

}

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

***/

/*写入字符函数LCD_write_string(x,y,*s)*/

/*将字符串“*s”写入LCD的第(x+1)行第(y+1)位*/

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

***/

/*voidLCD_write_string(unsignedcharx,unsignedchar

y,unsignedchar*s)

{

while(*s)

{

LCD_write_char(x,y,*s);

s++;y++;

}

}

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

***/

/*

*/

/*主程序*/

/*将数列numb显示在LCD上*/

/*

*/

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

***/

voidmain()

{

ucharnumb[6]={3,4,5,6,7,8};//也可以改成其他数字

ucharm;

uchartemp[6];

init();//24c02初始化

lcd_init();//LCD初始化

for(m=0;m<6;m++)

{

write_add(23+m,numb[m]);

delay1(100);//延时,保证芯片的反应时间,可以改短

一些

}

for(m=0;m<6;m++)

{

temp[m]=read_add(23+m);

delay1(100);

LCD_write_char(0,m,temp[m]+'0');//+‘0’表示让LCD显示ASCIIcode

}

while

(1);//程序终止,LCD始终显示numb

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1