?? 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 + -