?? powervolt.c
字號:
/********************************************************************/
/* */
/* 防盜報警器系統(tǒng)測試程序 - ADS1110電壓表測試多路電壓 */
/* */
/* LCD1602顯示 */
/* 參考電壓接至5V電源 */
/* 最小輸出電壓:0.00V 最大輸出電壓:5.00V 分辨率:0.002V */
/* */
/* 郵箱: wanping@fasttest.cn */
/* 網(wǎng)站: http://www.fasttest.cn */
/* 作者: owen wan */
/* 時間: 2007/02/13 */
/* */
/* */
/*【版權(quán)】Copyright(C)捷測電子 www.fasttest.cn All Rights Reserved */
/*【聲明】此程序?qū)俳轀y電子版權(quán)所有,不得用于商業(yè)目的確良 ! */
/* */
/********************************************************************/
#include <At89x52.h>
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long int
#define PA8255 XBYTE[0X8000]
#define PB8255 XBYTE[0X8001]
#define PC8255 XBYTE[0X8002]
#define COM8255 XBYTE[0X8003]
#define LCDON 0xfe
#define FAIL 0xfd
#define PASS 0xfb
sbit LCD_RS = P1^0;
sbit LCD_RW = P1^1;
sbit LCD_EN = P1^2;
sbit SCL = P1^3;
sbit SDA = P1^4;
sbit Latch = P1^5;
sbit CS1_8255= P1^6;
sbit CS2_8255= P1^7;
sbit A0_8255 = P3^2;
sbit A1_8255 = P3^3;
sbit Start = P3^4;
sbit CS_373 = P3^5;
uint idata dis[4]={0x00,0x00,0x00,0x00}; //定義3個顯示數(shù)據(jù)單元和一個數(shù)據(jù)存儲單元
float idata Limit[16]={494,546,1140,1260,1010,2016,1710,2016,2280,2520,2280,2520,1100,1320,600,1500};
//ulong idata Limit[14]={4940,5460,1140,1260,1710,1890,1650,1830,2280,2520,2280,2520,1180,1300};
uchar ReceiveBuffer[16];//={0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
uchar SendBuffer[12];
uchar w,q,b,s,g;
uchar ACK;
uchar idata adc_hi;
uchar idata adc_lo;
uchar idata adc_cfg;
//******************************************************************************
volatile uchar MsgOk=0x00;
volatile uchar Rs232State=0x00;
volatile uchar Rs232Timer=0; //單位:100ms
volatile uchar Timer1s=0;
volatile uchar Timer100ms=0;
volatile uchar Timer2500us=0;
bit w25msf; //2.5ms標志
bit w100msf;//100ms標志
bit w1sf; //1s標志
/******************************************************************************/
uchar code dis0[] = {"Model:PLCD300-P1"};
uchar code dis1[] = {"Press Start Botn"};
uchar code dis2[] = {"SL120 +5V: . V"};
uchar code dis3[] = {"SL120 12V: . V"};
uchar code dis4[] = {"SL12 +18V: . V"};
uchar code dis5[] = {"SL12 -18V: . V"};
uchar code dis6[] = {"SL12 24Va: . V"};
uchar code dis7[] = {"SL12 24Vb: . V"};
uchar code dis8[] = {"SL120 Vbt: . V"};
uchar code dis9[] = {"LL120 +5V: . V"};
uchar code dis10[] = {"LL120 12V: . V"};
uchar code dis11[] = {"LL12 +18V: . V"};
uchar code dis12[] = {"LL12 -18V: . V"};
uchar code dis13[] = {"LL12 24Va: . V"};
uchar code dis14[] = {"LL12 24Vb: . V"};
uchar code dis15[] = {"LL120 Vbt: . V"};
uchar code dis16[] = {"ML24V +5V: . V"};
uchar code dis17[] = {"ML24V 12V: . V"};
uchar code dis18[] = {"ML24 +18V: . V"};
uchar code dis19[] = {"ML24 -18V: . V"};
uchar code dis20[] = {"ML24 24Va: . V"};
uchar code dis21[] = {"ML24 24Vb: . V"};
uchar code dis22[] = {"ML24V Vbt: . V"};
uchar code dis23[] = {"ML120 +5V: . V"};
uchar code dis24[] = {"ML120 12V: . V"};
uchar code dis25[] = {"ML12 +18V: . V"};
uchar code dis26[] = {"ML12 -18V: . V"};
uchar code dis27[] = {"ML12 24Va: . V"};
uchar code dis28[] = {"ML12 24Vb: . V"};
uchar code dis29[] = {"ML120 Vbt: . V"};
uchar code dis30[] = {"SL230 +5V: . V"};
uchar code dis31[] = {"SL230 12V: . V"};
uchar code dis32[] = {"SL23 +18V: . V"};
uchar code dis33[] = {"SL23 -18V: . V"};
uchar code dis34[] = {"SL23 24Va: . V"};
uchar code dis35[] = {"SL23 24Vb: . V"};
uchar code dis36[] = {"SL230 Vbt: . V"};
uchar code dis37[] = {"NL230 +5V: . V"};
uchar code dis38[] = {"NL230 12V: . V"};
uchar code dis39[] = {"NL23 +18V: . V"};
uchar code dis40[] = {"NL23 -18V: . V"};
uchar code dis41[] = {"NL23 24Va: . V"};
uchar code dis42[] = {"NL23 24Vb: . V"};
uchar code dis43[] = {"NL230 Vbt: . V"};
uchar code dis44[] = {"Power Wat: . W"};
uchar code dis46[] = {"Test Pass! "};
uchar code dis47[] = {"Test Failed! "};
uchar code dis48[] = {"Comm No Respond!"};
uchar code dis49[] = {"->> ->> ->> ->> "};
/********************************************************************/
/* */
/* 延時函數(shù) */
/* */
/********************************************************************/
void delay(uchar i)
{
uchar k=20;
while(i--)
{
while(k--);
}
}
/********************************************************************/
void lcd_delay(uchar ms)
{
while(ms--)
{
uchar i;
for(i=0;i<250;i++) //延時 4us x 250 = 1ms /
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/********************************************************************/
/* */
/*檢查LCD忙狀態(tài) */
/*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數(shù)據(jù)。 */
/* */
/********************************************************************/
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (bit)(P2&0x80);
LCD_EN = 0;
return result;
}
/********************************************************************/
/* */
/*寫指令數(shù)據(jù)到LCD */
/*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */
/* */
/********************************************************************/
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P2 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN = 0;
}
/********************************************************************/
/* */
/*寫顯示數(shù)據(jù)到LCD */
/*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 */
/* */
/********************************************************************/
void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P2 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN = 0;
}
/********************************************************************/
/* */
/* LCD初始化設(shè)定 */
/* */
/********************************************************************/
void lcd_init()
{
lcd_wcmd(0x38); //16*2顯示,5*7點陣,8位數(shù)據(jù)
lcd_delay(5);
lcd_wcmd(0x38);
lcd_delay(5);
lcd_wcmd(0x38);
lcd_delay(5);
lcd_wcmd(0x0c); //顯示開,關(guān)光標
lcd_delay(5);
lcd_wcmd(0x06); //移動光標
lcd_delay(5);
lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容
lcd_delay(5);
}
/********************************************************************/
/* */
/* 設(shè)定顯示位置 */
/* */
/********************************************************************/
void lcd_pos(uchar pos)
{
lcd_wcmd(pos | 0x80); //數(shù)據(jù)指針=80+地址變量
}
/********************************************************************/
/* */
/* 啟動ADC轉(zhuǎn)換值顯示 */
/* */
/********************************************************************/
show_value(ulong ad_data)
{ dis[3]=ad_data/1000;
dis[3]=dis[3]+0x30;
dis[2]=(ad_data%1000)/100;
dis[2]=dis[2]+0x30;
dis[1]=((ad_data%1000)%100)/10;
dis[1]=dis[1]+0x30;
dis[0]=(((ad_data%1000)%100)%10)/1;
dis[0]=dis[0]+0x30;
lcd_pos(0x4a);
lcd_wdat(dis[3]);
lcd_pos(0x4b);
lcd_wdat(dis[2]); //整數(shù)位顯示
lcd_pos(0x4d);
lcd_wdat(dis[1]); //第一位小數(shù)顯示
lcd_pos(0x4e);
lcd_wdat(dis[0]); //第二位小數(shù)顯示
}
show_value1(uchar qb,bb,sb,gb)
{
dis[3]=qb;
// dis[3]=dis[3]+0x30;
dis[2]=bb;
// dis[2]=dis[2]+0x30;
dis[1]=sb;
// dis[1]=dis[1]+0x30;
dis[0]=gb;
// dis[0]=dis[0]+0x30;
lcd_pos(0x4a);
lcd_wdat(dis[3]);
lcd_pos(0x4b);
lcd_wdat(dis[2]); //整數(shù)位顯示
lcd_pos(0x4c);
lcd_wdat(dis[1]); //第一位小數(shù)顯示
lcd_pos(0x4e);
lcd_wdat(dis[0]); //第二位小數(shù)顯示
}
/**********************************************************************/
/* 功能:發(fā)送一幀消息,消息格式參見設(shè)計說明入口:len=正文信息長度 */
/* */
/**********************************************************************/
void Send(uchar len)
{
uchar *p;
ES=0; //發(fā)送用查詢方式,關(guān)閉串口中斷
p=SendBuffer; //發(fā)送正文信息
do
{
SBUF=*p;
p++;
while(!TI);TI=0;
}while(--len);
ES=1; //恢復(fù)串口中斷
}
/*****************************************************************************/
void Init1_8255(void) /*8255 初始化 */
{
CS1_8255=0;
CS2_8255=1;
A0_8255=1;
A1_8255=1;
_nop_ ();
_nop_ ();
_nop_ ();
COM8255 = 0x80; // 設(shè)置1A口輸出,1B口輸出,1C口輸入!
_nop_ ();
_nop_ ();
_nop_ ();
}
/***********************************************************************/
void Port1A8255_write(uchar OpA1)
{
A0_8255=0; //寫1A口;
A1_8255=0;
_nop_ ();
_nop_ ();
_nop_ ();
PA8255=OpA1;
}
void Port1B8255_write(uchar OpB1)
{
A0_8255=1; //寫1B口;
A1_8255=0;
_nop_ ();
_nop_ ();
_nop_ ();
PB8255=OpB1;
}
void Port1C8255_write(uchar OpC1)
{
A0_8255=0; //寫1B口;
A1_8255=1;
_nop_ ();
_nop_ ();
_nop_ ();
PC8255=OpC1;
}
/**************************************************************************/
/* */
/* TMP106read and write */
/**************************************************************************/
/***************************************************************************/
/* 函數(shù)原型: void ads_start (void) */
/* 功 能: 提供I2C總線工作時序中的起始位。 */
/***************************************************************************/
void ads_start (void) //在SCL高的情況下,SDA由高到低的變化造成START。
{
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
}
/**************************************************************************/
/* 函數(shù)原型: void ads_stop(void) */
/* 功 能: 提供I2C總線工作時序中的停止位。 */
/**************************************************************************/
void ads_stop(void) //在SCL高的情況下,SDA由低到高的變化造成STOP。
{
SDA=0;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=1;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -