基于单片机的酒精浓度测试仪
附录三
#include \
void DELAY(unsigned int t) { while(t!=0) t--; }
void IICStart(void) {
SCL=0; DELAY(1);
SDA=1; SCL=1; DELAY(1); SDA=0; DELAY(1); SCL=0; }
void IICStop(void) { SDA=0;SCL=1; DELAY(1); SDA=1; DELAY(1); SCL=0; }
void SEND0(void) { SDA=0; SCL=1; DELAY(1); SCL=0; }
void SEND1(void) { SDA=1; DELAY(1); SCL=1; DELAY(1); SCL=0; }
bit Check_Ack(void) {
unsigned char errtime=250;
- 26 -
DELAY(1); SCL=1; DELAY(1); CY=SDA; while(CY) {
errtime--; CY=SDA; if (!errtime) {
IICStop();
return 1; } }
DELAY(1); SCL=0; return 0; }
void Write_byte(unsigned char dat) {
unsigned char i; for(i=0;i<8;i++) { if((dat<
unsigned char Read_byte(void) { unsigned char i,temp=0; for(i=0;i<8;i++) {
SDA=1; SCL=1; DELAY(1); if(SDA==1) { temp=temp<<1;
基于单片机的酒精浓度测试仪
- 27 -
基于单片机的酒精浓度测试仪
temp=temp|0x01; } else temp=temp<<1; SCL=0; } return temp; }
unsigned char rdeeprom(unsigned char addr) {
unsigned char temp=0; bit flag=0; IICStart(); Write_byte(0xa0); Check_Ack(); Write_byte(addr); Check_Ack(); IICStart(); Write_byte(0xa1); Check_Ack(); temp=Read_byte(); SEND1(); IICStop();
return temp; }
void wrteeprom(unsigned char addr,unsigned char dat) {
IICStart(); Write_byte(0xa0); Check_Ack(); Write_byte(addr); Check_Ack(); Write_byte(dat); Check_Ack(); IICStop(); }
#include \#include \void delay() {
- 28 -
int i,j; for(i=0; i<=10; i++) for(j=0; j<=2; j++) ; }
uchar Convert(uchar In_Date) { /*
uchar i, Out_Date = 0, temp = 0; for(i=0; i<8; i++) {
temp = (In_Date >> i) & 0x01; Out_Date |= (temp << (7 - i)); }
return Out_Date; */ return In_Date; }
void enable(uchar del) { P0 = Convert(del); RS = 0; RW = 0; E = 0; delay(); E = 1; delay(); }
void write(uchar del) { P0 = Convert(del); RS = 1; RW = 0; E = 0; delay(); E = 1; delay(); }
基于单片机的酒精浓度测试仪
- 29 -
基于单片机的酒精浓度测试仪
void L1602_init(void) { enable(0x01); enable(0x38); enable(0x0c); enable(0x06); enable(0xd0); }
void L1602_char(uchar hang,uchar lie,char sign) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; enable(a); write(sign); }
void L1602_string(uchar hang,uchar lie,uchar *p) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; enable(a); while(1) { if(*p == '\\0') break; write(*p); p++; } }
//显示整型的温湿度数据用,共占用4位,其中一位符号位 void L1602_int(uchar hang, uchar lie, int num) {
uint temp;
uint gewei,shiwei,baiwei,sign; //首先将4位清空
L1602_char(hang, lie+0, ' '); L1602_char(hang, lie+1, ' '); L1602_char(hang, lie+2, ' '); L1602_char(hang, lie+3, ' ');
- 30 -