/*-----------------------------------------------
名称:IIC协议 EEPROM24c02
内容:此程序用于检测EEPROM性能,测试方法如下:写入24c02一些数据,然后在内存中清除这些数据,
掉电后主内存将失去这些信息,然后从24c02中调入这些数据。看是否与写入的相同。
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include <intrins.h> //包含NOP空指令函数 _nop_();
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define AddWr 0xae //写数据地址,需要参考24c02芯片文档
#define AddRd 0xaf //读数据地址
sbit SDA=P1^2; //定义总线连接端口
sbit SCL=P1^1;
sbit WP=P1^0; //写保护,这里不使用
sbit CS=P2^0; //CS=RS
sbit SID=P2^1; //RW=SID
sbit SCLK=P2^2; //E=SCLK
sbit PSB=P2^3; //串并
sbit power_key=P3^3;//sim300使能控制
sbit Beep=P3^4;//蜂鸣器
bit KEY_BACK;//密码输入正确标志位
code uchar mynew1[]={"欢迎您使用短信防盗报警系统!"};
code uchar mynew2[]={"设置短信中心号码请按*00#"};
code uchar mynew3[]={"设置短信接收号码请按*11#"};
code uchar mynew4[]={"请输入号码:"};
code uchar mynew5[]={"设置成功请稍等!"};
code uchar mynew6[]={"您输入的有误,请重新输入!"};
code uchar mynew7[]={"请查收短信!"};
uchar readkey;
uchar KEY_ReturnData;
uchar store[2];
uchar codenum[12];
uchar codenum_check[4];//存储密码
uchar xdata Ring_PhoneNumber[11]; //存储来电号码
uchar xdata SMS_CenterNumber[11]; //存储短信中心号码
/*------------------------------------------------
键盘显示存储函数声明
------------------------------------------------*/
void display_1(void);
void display_2(void);
void display_3(void);
void display_4(void);
void display_5(void);
void display_6(void);
uchar keyscan(void);//键盘扫描
uchar read_key();
void Delay(uint a);
void W_1byte(uchar RW, uchar RS, uchar W_data);
void Write_8bits(uint W_bits);
void start();
void stop();
void respons();
void at2402_init();
void write_byte(uchar date);
uchar read_byte();
void write_add(uchar address,uchar date);
uchar read_add(uchar address);
void LCD_Init(void);
void display_key();
void change(uchar key);
uchar read_display(uchar addr,uchar temp[]);
void set_key();
void display();
void Beep_Buzzer(uchar num,uint Temp);
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sim300函数声明部分
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void send_string(uchar *temp5);
void SIM300C_Init(); //SIM300c模块的初始化
void send_message();
void PhoneCenterNumber_PDUcode(uchar *Temp) ;
void init_serialcom9600(void); //9600波特率串口初始化函数 用于与SIM300通信
void Beep_Buzzer(uchar num,uint Temp);
/*公用子函数*/
void delayUs(); //2um延时子程序
void delayms(uint a);
/*------------------------------------------------
主函数
------------------------------------------------*/
void main()
{
KEY_BACK=0;//以后要放在单片机初始化里面
init_serialcom9600(); delayms(100);
Beep_Buzzer(1,200);
SIM300C_Init();
Beep_Buzzer(2,200);
LCD_Init();
at2402_init();
display_1();//欢迎使用
Beep_Buzzer(3,200);
while(KEY_BACK==0)
{
set_key();//调用设置号码函数
}
read_display(200,SMS_CenterNumber);//讲读出的短信中心号码显示并且保存在数组中,用于发送短信
read_display(100,Ring_PhoneNumber);//讲读出的短信接收号码显示并且保存在数组中,用于发送短信
send_message();
delayms(100);
while(1);
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*设置号码并存储显示函数 */
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void set_key()
{
uchar i,j;
display_2();//设置短信中心号码 请按*00#
display_3();//设置短信中心号码 请按*11#
for(j=0;j<4;j++)
{
codenum_check[j]=read_key();
W_1byte(0, 0, 0X98+j);
change(KEY_ReturnData);
Delay(20);
W_1byte(0,1,store[0]);
W_1byte(0,1,store[1]);
Delay(300);
}
if((codenum_check[0]==0xb7)&&(codenum_check[1]==0xd7)&&(codenum_check[2]==0xd7)&&(codenum_check[3]==0xe7))
//接下来存储短信中心号码 存储于200开始
{
KEY_BACK=1;//输入功能设置的四位号码正确标志
display_4();//请输入号码
for(i=0;i<11;i++)
{
W_1byte(0, 0, 0X90+i);
codenum[i]=read_key();
write_add(200+i,codenum[i]);
change(KEY_ReturnData);
Delay(20);
W_1byte(0,1,store[0]);
W_1byte(0,1,store[1]);
}
display_5();
}
else if((codenum_check[0]==0xb7)&&(codenum_check[1]==0xbe)&&(codenum_check[2]==0xbe)&&(codenum_check[3]==0xe7))
{
//接下来设这中心号码 存储于100 开始
KEY_BACK=1;//输入功能设置的四位号码正确标志
display_4();//请输入号码
for(i=0;i<11;i++)
{
W_1byte(0, 0, 0X90+i);
codenum[i]=read_key();
write_add(100+i,codenum[i]);
change(KEY_ReturnData);
Delay(20);
W_1byte(0,1,store[0]);
W_1byte(0,1,store[1]);
}
display_5();
}
else
{
KEY_BACK=0;//输入功能设置的四位号码错误
display_6();
return;
}
}
////////////////////////////////////////////////////////////存储芯片AT24C02//////////////////////////////////////////////////////////////////
/*****************************************************************************
/*****************************************************************************
功能 :启动I2C;
*****************************************************************************/
void start()
{
SDA=1;
SCL=1; //SCL为高,SDA下降沿启动I2C
_nop_();
SDA=0;
_nop_();
SCL=0;
}
/*****************************************************************************
功能 :停止I2C;
*****************************************************************************/
void stop()
{
SDA=0; //SCL为高,SDA下降沿启动I2C
SCL=1;
_nop_();
SDA=1;
_nop_();
SCL=0;
}
void respons()
{
uchar i;
SCL=1;
_nop_();
while((SDA==1)&&(i<250))i++;
SCL=0;
_nop_();
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
外部存储器初始化
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void at2402_init()//外部存储器初始化
{
SDA=1;
SCL=1;
}
/*****************************************************************************
功能 :24C16写入一个字节;
入口参数:写入的字节;
*****************************************************************************/
void write_byte(uchar date)
{
uchar i;
SCL=0;
for(i=0;i<8;i++)
{ date=date<<1;
SDA=CY;
SCL=1;
_nop_();
SCL=0;
_nop_();
}
}
uchar read_byte()
{
uchar i,k;
for(i=0;i<8;i++)
{
SCL=1;
_nop_();
k=(k<<1)|SDA;
SCL=0;
_nop_();
}
return k;
}
void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
/*------------------------------------------------
键盘扫描程序
------------------------------------------------*/
uchar keyscan(void) //键盘扫描函数,使用行列反转扫描法
{
uchar cord_h,cord_l;//行
GSM.rar_红外采集器_震动 报警_震动传感器
版权申诉
40 浏览量
2022-09-19
19:27:33
上传
评论
收藏 6KB RAR 举报
朱moyimi
- 粉丝: 63
- 资源: 1万+
最新资源
- python-leetcode面试题解之第157题用Read4读取N个字符-题解.zip
- python-leetcode面试题解之第156题上下翻转二叉树-题解.zip
- python-leetcode面试题解之第155题最小栈-题解.zip
- python-leetcode面试题解之第153题寻找旋转排序数组中的最小值-题解.zip
- python-leetcode面试题解之第152题乘积最大子数组-题解.zip
- python-leetcode面试题解之第151题反转字符串中的单词-题解.zip
- python-leetcode面试题解之第150题逆波兰表达式求值-题解.zip
- python-leetcode面试题解之第149题直线上最多的点数-题解.zip
- python-leetcode面试题解之第148题排序链表-题解.zip
- python-leetcode面试题解之第147题对链表进行插入排序-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈