/**************************main.c***************************/
#include #include\"LCD1602.h\" #include\"stdio.h\" #include\"intrins.h\" #define uint unsigned int #define uchar unsigned char sbit ya=P1^2; uchar table1[]={\"fengsu: . m/s\ uchar table2[16]=\"dianyazhi: . V\"; /*得到A/D转换的数据结果********************************/ uint AD_get(uchar channel) { uchar AD_finished=0; int result; ADC_CONTR|=channel; ADC_CONTR|=0x08; while(AD_finished==0) { AD_finished=(ADC_CONTR&0x10); } result=ADC_DATA*4+ADC_LOW2; ADC_CONTR&=0xe7; return(result); } /*得到AD转换的电压结果*********************************/ float AD_work(uchar channel) { float AD_val=0; uchar num; for(num=0;num<100;num++) AD_val=AD_val+AD_get(channel); AD_val/=100; AD_val=(AD_val*5)/1024; return AD_val; } /*uint/D初始化***********************************************/ void AD_init() { P1M0=0x0f; P1M1=0x0f; ADC_CONTR=0xe0; delayms(100); } void main() { float z; LCD_init(); AD_init(); ya=1; while(1) { z=AD_work(1); //AD转化通道一 z=(z*1000*3); table1[11]='0'+(int)z%100/10; table1[10]='0'+(int)z%1000/100; table1[8]='0'+(int)z%10000/1000; table1[7]='0'+(int)z%100000/10000; displayLCD(0x80,table1); //液晶显示 delayms(1000); z=z/1.5; table2[13]='0'+(int)z%100/10; table2[12]='0'+(int)z%1000/100; table2[10]='0'+(int)z%10000/1000; displayLCD(0xc0,table2); delayms(1200); } } /***************************LCD1602.h******************************/ #ifndef __LCD1602_H__ #define __LCD1602_H__ #define uint unsigned int #define uchar unsigned char #define LCDDATA P2 sbit RS = P1^5; //数据/命令选择端(H/L) sbit RW = P1^6; //读/写选择端(H/L) sbit EN = P1^7; //使能信号 sbit BUSY = P2^7; //用于检测LCD状态字中的FB标识 //********************************************************** //延时函数 //********************************************************** void delayms(uint x) //约1ms延时 { uint i,j; for(i = x; i > 0; i --) for(j = 114; j > 0; j --); } //********************************************************** //读状态 //********************************************************** //时序:RS=L, RW=H, E=H void readstate(void) { LCDDATA = 0xFF; do { EN = 0; RS = 0; RW = 1; EN = 1; }while (BUSY == 1); //读数据D7引脚状态 EN = 0; } //********************************************************** //写命令 //********************************************************** //时序:RS=L, RW=L, D0~D7=指令码,E=H, E=L. void write_com(uchar com) { readstate(); EN = 0; RS = 0; RW = 0; LCDDATA = com; EN = 1; EN = 0; } //********************************************************** //写数据 //********************************************************** //时序:RS=H, RW=L, D0~D7=数据,E=1, E=0. void write_data(uchar date) { readstate(); EN = 0; RS = 1; RW = 0; LCDDATA = date; EN = 1; EN = 0; } //********************************************************** //初始化1602液晶屏 //********************************************************** void displayLCD(uchar add, uchar *p) { write_com(add); while (*p != '\\0') //判断字符串结束标志\\0 { write_data(*p ++); } } void LCD_init(void) { delayms(15); //等待上电稳定 write_com(0x38); //功能设置:数据长度为8位, delayms(5); // 双行显示,5*7点阵字体 readstate(); //读状态 write_com(0x38); //功能设置:数据长度为8位, readstate(); // 双行显示,5*7点阵字体 write_com(0x08); //显示关闭:关闭显示 readstate(); write_com(0x01); //清除显示屏:清屏,光标归位 readstate(); write_com(0x06); //输入方式:文字不动,光标自动 readstate(); // 右移 write_com(0x0C); //显示开及光标:显示器开、 } #endif 因篇幅问题不能全部显示,请点此查看更多更全内容