6 附录一
6.1 整体电路结构:
图表 23 总电路图
6.2 PCB图:
图表 24 pcb电路图
18
7 附录二
7.1 AT24C02模块
#include \
sbit WP = P1^0; sbit SCL = P1^1; sbit SDA = P1^2;
void Delay_US(void) { ;; }
void Delay_10MS(void) {
uchar i = 0; uchar j = 0;
for(i = 50;i>0;i--) { for(j=200;j>0;j--); } }
void AT24C08_unprotect() {
WP = 0; }
void AT24C02_Start(void) {
SDA = 1; SCL = 1; Delay_US(); SDA = 0; Delay_US(); }
void AT24C02_Stop(void) {
SDA = 0; SCL = 1; Delay_US(); SDA = 1;
//开始总线//停止总线
19
Delay_US(); }
void AT24C02_Ack(void) //ACK信号 {
uchar i = 0; //等待从机回应 SCL = 1; Delay_US();
while((SDA ==1) && (i<200))//等 侍ACK信号 { i ++; } SCL = 0; Delay_US(); }
void AT24C02_NOAck(void) //NO ACK {
SCL = 1; //主机发送给从机 Delay_US(); SDA = 1; SCL = 0; Delay_US(); }
void AT24C02_Write_Byte(uchar Value)// 写8位数据到总线 {
uchar i = 0;
for(i =0; i<8; i++) { SCL = 0; SDA = Value & 0x80;// 1000 0000 Delay_US(); SCL = 1; Delay_US(); Value <<= 1; } SCL = 0; Delay_US(); SDA = 1; }
uchar AT24C02_Read_Byte(void)//读8位数据 {
20
uchar Value = 0; uchar i = 0; SCL = 0; //低电平数据可以变化 Delay_US();
for(i = 0; i <8;i++) { SCL = 1; //高电平状态读数据 Delay_US(); if(SDA) { Value |= 0x80>>i;//先读高位数据 } SCL = 0; Delay_US(); }
return Value; }
void AT24C02_Write(uchar Address,uchar Value) {
AT24C02_Start(); //起始条件 AT24C02_Write_Byte(0xA0); //器件地址1010 0000//写 AT24C02_Ack(); //等从机应答
AT24C02_Write_Byte(Address); // 1024 字节,其中一个字节操作25 AT24C02_Ack();
AT24C02_Write_Byte(Value); // 0x15 AT24C02_Ack(); // AT24C02_Stop(); Delay_10MS(); }
uchar AT24C02_Read(uchar Address) {
uchar Value = 0;
AT24C02_Start(); //开始总线 AT24C02_Write_Byte(0xA0); // 1010 0000 AT24C02_Ack();
AT24C02_Write_Byte(Address); //读数据的地址; //25 AT24C02_Ack(); AT24C02_Start(); //再次开始 AT24C02_Write_Byte(0xA1); // 1010 0001 AT24C02_Ack();
Value = AT24C02_Read_Byte(); AT24C02_NOAck(); //主机发送给从机无应答
21
AT24C02_Stop(); return Value; }
7.2 红外通信模块
sbit beer=P0^4;
sbit RED_DATA=P3^2; //红外接口 //uchar RED_ADD=0; //红外遥控的地址
uchar RED_add=255; //红外遥控的地址缓存区
uchar RED_key=255; //红外摇控的键值,无键按下时为255
//红外初始化
void Init_Red(void) {
RED_DATA=1; //P3^2输出高电平 EX0=1; //开启红外中断 P3^2 }
//检测脉冲宽度
uchar Red_check(void) {
uchar t=0;uchar a=0;
while(RED_DATA) { t++; for(a=0;a<4;a++);// if(t==250) return t;//超时溢出 }
return t; }
void exter0() interrupt 0 {
uchar res=0; uchar aa=0; bit OK=0;
bit RODATA=0;
while(1) {
if(RED_DATA)//有高脉冲出现 {
22
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库课程设计 - 红外遥控电子密码锁的设计与实现(5)在线全文阅读。
相关推荐: