IIC_AD/DA
来源:互联网 发布:java服务器端环境搭建 编辑:程序博客网 时间:2024/05/01 05:35
主函数文件:
#include <reg52.h>#include <intrins.h>#include "./delay/delay.h"sbit SCL = P1^0;sbit SDA = P1^1;bit ack = 0;sbit RS = P2^4;sbit RW = P2^5;sbit E = P2^6;#define SUCC 1#define ERR 0#define LCDPORT P0#define LCD_WRITE_DATA 1#define LCD_WRITE_COM 0void lcd1602_write(unsigned char byte,unsigned char flag){ if(flag){ RS = 1;}else{ RS = 0;}RW = 0; E = 1; LCDPORT = byte;delay_us(5);E = 0; }void lcd_dis_char(unsigned char x, unsigned char y, unsigned char byte){ if((x > 15) || (y > 1)){ return ;}if(0 == y){ lcd1602_write(0x80 + x,LCD_WRITE_COM);}else{ lcd1602_write(0x80 + 0x40 + x,LCD_WRITE_COM);}lcd1602_write(byte,LCD_WRITE_DATA);}void lcd1602_dis_str(unsigned char x, unsigned char y, unsigned char *str){ if((x > 15) || (y > 1)){ return ;}if(0 == y){ lcd1602_write(0x80 + x,LCD_WRITE_COM);}else{ lcd1602_write(0x80 + 0x40 + x,LCD_WRITE_COM);}while(*str != '\0'){ lcd1602_write(*str,LCD_WRITE_DATA); str++;}}void lcd_init(){ delay_ms(15); lcd1602_write(0x38,LCD_WRITE_COM); delay_ms(5);lcd1602_write(0x38,LCD_WRITE_COM); delay_ms(5);lcd1602_write(0x38,LCD_WRITE_COM); delay_ms(5);lcd1602_write(0x38,LCD_WRITE_COM); delay_ms(5);lcd1602_write(0x08,LCD_WRITE_COM); delay_ms(5);lcd1602_write(0x01,LCD_WRITE_COM); delay_ms(5); lcd1602_write(0x06,LCD_WRITE_COM); delay_ms(5);lcd1602_write(0x0c,LCD_WRITE_COM); delay_ms(5);}void iic_start(){ SDA = 1; SCL = 1; delay_us(1); SDA = 0; delay_us(1); SCL = 0;}void iic_stop(){ SDA = 0; SCL = 1; delay_us(1); SDA = 1; delay_us(1); SCL = 0;}bit iic_send_byte(unsigned char byte){ unsigned char i; for(i = 0; i < 8; i++) { SDA = byte & 0x80; SCL = 1; delay_us(1); SCL = 0; delay_us(1); byte <<= 1;}SCL = 1;SDA = 1;delay_us(1);if(0 == SDA){ ack = 1;}else{ ack = 0;}SCL = 0;return ack;}unsigned char iic_rcv_byte(){ unsigned char i; unsigned char temp; 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;}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;}unsigned char AT24C02_rcv_byte(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; iic_start(); iic_send_byte(devaddr + 1); for(i = 0; i < num - 1; i++) { *s = iic_rcv_byte(); iic_ack(); s++;}*s = iic_rcv_byte();iic_noack();iic_stop();return SUCC;}unsigned char AD_Read(){ unsigned char temp; iic_start(); iic_send_byte(0x90); if(0 == ack) return ERR; iic_send_byte(0x40); if(0 == ack) return ERR; iic_start(); iic_send_byte(0x90 + 1); if(0 == ack) return ERR; temp = iic_rcv_byte(); iic_noack(); iic_stop(); return temp;}unsigned char DA_Write(unsigned char num){ iic_start(); iic_send_byte(0x90); if(0 == ack) return ERR; iic_send_byte(0x40); if(0 == ack) return ERR; iic_send_byte(num); if(0 == ack) return ERR; iic_stop;}void main(){ unsigned char test;// unsigned char num; lcd_init(); while(1){ test = AD_Read(); test = test*50 / 255; lcd_dis_char(0,0,(test / 10) + 0x30); lcd_dis_char(1,0,'.'); lcd_dis_char(2,0,(test % 10) + 0x30);// DA_Write(num);// num++; delay_ms(20);}}
void delay_us(unsigned char t){ while(--t);}void delay_ms(unsigned char t){ while(t--){ delay_us(245); delay_us(245); }}void delay_s(unsigned char t){ while(t--) { delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); }}
0 0
- IIC_AD/DA
- da
- da
- DA
- da
- da
- da
- da
- da
- da
- Da
- AD-DA
- AD/DA
- DA SHU
- DA-TLC5615
- dd da dfd
- The Da Vinci Code
- The Da Vinci Code
- 51Nod-1460-连接小岛
- 二、ListView的高级优化
- oxford-cs-ml-2015/practical6 代码解读(LSTMs for language modelling)
- 循环队列的c语言实现
- 1067
- IIC_AD/DA
- linux(非root) 开机启动tomcat和80端口无法开启解决方案
- PAT(A) - 1058. A+B in Hogwarts (20)
- 2017 小米java开发试题
- jQuery File Upload 多文件 单击选中或多选文件直接自动上载 无需提交按钮
- Docke 1.12 基础篇:48条命令(3)
- 微信解读
- 散列码中的equals问题
- CentOS7 安装 Mysql 5.7,密码查看与修改