📄 max197.c
字号:
#include "reg52.h"
#include " ABSACC.h"
#define uchar unsigned char
#define uint unsigned int
#define refvcc 2.5 // 定位基准电压
#define manpian 4096 //
#define max197_data P0
#define adch0 XBYTE[0x0200]
uchar max197_low8 , /* 地8位 */ max197_high4 ,/* 高四位*/ channel , /* 通道*/ i , display_data[] ;
float vi , ad_data ;
int Number ; //= 0xfff ;
//sbit max197_cs = P2^5 ; //片选择
sbit max197_hben = P2^7 ; // 地8位和高四位的选择信号
sbit max197_int = P2^6 ; // 数据转换完成中段信号, 使用的int0.
//sbit max197_wr = P3^6 ; //max197读信号
//sbit max197_rd = P3^7 ; // max197写信号
unsigned char Status , Data ,Command , i ;
unsigned char code max197 [] = "MAX197AD转换 " ;
unsigned char code shuru [] = "输入电压: V";
#define LCD_Data P1
sbit LCD_RS =P3^2;
sbit LCD_E =P3^0;
sbit LCD_WR =P3^1;
LCDBusyWait() //等待LCD就绪
{
unsigned char Status;
LCD_RS=0;
LCD_WR=1;
LCD_Data=0xFF;
LCD_E=1;
Status=LCD_Data;
LCD_E=0;
while(Status & 0x80)
{
LCD_E=1;
Status=LCD_Data;
LCD_E=0;
}
LCD_WR=0;
return Status;
}
WriteLCD_Data( unsigned char Data ) //向LCD写入一个字节的数据
{
LCDBusyWait();
LCD_RS=1;
LCD_Data = Data;
LCD_E=1;
LCD_E=0;
}
WriteLCD_Command( unsigned char Command ) //向LCD写入一个字节的命令
{
LCDBusyWait();
LCD_RS=0;
LCD_Data=Command;
LCD_E=1;
LCD_E=0;
}
lcd_init ()
{
unsigned int i;
WriteLCD_Command(0x01); //清屏
for(i=0;i<2000;i++);
WriteLCD_Command(0x30); //功能设置8位界面,
for(i=0;i<2000;i++);
WriteLCD_Command(0x0C); //显示开,光、光标关,反白显示
for(i=0;i<2000;i++);
WriteLCD_Command(0x06); //DDRAM地址自加
for(i=0;i<2000;i++);
WriteLCD_Command(0x81) ;
for(i=0;i<2000;i++);
}
lcd_init_display ( )
{
i = 0 ;
while ( max197 [i] != '\0')
{
Data = max197 [i] ;
WriteLCD_Data(Data) ;
i++ ;
}
WriteLCD_Command(0x88);
i = 0 ;
while ( shuru [i] != '\0')
{
Data = shuru [i] ;
WriteLCD_Data(Data) ;
i++ ;
}
}
max197_data_lcddisplay () // 在lcd上面显示模拟电压的值.
{
WriteLCD_Command(0x8d);
vi = (ad_data / 4096.0 ) * refvcc ;
Number = vi *1000 ;
if ( Number >=10000 )
{
WriteLCD_Data((Number /10000 ) + 0x30); //取出10位数字
WriteLCD_Data((Number % 10000 / 1000) + 0x30); //取出个位数字
WriteLCD_Data(0x2e);
WriteLCD_Data(Number % 1000 / 100 + 0x30); //取出.0位数字
WriteLCD_Data(Number % 100/ 10 + 0x30); //取出.00位
WriteLCD_Data(Number % 10 + 0x30); //取出.000位数
}
if ( Number < 10000 )
{
WriteLCD_Data((Number /1000) + 0x30);
WriteLCD_Data(0x2e);
WriteLCD_Data((Number % 1000 / 100) + 0x30); //取出.0位数字
WriteLCD_Data(Number % 100 / 10 + 0x30); //取出.00位数字
WriteLCD_Data(Number % 10 + 0x30); ////取出.000位数字
}
}
void intsvr ( void ) interrupt 1
{
//EX1 = 0 ;
TR0 = 0;
adch0 = 0x40 ;
while ( max197_int !=0 )
{
max197_hben = 0 ;
}
max197_low8 = adch0 ;
max197_hben = 1 ;
max197_high4 = adch0 ;
ad_data = max197_high4;
ad_data = ad_data * 255 ;
ad_data = ad_data+ max197_low8 ;//将高四位的数据前移8位在加上低位的数据.
// ad_data = 0xff ;
max197_hben = 1 ;
// EX1 = 1 ;
TH0 = 0xff ;
TL0 = 0xde ;
TR0 = 1 ;
}
main ()
{
uchar i , j ;
lcd_init () ;
lcd_init_display ( ) ;
TMOD = 0x01 ;
TH0 = 0xff ;
TL0 = 0xde ;
ET0 = 1 ;
TR0 = 1 ;
EA = 1 ;
//EX1 = 1 ; // 打开外部中
// max197_int = 1 ;
// ad_data = 0xff ;
// max197_data_lcddisplay () ;
while (1) // 等待外部中断。
{
max197_data_lcddisplay () ;
// for ( i = 0 ; i <255 ; i++ )
// for ( j = 0 ; j <255 ; j++) ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -