⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 197.c

📁 这是本人完全调好的MAX197的程序
💻 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 + -