单片机--iic
来源:互联网 发布:linux telnet连接拒绝 编辑:程序博客网 时间:2024/06/09 17:25
iic.c
#include "myhead.h"xdata unsigned char alarm_hour = 13;xdata unsigned char alarm_min = 1;xdata unsigned char alarm_sec = 59;bit ack = 0;void iic_start(){ SDA = 1;//先操作SDA保证SCL=1期间SDA只有一个下降沿信号 SCL = 1; delay_us(1); SDA = 0; delay_us(1); SCL = 0;//钳住总线,让IIC失效}void iic_stop(){ SDA = 0; SCL = 1; delay_us(1); SDA = 1; delay_us(1); SCL = 0;}void iic_send_byte(unsigned char byte)//每次发送最高位{ unsigned char i; for(i = 0;i < 8;i++) { SDA = byte & 0x80;//赋值非零,SDA=1,赋值为零,SDA=0 SCL = 1; delay_us(1); SCL = 0; byte <<= 1; } SCL = 1; SDA = 1; delay_us(1); if(0 == SDA) { ack = 1; } else { ack = 0; } SCL = 0;}unsigned char iic_rcv_byte(){ unsigned char i; unsigned char temp = 0; unsigned char a; SDA = 1; for(i = 0;i < 8;i++) { SCL = 0; delay_us(1); SCL = 1; if(SDA) { a = 0x01; } else { a = 0; } temp |= a << (7 - i); delay_us(1); } SCL = 0; return temp;}// void iic_ack()// {// SDA = 0;// SCL = 1;// delay_us(1);// SCL = 0;// }void iic_noack(){ SDA = 1; SCL = 1; delay_us(1); SCL = 0;}//向AT24C02发送字符串unsigned char AT24C02_send_str(unsigned char devaddr,unsigned char romaddr,unsigned char *s,unsigned char num){ unsigned char i; iic_start();//起始信号 iic_send_byte(devaddr); if(0 == ack) { return ERR; } iic_send_byte(romaddr); if(0 == ack) { return ERR; } for(i = 0;i < num;i++) { iic_send_byte(*s); if(0 == ack) { return ERR; } s++; } iic_stop(); return SUCC;}//从AT24C02读数据unsigned char AT24C02_rcv_time(unsigned char devaddr,unsigned char romaddr){ unsigned char t; iic_start(); iic_send_byte(devaddr); if(0 == ack) { return ERR; } iic_send_byte(romaddr); if(0 == ack) { return ERR; } iic_start(); iic_send_byte(devaddr + 1); t = iic_rcv_byte(); iic_noack(); iic_stop(); return t;}void iic(){ unsigned char i; unsigned char time[4] = {0}; unsigned char clock[4] = {0}; unsigned char flag1 = 1; unsigned char key; lcd_init(); uart_init(); time0_init(); hour = AT24C02_rcv_time(0xae,16); min = AT24C02_rcv_time(0xae,17); sec = AT24C02_rcv_time(0xae,18); delay_ms(500); alarm_hour = AT24C02_rcv_time(0xae,24); alarm_min = AT24C02_rcv_time(0xae,25); alarm_sec = AT24C02_rcv_time(0xae,26); while(flag1) { if(flag) { if(ch[0] == 't') { TR0 = 0; lcd_dis_str(0,1,"change time "); hour = (ch[1] - '0') * 10 +(ch[2] - '0'); min = (ch[4] - '0') * 10 +(ch[5] - '0'); sec = (ch[7] - '0') * 10 +(ch[8] - '0'); lcd_dis_time(); delay_s(3); lcd_dis_str(0,1," "); lcd_dis_time(); lcd_dis_alarm_time(); TR0 = 1; } if(ch[0] == 'c') { lcd_dis_str(0,0,"change clock "); alarm_hour = (ch[1] - '0') * 10 +(ch[2] - '0'); alarm_min = (ch[4] - '0') * 10 +(ch[5] - '0'); alarm_sec = (ch[7] - '0') * 10 +(ch[8] - '0'); lcd_dis_alarm_time(); delay_s(5); lcd_dis_str(0,0," "); lcd_dis_time(); lcd_dis_alarm_time(); } uart_send_str(ch); flag = 0; } else { lcd_dis_time(); lcd_dis_alarm_time(); } if(alarm_hour == hour && alarm_min == min) {// PlayMusic();// lcd_dis_time();// lcd_dis_alarm_time(); for(i = 0;i < 100;i++) { beep = ~beep; delay_ms(10); } } time[0] = hour; time[1] = min; time[2] = sec; clock[0] = alarm_hour; clock[1] = alarm_min; clock[2] = alarm_sec; AT24C02_send_str(0xae,16,time,3); delay_ms(500); AT24C02_send_str(0xae,24,clock,3); delay_s(1); key = key_scan(); if(0xe7 == key) { lcd_init(); lcd_over(); flag1 = 0; iic_stop(); } }}
iic.h
#ifndef _UART_H#define _UART_Hextern void uart_init(void);extern void uart_isr();extern void uart_send_byte(unsigned char byte);extern void uart_send_str(unsigned char *str);extern void uart();#endif
0 0
- 单片机--iic
- 单片机iic
- pic单片机调试IIC
- 单片机IIC设备死锁
- 51单片机STC89C52 iic
- pic单片机iic
- 51单片机中iic
- 单片机基础--IIC通信协议
- 51单片机IIC总线编程
- 51单片机的IIC总线
- 51单片机 软件模拟IIC
- 单片机之IIC--AT24C256的读写程序
- 单片机 MSP430 IIC控制器编程(1)
- 单片机 MSP430 IIC控制器编程(2)
- 单片机 MSP430 模拟IIC编程(1)
- 单片机 MSP430 模拟IIC编程(2)
- 单片机模拟IIC时序读写24C02
- 单片机 IIC 总线协议 和 详细例程
- 公钥、私钥和数字签名理解
- 网页编码utf8 gb2312 gbk的区别
- HDU 5491 The Next(构造)
- mysql for windows 密码重置
- 数据结构基础——栈的C++实现
- 单片机--iic
- 玩转四旋翼无人机(姿态控制 in ArduPilot)
- php中中文字符串的截取和获取长度 mb_substr() mb_strlen()
- Android实现二维码的生成和扫描
- HDU 5489 Removed Interval(DP)
- Python PyInstaller命令
- Unity 控制摄像机跟随运动物体
- TOJ 2577.Rounders
- jQuery 之 (三)事件绑定、动画效果、封闭ajax、三级联动、插件