12864液晶显示电压电流

更新时间:2023-10-31 02:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

12864液晶显示电压电流 2010-06-23 09:12 转载自 elaineliyan 最终编辑 elaineliyan //电流还没有实现 #include #include #include #include

#define delay4us() {_nop_();_nop_();_nop_();_nop_();} #define uint unsigned int #define uchar unsigned char

//ADC0832的引脚

sbit CS =P3^4; //ADC0832 chip seclect sbit DIO =P1^1; //ADC0832 k in //ADC0832 k out

sbit CLK =P1^0; //ADC0832 clock signal sbit RS=P2^3; sbit RW=P2^4; sbit E=P2^5;

//sbit RES=P2^2; //sbit PSB=P2^0;

uint temp;

//uchar getdata; //获取ADC转换回来的值 uchar Display_Buffer[]=%uchar code IC_DAT[ ]={\电压值:%uchar code IC_DAT1[]={\电流值:%uchar Display_Buffer1[]=\

void Delayms(uint ms) {

uchar t;

while(ms--) for (t=0;t<120;t++); }

// LCD忙状态检测 bit LCD_Busy_Check() {

bit result;

RS=0;RW=1;E=1;delay4us();result=(bit)(P0&0x80);E=0; return result; }

//写LCD命令

void LCD_Write_Command(uchar cmd) {

while(LCD_Busy_Check()); //判断是否忙

RS=0;RW=0;E=0;_nop_();_nop_();P0=cmd;delay4us(); E=1;delay4us();E=0; }

//设置LCD显示位置

void Set_Disp_Pos(uchar pos) {

LCD_Write_Command(pos|0x80); }

//写LCD数据

void LCD_Write_Data(uchar dat) {

while(LCD_Busy_Check()); RS=1;RW=0;E=0; P0=dat;delay4us(); E=1;delay4us();E=0; }

// LCD初始化

void LCD_Initialise() {

LCD_Write_Command(0x30);Delayms(1); LCD_Write_Command(0x38);Delayms(1); LCD_Write_Command(0x0c);Delayms(1); LCD_Write_Command(0x06);Delayms(1); LCD_Write_Command(0x01);Delayms(1); }

void lcd_mesg(unsigned char code *addr1,unsigned int m,unsigned int n) //显示汉字函数,8*4=32 {

unsigned char i;

//LCD_Write_Command(0x80); Delayms(1);

for(i=m;i

LCD_Write_Data(*addr1); addr1++; }

}

// 获得AD转换结果 uchar Get_AD_Result() {

uchar i,dat1=0,dat2=0; //起始控制位 CS=0; CLK=0;

DIO=1;_nop_();_nop_(); CLK=1;_nop_();_nop_();

// 第一个下降沿之前,设DI=1/0

//选择单端/差分模式中的单端输入模式 CLK=0;DIO=1;_nop_();_nop_(); CLK=1; _nop_();_nop_();

// 第二个下降沿之前,设DI=0/1,选择CH0/CH1 CLK=0;DIO=0;_nop_();_nop_(); CLK=1;DIO=1;_nop_();_nop_(); //第三个下降沿之前,设DI=1; CLK=0;DIO=1;_nop_();_nop_();

//第4-11,共八个下降沿读数据(MSB->LSB) for(i=0;i<8;i++) {

CLK=1;_nop_();_nop_(); CLK=0;_nop_();_nop_(); dat1=dat1<<1|DIO; }

//第11-18共八个下降沿读取数据LSB->MSB for(i=0;i<8;i++) {

dat2=dat2|((uchar)(DIO)<

// 如果MSB->LSB和LSB->MSB读取结果相同,则返回读取的结果,否则返回0 return(dat1==dat2)?dat1:0; }

void main(void) { uchar i;

LCD_Initialise(); while(1)

{//getdata=Get_AD_Result;

//电压值转换,5V做为参考电压,分成256份。 //temp=getdata*50.0/255;

temp=Get_AD_Result()*500.0/255;

Display_Buffer[0]=temp/100+'0'; //个位 Display_Buffer[2]=temp/10+'0'; //十位 Display_Buffer[3]=temp+'0'; //百位 Set_Disp_Pos(0x00); lcd_mesg(IC_DAT,0,8); Set_Disp_Pos(0x04); i=0;

while(Display_Buffer[i]!='\\0')

LCD_Write_Data( Display_Buffer[i++]); Set_Disp_Pos(0x50); lcd_mesg(IC_DAT1,9,16); Set_Disp_Pos(0x54); i=0;

while(Display_Buffer1[i]!='\\0')

LCD_Write_Data( Display_Buffer1[i++]); Delayms(250); Delayms(250); } }

本文来源:https://www.bwwdw.com/article/mmh2.html

Top