12864液晶显示问题
来源:互联网 发布:mysql中的约束 编辑:程序博客网 时间:2024/05/16 08:15
最近在使用12864液晶,可以显示汉字了,但是AD转换显示不正确,不知道它怎么样可以实时显示正确的电压值
问题是,我的AD转换用数码管可以显示,用1602也可以显示,但是12864,不太清楚怎么使用才会实时显示.
#include <reg51.h>
#include <intrins.h>
#include<math.h>
#include<string.h>
#define uint unsigned int
#define uchar unsigned char
//ADC0832的引脚
sbit ADCS =P3^4; //ADC0832 chip seclect
sbit ADDI =P1^1; //ADC0832 k in
sbit ADDO =P1^1; //ADC0832 k out
sbit ADCLK =P1^0; //ADC0832 clock signal
sbit RS=P2^3;
sbit WRD=P2^4;
sbit E=P2^5;
sbit RES=P2^2;
sbit PSB=P2^0;
uint temp;
uchar getdata; //获取ADC转换回来的值
uchar Display_Buffer[]="0.00V" ;
uchar code IC_DAT[ ]={
"液晶显示电压值 "
};
void delayms(unsigned int n) //延时子程序
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<2000;j++);
}
void delay(unsigned int m)
{
unsigned int i,j;
for(i=0;i<m;i++)
for(j=0;j<10;j++);
}
//采集并返回
unsigned int Adc0832(unsigned char channel) //AD转换,返回结果
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI=1;
_nop_();
_nop_();
ADCS=0;//拉低CS端
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=channel&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=(channel>>1)&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令结束
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO;//收数据
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_();
_nop_();
dat<<=1;
if(i==7)dat|=ADDO;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO;//收数据
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_();
_nop_();
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
ADCS=1;//拉低CS端
ADCLK=0;//拉低CLK端
ADDO=1;//拉高数据端,回到初始状态
dat<<=8;
dat|=ndat;
return(dat); //return ad k
}
void TransferData(char data1,bit DI) //传送数据或是命令,当DI=0时,传送命令,当DI=1时,传送数据
{
WRD=0;
RS=DI;
delay(1);
P0=data1;
E=1;
delay(1);
E=0;
}
void lcd_mesg(unsigned char code *addr1) //显示汉字函数,8*4=32
{
unsigned char i;
TransferData(0x80,0);
delay(100);
for(i=0;i<32;i++)
{
TransferData(*addr1,1);
addr1++;
}
TransferData(0x90,0);
delay(100);
for(i=32;i<64;i++)
{
TransferData(*addr1,1);
addr1++;
}
}
void initinal(void) //初始化,12864有要求的要写上
{
delay(40);
PSB=1; //并口工作模式
delay(1);
RES=0; //复位
delay(1);
RES=1; //复位置高
delay(10);
TransferData(0x30,0);
delay(100);
TransferData(0x30,0);
delay(37);
TransferData(0x08,0);
delay(100);
TransferData(0x10,0);
delay(100);
TransferData(0x0C,0);
delay(100);
TransferData(0x01,0);
delay(10);
TransferData(0x06,0);
delay(100);
}
/************
读ADC0832函数
************/
void main(void)
{ uchar i;
//while(1)
{ initinal();
getdata=Adc0832(0);
//电压值转换,5V做为参考电压,分成256份。
temp=getdata*50.0/255;
Display_Buffer[0]=temp%10; //个位
Display_Buffer[2]=temp/10%10; //十位
Display_Buffer[1]=temp/100; //百位
lcd_mesg(IC_DAT);
delayms(250);
delayms(250);
i=0;
while(Display_Buffer[i]!='/0')
TransferData( Display_Buffer[i++],1);
//lcd_(Display_Buffer[i++]);
delayms(250);
delayms(250);
}
}
- 12864液晶显示问题
- ARM7---12864---液晶显示驱动
- 【C】12864点阵液晶显示
- 12864液晶显示实验
- ACM-12864汉字液晶显示驱动程序
- 测透51汇编 12864液晶显示 每条指令都验证过 都没有问题
- TFT液晶显示常见的问题总结
- 使用ks0108的12864液晶显示的俄罗斯方块
- 12864点阵液晶显示模块的原理
- stc89c52+12864带中文字库液晶显示中文
- 12864无字库液晶显示(一)
- stc89c52+12864带中文字库液晶显示中文
- ATMEGA128+ADS1110+12864液晶显示程序和电路图
- MSP430学习笔记8-ST7920 12864液晶显示并行接口
- 单片机+DS18B20+12864液晶显示温度及温度变化的波形
- 第二讲 单片机C语言之12864液晶显示
- 第三讲 单片机C语言之12864液晶显示
- Verilog液晶显示
- Linux下安装OpenSSL练手文档
- _beginthreadex 实践小结
- 将一个datatable序列化和压缩
- ASP.NET服务器控件使用之GridView
- 软件测试框架——自动化测试框架(专题)
- 12864液晶显示问题
- 不能一辈子打工,程序员未来出路在哪里?
- Spring事务配置的五种方式(一)
- C++类的默认成员函数
- 终于用boost的正则库写完了一个文本转换
- 第一次安装DB2的经验教训
- diff 工具 以及 arm-linux-eabi arm-none-eabi 的区别
- vxWorks 错误代码表(3014657-8913450/0x2e0001-0x88022a)
- 汉字占用的大小