论文部分内容阅读
摘 要:浅析MCS-51单片机存储器的设计,利用单片机的I/O口外接数字存储器——AT24C02,可以对其进行读与写,通过液晶12864显示,广泛应用于数据存储。
关键词:单片机;AT24C02;液晶12864
1、引言
单片机自身的存储容量不大,当我们与外围大数据的交换时,不能满足要求,所以采用存储器AT24C02进行操作,AT24C02 具有硬件连接简单、误差低、性能稳定等优点。
2、硬件组成
温度测控系统实际是由51单片机最小系统、AT24C02、液晶12864构成。
3、程序设计
#include
#include"i2c
#define uint unsigned int
#define uchar unsigned char
#define CMD 0xf8
#define DAT 0xfa
void delay(uint x)
{ while(x--);}
void send_8bit(uchar cmd) //send 8bit
{ uchar i;
for(i=0;i<8;i++)
{ sclk=0;
if(cmd&0x80) sid=1;
else sid=0;
sclk=1;
cmd<<=1;
}
}
void write_cmd(uchar cmd) //向LCD写入地址
{ sclk=0;
cs=1;
send_8bit(CMD);
send_8bit(cmd&0xf0);
send_8bit(cmd<<4);
sclk=0;
cs=0;
}
void write_dat(uchar da) //向LCD写入数据
{ sclk=0;
cs=1;
send_8bit(DAT);
send_8bit(da&0xf0);
send_8bit(da<<4);
sclk=0;
cs=0;
}
void LCD_drive(bit x,uchar d)
{ if(x==0) write_cmd(d);
else write_dat(d);
}
void show_data(uchar add,uchar x)
{ LCD_drive(0,add);
LCD_drive(1,x/1000+48);
LCD_drive(1,x%1000/100+48);
LCD_drive(1,x%100/10+48);
LCD_drive(1,x%10+48);
}
void LCD_Init()
{ uint x=5000;
sclk=0;
cs=0;
LCD_drive(0,0x01);
LCD_drive(0,0x0c);
while(x--);
}
void main()
{ uchar d;
LCD_Init();
write_24c02(21,123);//此数不能超过255,把123存储到21号地址
delay(10000);
d=read_24c02(21);//读出21号地址
show_data(0x90,d);
while(1)
{
}
}
4、结束
当上述程序编写好之后,我们需要使用编译软件对其编译,得到单片机能识别的二进制代码,然后再用编程器将二进制代码烧写到单片机中,就能看到液晶显示其存储的数据。
参考文献
[1] 谭浩强.C程序设计,北京:清华大学出版社,1991.
[2] 郭天祥.51单片机C语言教程,北京:电子工业出版社,2010.
[3] 余锡存等.单片机原理及接口技术,西安:西安电子科技大学出版社,2000.
关键词:单片机;AT24C02;液晶12864
1、引言
单片机自身的存储容量不大,当我们与外围大数据的交换时,不能满足要求,所以采用存储器AT24C02进行操作,AT24C02 具有硬件连接简单、误差低、性能稳定等优点。
2、硬件组成
温度测控系统实际是由51单片机最小系统、AT24C02、液晶12864构成。
3、程序设计
#include
#include"i2c
#define uint unsigned int
#define uchar unsigned char
#define CMD 0xf8
#define DAT 0xfa
void delay(uint x)
{ while(x--);}
void send_8bit(uchar cmd) //send 8bit
{ uchar i;
for(i=0;i<8;i++)
{ sclk=0;
if(cmd&0x80) sid=1;
else sid=0;
sclk=1;
cmd<<=1;
}
}
void write_cmd(uchar cmd) //向LCD写入地址
{ sclk=0;
cs=1;
send_8bit(CMD);
send_8bit(cmd&0xf0);
send_8bit(cmd<<4);
sclk=0;
cs=0;
}
void write_dat(uchar da) //向LCD写入数据
{ sclk=0;
cs=1;
send_8bit(DAT);
send_8bit(da&0xf0);
send_8bit(da<<4);
sclk=0;
cs=0;
}
void LCD_drive(bit x,uchar d)
{ if(x==0) write_cmd(d);
else write_dat(d);
}
void show_data(uchar add,uchar x)
{ LCD_drive(0,add);
LCD_drive(1,x/1000+48);
LCD_drive(1,x%1000/100+48);
LCD_drive(1,x%100/10+48);
LCD_drive(1,x%10+48);
}
void LCD_Init()
{ uint x=5000;
sclk=0;
cs=0;
LCD_drive(0,0x01);
LCD_drive(0,0x0c);
while(x--);
}
void main()
{ uchar d;
LCD_Init();
write_24c02(21,123);//此数不能超过255,把123存储到21号地址
delay(10000);
d=read_24c02(21);//读出21号地址
show_data(0x90,d);
while(1)
{
}
}
4、结束
当上述程序编写好之后,我们需要使用编译软件对其编译,得到单片机能识别的二进制代码,然后再用编程器将二进制代码烧写到单片机中,就能看到液晶显示其存储的数据。
参考文献
[1] 谭浩强.C程序设计,北京:清华大学出版社,1991.
[2] 郭天祥.51单片机C语言教程,北京:电子工业出版社,2010.
[3] 余锡存等.单片机原理及接口技术,西安:西安电子科技大学出版社,2000.