📄 197.c
字号:
/**************************************************
引脚连接
/CS->P2.7;HBEN->P1.3;/SHDN->P1.2;/INT->P3.0;
/**************************************************/
#include <reg51.h>
#include <absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CS=P2^7;
sbit HBEN=P2^6;
sbit INT=P3^2;
sbit LCM_RS=P2^0;
sbit LCM_RW=P2^1;
sbit LCM_EN=P2^2;
#define BUSY 0x80 //常量定义
#define DATAPORT P0
#define ADC XBYTE[0x7fff]
uchar DATAH;
uchar DATAL;
long int DATA;
uchar volt[4]={0};
uchar code str0[]={"**VOLT: . V***"};
uchar code str1[]={"***WANG CHENG***"};
void lcd_wait(void);
/****************************************
延时K*1ms,12.000mhz
*****************************************/
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<60;j++)
{;}
}
}
/*********************************************
写指令到ICM子函数
*********************************************/
void WriteCommandLCM(uchar WCLCM,uchar BusyC)
{
if(BusyC)lcd_wait();
DATAPORT=WCLCM;
LCM_RS=0; // 选中指令寄存器
LCM_RW=0; // 写模式
LCM_EN=1;
_nop_();
_nop_();
_nop_();
LCM_EN=0;
}
/*******************************************
写数据到LCM子函数
********************************************/
void WriteDataLCM(uchar WDLCM)
{
lcd_wait( ); //检测忙信号
DATAPORT=WDLCM;
LCM_RS=1; // 选中数据寄存器
LCM_RW=0; // 写模式
LCM_EN=1;
_nop_();
_nop_();
_nop_();
LCM_EN=0;
}
/*******************************************
lcm内部等待函数
*******************************************/
void lcd_wait(void)
{
DATAPORT=0xff; //读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色
LCM_EN=1;
LCM_RS=0;
LCM_RW=1;
_nop_();
_nop_();
_nop_();
while(DATAPORT&BUSY);
/* { LCM_EN=0;
_nop_();
_nop_();
LCM_EN=1;
_nop_();
_nop_();
}*/
LCM_EN=0;
}
/******************************************
LCM初始化子函数
******************************************/
void initLCM( )
{
DATAPORT=0;
delay(15);
WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
delay(5);
WriteCommandLCM(0x38,0);
delay(5);
WriteCommandLCM(0x38,0);
delay(5);
WriteCommandLCM(0x38,1); //8bit数据传送,2行显示,5*7字型,检测忙信号
WriteCommandLCM(0x08,1); //关闭显示,检测忙信号
WriteCommandLCM(0x01,1); //清屏,检测忙信号
WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号
WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
}
/********************************************
显示指定坐标的一个字符子函数
********************************************/
void DisplayOneChar(uchar X,uchar Y,uchar DData)
{
Y&=1;
X&=15;
if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40
X|=0x80; //指令码为地址码+0X80
WriteCommandLCM(X,0);
WriteDataLCM(DData);
}
/************************************************
显示指定坐标的一串字符子函数
**************************************************/
void DisplayListChar(uchar X,uchar Y,uchar code *DData)
{
uchar ListLength=0;
Y&=0x01;
X&=0x0f;
while(X<16)
{
DisplayOneChar(X,Y,DData[ListLength]);
ListLength++;
X++;
}
}
/***************************************************
ADC data collection funcation
****************************************************/
void data_collection(void)
{
ADC=0x40;
while(INT!=0);
HBEN=0;
DATAL=ADC;
HBEN=1;
DATAH=ADC;
HBEN=0;
// led=!led;
}
/**************************************************
data pro funcation
**************************************************/
void data_pro(void)
{
DATA=DATAH*256+DATAL;
DATA=((DATA*50*5000)/41/4117);
volt[0]=(DATA/1000)&0x0f;
volt[1]=(DATA/100%10)&0x0f;
volt[2]=(DATA%100/10)&0x0f;
volt[3]=(DATA%10)&0x0f;
}
/************************************************
display funcation
************************************************/
void display(void)
{
WriteCommandLCM(0x01,1); //清显示屏
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
DisplayOneChar(7,0,volt[0]+0x30);
DisplayOneChar(9,0,volt[1]+0x30);
DisplayOneChar(10,0,volt[2]+0x30);
DisplayOneChar(11,0,volt[3]+0x30);
}
/*************************************************
main funcation
**************************************************/
void main(void)
{
HBEN=0;
delay(500);
initLCM();
WriteCommandLCM(0x01,1); //清显示屏
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
while(1)
{
_nop_(); _nop_(); _nop_();
data_collection();
_nop_(); _nop_(); _nop_();
data_pro();
_nop_(); _nop_(); _nop_();
display();
_nop_(); _nop_(); _nop_();
delay(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -