本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
我送别的数据显示了下,液晶显示正常,我测量了下ad也正常工作,硬件连接没有错误,我找不出程序哪儿错了,希望高手帮我看下,谢谢!
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar data LCD_Buf[4]; //LCD缓冲区
uchar code ucDigitCode[16]={0x82,0xee,0x43,0x4a,0x2e,0x1a,0x12,0xce,0x02,0x0a}; //0,1,2,3,4,5,6,7,8,9
sbit DI=P1^5; //lcd DI数据引脚
sbit CLK=P1^6; //lcd CLK时钟引脚
sbit startflag=P2^4; // 开始按钮
sbit cs=P3^1; //芯片选择信号,控制芯片的启动和结果读取,低电平有效
sbit rd=P3^6; //读数据控制,低电平有效
sbit wr=P3^7; //AD转换起动控制,上升沿有效
sbit intr=P1^0; //AD转换结束输出低电平
sbit relay=P1^4; //继电器启动信号,高电平有效
void lcdwbit(bit n);
void lcdwd(uchar data1);
void LCDdisplay();
void FillLCDBuffer();
uint readad(void);
uint ad, addata;
unsigned char GetDigitCode(uchar n)
{
if(n>15) n=11;
return ucDigitCode[n];
}
void lcdwbit(bit n)
{
DI = n;
CLK = 1;
CLK = 0;
CLK = 1;
}
void lcdwd(uchar data1)
{
uchar i;
for(i=0;i<8;i++)
{
if((data1&0x80)==0x80) lcdwbit(1);
else lcdwbit(0);
data1<<=1;
}
}
void LCDdisplay()
{
uchar i;
for(i=0;i<4;i++) lcdwd(LCD_Buf[i]);
}
void FillLCDBuffer()
{
uint ivalue;
ivalue=ad;
LCD_Buf[0]=GetDigitCode(ivalue/1000);
LCD_Buf[1]=GetDigitCode((ivalue%1000)/100);
LCD_Buf[2]=GetDigitCode((ivalue%100)/10);
LCD_Buf[3]=GetDigitCode(ivalue%10);
}
uint readad(void)
{
wr=1; //当wr由0→1且cs=0时,AD开始转换号,此时intr设定为高。
rd=1;//当cs 、rd皆为低位时,AD将转换后的数字信号经由DB7 ~ DB0 输出至P0口。
intr=1; //中断请求。转换期间为高,转换完毕时intr会自动变低告知其它的处理单元已转换完成,可读取数字数据
P0=0; //将P0初始化为零
cs=0;
_nop_(); //空操作
wr=0;
wr=1; //WR由低变高时,AD开始转换由低变高时,AD开始转换
while(intr==1); //查询转换结束产生INTR 信号(低电平有效)
rd=0; //读取转换数据结果
_nop_(); //空操作
addata=P0;
rd=1;
cs=1; //读数完毕
return(addata);
}
void main()
{
relay=0;
startflag=1;
while(1)
{
if(startflag==0)
{
relay=1;
readad(); //读取AD
ad=readad();
FillLCDBuffer(); //送显示数据
LCDdisplay(); //液晶显示数据
}
}
} |