//C51_将按键次数写入AT24C02,再读出送LCD显示
//这篇文章较为详细介绍了AT24C02,感谢!
//开发版在连接AT24C02千万别连错,视力不好的近视的连好了仔细检查
//思路:1.利用以前编写的LCD显示函数(直接copy)
2.消抖程序确认按键按下(电平改变,直接copy)
3.计数程序
4.AT24C02的相关程序
#code
#include<reg51.h>
#include<intrins.h> //包含_nop_()函数的头文件
/*LCD模块与单片机引脚连接确定*/
sbit RS=P1^0;//RS为寄存选择位,引脚根据自己的电路图定义
sbit RW=P1^1;//读写选择位
sbit E=P1^2;//LCD模块使能端
sbit BF=P0^7;//1602字符型LCD设置的忙碌标志位BF连接在8位双向数据线的D7位上根据单片机原理图我对应于P0^7引脚
sbit S=P1^4; //开关
#define OP_READ 0xa1 // 宏 全局定义
#define OP_WRITE 0xa0
sbit SDA=P3^4; //SDA根据原理图设置引脚
sbit SCL=P3^3;
unsigned char code digit[ ]={
"0123456789"}; //
/*LCD设置*/
/***************************************************
延时基函数:设置目的为根据所需时间随意改变谁让这是1ms
***************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)//time~=3*(i*j)
;
}
/*****************************************************
延时自定义函数:根据基变量1ms来自定义定延迟时间函数
***************************************************/
void delaynms(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
/*****************************************************
LCD模块状态检测>>>LCD模块是慢显示器>>>在写每一条指令前需要检测
忙碌状态,忙等,不忙在执行。
***************************************************/
unsigned char BusyTest(void)
{
bit result;
RS=0;
//RS是寄存器选择,RS=0为选择了指令寄存器>>>检查是否忙碌跟指令相关
RW=1;
//RW为读写选择,RW=1为读LCD的忙碌状况>>>检查是要去读状态
E=1;
//E是模块使能端,负跳变时E=1,LCD模块开始执行命令
_nop_(); //一个空的机器周期(记住就OK啦!)
_nop_();
_nop_();
_nop_(); //4个机器周期,让硬件有充足反应时间>>>LCD是一个慢显示器
result=BF; //把BF的状态给result返回传达忙碌状态
E=0; //不得进行读/写操作
return result;//result=1 busy;result