📄 pc1490.c
字号:
/********************************************************************/
/* */
/* 防盗报警器系统测试程序 - ADS1110电压表测试多路电压 */
/* */
/* LCD1602显示 */
/* 参考电压接至5V电源 */
/* 最小输出电压:0.00V 最大输出电压:5.00V 分辨率:0.002V */
/* */
/* 邮箱: wanping@fasttest.cn */
/* 网站: http://www.fasttest.cn */
/* 作者: owen wan */
/* 时间: 2007/02/13 */
/* */
/* */
/*【版权】Copyright(C)捷测电子 www.fasttest.cn All Rights Reserved */
/*【声明】此程序属捷测电子版权所有,不得用于商业目的确良 ! */
/* */
/********************************************************************/
#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
#define PON 0xf7
#define FREN 0xef
#define ACTDC 0xdf
#define FRE12 0xbf
#define SIN12 0x7f
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[5]={0x00,0x00,0x00,0x00,0x00}; //定义3个显示数据单元和一个数据存储单元
float idata Limit[30]={1358,1442,1240,1411,1240,1411,180,250,485,515,285,350,285,350,340,360,340,360,320,360,380,420,480,515,450,485,0,50,0,485};
// {1358,1442,1329,1411,1329,1411,1358,1442,485,515,339,360,339,360,456,484,456,484,485,515,485,515,485,515,456,484,0,50,0,50};
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;
float idata temp;
ulong idata temp1;
uchar idata T1flow;
uchar idata Fre_Hi;
uchar idata Fre_Lo;
uchar idata Fre_Cu;
ulong idata Fre_val;
uchar idata Tcom;
uchar idata Tcom1;
uchar idata Tcom2;
//******************************************************************************
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标志
bit IC41;
bit IC42;
bit IC43;
bit IC44;
bit IC45;
bit IC46;
bit TR271;
bit TR272;
bit TR331;
bit TR332;
bit TR221;
bit TR222;
bit TR201;
bit TR202;
bit TR361;
bit TR362;
bit TR81;
bit TR82;
bit IC211;
bit IC212;
bit IC213;
bit IC214;
bit IC152;
bit IC151;
bit IC161;
bit IC162;
bit IC141;
bit IC142;
bit IC131;
bit IC132;
bit IC121;
bit IC122;
bit IC111;
bit IC112;
bit IC113;
bit IC114;
bit IC81;
bit IC82;
/******************************************************************************/
uchar code dis0[] = {"Model:PC1490 "};
uchar code dis1[] = {"Press Start Botn"};
uchar code dis2[] = {"T293 14V: . V"};
uchar code dis_2[] = {"LO:13.58HI:14.42"};
uchar code dis3[] = {"T7 13.7V: . V"};
uchar code dis_3[] = {"LO:12.40HI:14.11"};
uchar code dis4[] = {"T307 +14V: . V"};
uchar code dis_4[] = {"LO:12.40HI:14.11"};
uchar code dis5[] = {"T152 +2V: . V"};
uchar code dis_5[] = {"LO:1.8 HI:2.5 "};
uchar code dis6[] = {"T283 +5V: . V"};
uchar code dis_6[] = {"LO:4.85 HI:5.15 "};
uchar code dis7[] = {"T102 3.5V: . V"};
uchar code dis_7[] = {"LO:3.39 HI:3.60 "};
uchar code dis8[] = {"T174 3.5V: . V"};
uchar code dis_8[] = {"LO:3.39 HI:3.60 "};
uchar code dis9[] = {"T193 4.6V: . V"};
uchar code dis_9[] = {"LO:4.56 HI:4.84 "};
uchar code dis10[] = {"T194 4.6V: . V"};
uchar code dis_10[] = {"LO:4.56 HI:4.84 "};
uchar code dis11[] = {"T98 5.0V: . V"};
uchar code dis_11[] = {"LO:4.85 HI:5.15 "};
uchar code dis12[] = {"T290 5.0V: . V"};
uchar code dis_12[] = {"LO:4.85 HI:5.15 "};
uchar code dis13[] = {"T151 5.0V: . V"};
uchar code dis_13[] = {"LO:4.85 HI:5.15 "};
uchar code dis14[] = {"T95 4.6V: . V"};
uchar code dis_14[] = {"LO:4.56 HI:4.84 "};
uchar code dis15[] = {"T204 0.0V: . V"};
uchar code dis_15[] = {"LO:0.0 HI:0.5 "};
uchar code dis16[] = {"T198 5.0V: . V"};
uchar code dis_16[] = {"LO:4.85 HI:5.15" };
uchar code dis17[] = {"CRY2: . MHz"};
uchar code dis_17[] = {"LO:3.98 HI:4.05 "};
uchar code dis18[]= {"IC1 Test "};
uchar code dis19[]= {"IC5 Test "};
uchar code dis20[]= {"IC7 Test "};
uchar code dis21[]= {"IC8 Test "};
uchar code dis22[]= {"IC4 Test "};
uchar code dis23[]= {"IC11 Test "};
uchar code dis24[]= {"IC12 Test "};
uchar code dis25[]= {"IC13 Test "};
uchar code dis26[]= {"IC14 Test "};
uchar code dis27[]= {"IC16 Test "};
uchar code dis28[]= {"IC15 Test "};
uchar code dis29[]= {"IC21 Test "};
uchar code dis30[]= {"TR8 Test "};
uchar code dis31[]= {"TR36 Test "};
uchar code dis32[]= {"TR20 Test "};
uchar code dis33[]= {"TR22 Test "};
uchar code dis34[]= {"TR27 Test "};
uchar code dis35[]= {"TR33 Test "};
uchar code dis36[]= {"TR34 Test "};
uchar code dis37[]= {"TR35 Test "};
uchar code dis46[] = {"Test Pass! "};
uchar code dis47[] = {"Test Failed! "};
/********************************************************************/
/* */
/* 延时函数 */
/* */
/********************************************************************/
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忙状态 */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
/* */
/********************************************************************/
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;
}
/********************************************************************/
/* */
/*写指令数据到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;
}
/********************************************************************/
/* */
/*写显示数据到LCD */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
/* */
/********************************************************************/
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初始化设定 */
/* */
/********************************************************************/
void lcd_init()
{
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
lcd_delay(5);
lcd_wcmd(0x38);
lcd_delay(5);
lcd_wcmd(0x38);
lcd_delay(5);
lcd_wcmd(0x0c); //显示开,关光标
lcd_delay(5);
lcd_wcmd(0x06); //移动光标
lcd_delay(5);
lcd_wcmd(0x01); //清除LCD的显示内容
lcd_delay(5);
}
/********************************************************************/
/* */
/* 设定显示位置 */
/* */
/********************************************************************/
void lcd_pos(uchar pos)
{
lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
}
/********************************************************************/
/* */
/* 启动ADC转换值显示 */
/* */
/********************************************************************/
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]); //整数位显示
lcd_pos(0x4d);
lcd_wdat(dis[1]); //第一位小数显示
lcd_pos(0x4e);
lcd_wdat(dis[0]); //第二位小数显示
}
show_value1(ulong freq)
{ dis[4]=freq/10000;
dis[4]=dis[4]+0x30;
dis[3]=(freq%10000)/1000;
dis[3]=dis[3]+0x30;
dis[2]=((freq%10000)%1000)/100;
dis[2]=dis[2]+0x30;
dis[1]=(((freq%10000)%1000)%100)/10;
dis[1]=dis[1]+0x30;
dis[0]=((((freq%10000)%1000)%100)%10)/1;
dis[0]=dis[0]+0x30;
lcd_pos(0x47);
lcd_wdat(dis[4]);
lcd_pos(0x49);
lcd_wdat(dis[3]);
lcd_pos(0x4a);
lcd_wdat(dis[2]); //整数位显示
lcd_pos(0x4b);
lcd_wdat(dis[1]); //第一位小数显示
lcd_pos(0x4c);
lcd_wdat(dis[0]); //第二位小数显示
}
/**********************************************************************/
/* 功能:发送一帧消息,消息格式参见设计说明入口:len=正文信息长度 */
/* */
/**********************************************************************/
/*
void Send(uchar len)
{
uchar *p;
ES=0; //发送用查询方式,关闭串口中断
p=SendBuffer; //发送正文信息
do
{
SBUF=*p;
p++;
while(!TI);TI=0;
}while(--len);
ES=1; //恢复串口中断
}
*/
/*****************************************************************************/
void Init1_8255(void) /*8255 初始化 */
{
CS1_8255=0;
CS2_8255=1;
A0_8255=1;
A1_8255=1;
_nop_ ();
COM8255 = 0x89; // 设置1A口输出,1B口输出,1C口输入!
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
}
void Init2_8255(void) /*8255 初始化 */
{
CS1_8255=1;
CS2_8255=0;
A0_8255=1;
A1_8255=1;
_nop_ ();
COM8255 = 0x89; // 设置2A口输出,2B口输出,2C口输入!
_nop_ ();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -