#include"Reg52.H" /* 调用MCS51寄存器头文件 */
#include"intrins.H"
#include"stdio.H"
#define uchar unsigned char
#define uint unsigned int
#define DATA_PORT P0
#define SETB_X9C103_CS1 X_CS_1=1
#define CLRB_X9C103_CS1 X_CS_1=0
#define SETB_X9C103_INC X_INC=1
#define CLRB_X9C103_INC X_INC=0
#define SETB_X9C103_UD X_UD=1
#define CLRB_X9C103_UD X_UD=0
sbit ON_OFF=P2^6;
bit flag55=0;
//***********************X9C103引脚口************************************************
sbit CS_41010=P3^0;
sbit SCLK_41010=P3^1;
sbit SI_41010=P3^2;
//***********************X9C103引脚口***********************************************
//************************LCD12864引脚口************************************************
sbit LCD_RS = P2^3; /* 数据、指令选择信号 */
sbit LCD_RW = P2^4; /* 读写选择信号 */
sbit LCD_EN = P2^5; /* 读写使能信号 */
sbit LCD_PSB = P2^7; /* 串、并口选择 */
sbit LCD_RST = P2^1; /* 液晶复位输入端口 */
//************************LCD12864引脚口************************************************
//************************TLC2543引脚口************************************************
sbit TCL2543_CS = P3^7;
sbit TCL2543_DOUT = P3^6;
sbit TCL2543_ADIN = P3^5;
sbit TCL2543_CLK = P3^4;
sbit TCL2543_EOC = P3^3;
//************************TLC2543引脚口************************************************
//************************按键引脚口************************************************
sbit xuanze = P1^1; //选择键
sbit queding = P1^2; //确定键
sbit fanhui = P1^3; //返回键
sbit key1=P1^0;
/*sbit key2=P1^3;*/
//************************按键引脚口************************************************
//************************子函数定义************************************************
void xuanzekey(); //选择子函数··flag
void quedingkey(); //确定子函数··flag1
void fanhuikey(); //返回子函数··
void Delay(uint t) ;
//************************子函数定义************************************************
//************************界面显示************************************************
uchar code dis1[] = {"系 1:开机模式 "};
uchar code dis2[] = {"统 2:1:1 模式 "};
uchar code dis3[] = {"菜 3:1:2 模式 "};
uchar code dis4[] = {"单 4:自选模式 "};
//************************界面显示************************************************
//************************变量初始化************************************************
uchar count1=0;
uchar count2=1;
uchar count3=1;
uchar flag=0;
uchar flag1=0;
uchar i=0;
uchar a;
float ad11;
float ad22;
float ad33;
float ad44;
uchar flag_1s=0;
uchar num4=0;
//************************变量初始化************************************************
//************************LCD12864************************************************
void DelayUs( )
{
_nop_();
}
void DelayMs( uint Ms )
{
uchar i;
while (Ms--)
{
for ( i = 0; i < 114; i++ );
}
}
void LCD12864_WriteCommand(uchar cmd)//写指令数据到LCD :RS=L,RW=L,E=高脉冲,D0-D7=指令码
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
DATA_PORT = cmd;
DelayMs(1);
LCD_EN = 1;
DelayMs(1);
LCD_EN = 0;
}
void LCD12864_WriteData(uchar dat)//写显示数据到LCD :RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
{
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
DATA_PORT = dat;
DelayMs(1);
LCD_EN = 1;
DelayMs(1);
LCD_EN = 0;
}
void LCD12864_DisplayPosition( uchar X, uchar Y )
{
uchar Position; /* 显示地址 */
switch( X )
{
case(1):
{
X = 0x80;
break;
}
case( 2 ):
{
X = 0x90;
break;
}
case( 3 ):
{
X = 0x88;
break;
}
case ( 4 ):
{
X = 0x98;
break;
}
}
Position = X + Y; /* 确定显示地址 */
LCD12864_WriteCommand( Position ); /* 写显示地址 */
}
void LCD12864_WrString( uchar *Str )
{
while ( *Str != 0 ) /* 等待发送完毕 */
{
LCD12864_WriteData( *Str ); /* 写数据到LCD12864 */
Str++;
DelayMs( 0 ); /* 延时形成逐字显示效果 */
}
}
void LCD12864_Init()
{
LCD_PSB = 1; //并口方式
LCD12864_WriteCommand(0x30); //基本指令操作
DelayMs(2);
LCD12864_WriteCommand(0x0C); //显示开,关光标
DelayMs(2);
LCD12864_WriteCommand(0x01); //清除LCD的显示内容
DelayMs(2);
LCD12864_DisplayPosition( 2, 0 ); /* 设置显示位置为第三行 */
LCD12864_WrString("系统初始化. ");
DelayMs(500);
LCD12864_DisplayPosition( 2, 0 ); /* 设置显示位置为第三行 */
LCD12864_WrString("系统初始化.. ");
DelayMs(500);
LCD12864_DisplayPosition( 2, 0 ); /* 设置显示位置为第三行 */
LCD12864_WrString("系统初始化... ");
DelayMs(500);
LCD12864_DisplayPosition( 2, 0 ); /* 设置显示位置为第三行 */
LCD12864_WrString("按选择键开始! ");
}
void Delay(uint t)
{
uint i;
for(i=0;i<t;i++) ;
}
//************************LCD12864************************************************
//************************数字电位器X9C103************************************************
// 数字电位器向上调一步
// 数字电位器100个抽头,相当于99步
//************************************************************************
void Write_RES(uchar dat1) //调整数字电位器 dat为返回参数电阻大小
{
uchar i,command=0x11;
CS_41010=1;_nop_();
CS_41010 = 0; _nop_(); //片选
SCLK_41010 = 0;_nop_();
for(i=8;i>0;i--) //写命令8位
{
if(command&0x80)
SI_41010=1;
else
SI_41010=0;_nop_();
command <<= 1;
SCLK_41010 = 1;
_nop_();
SCLK_41010 = 0;_nop_();
}
for(i=8;i>0;i--) //写数据八位
{
if(dat1&0x80)
SI_41010=1;
else
SI_41010=0;
_nop_();
dat1 <<= 1;
SCLK_41010 = 1 ;
_nop_();
SCLK_41010 = 0 ;
_nop_();
}
CS_41010 = 1;
_nop_();
}
//........延时函数.......................................................................
void delay_1ms(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<113;i++);
}
//************************数字电位器X9C103************************************************
//************************TLCA/D2543************************************************
void delayAD(uchar b) //50us
{
uchar a;
for(;b>0;b--)
for(a=22;a>0;a--);
}
uint read2543(uchar port)
{
uchar i,al=0,ah=0;
unsigned long ad;
TCL2543_CLK=0;
TCL2543_CS=0;
port<<=4;
for(i=0;i<4;i++)
{
TCL2543_ADIN=port&0x80;
TCL2543_CLK=1;
TCL2543_CLK=0;
port<<=1;
}
TCL2543_ADIN=0;
for(i=0;i<6;i++)
{
TCL2543_CLK=1;
TCL2543_CLK=0;
}
TCL2543_CS=1;
delayAD(5);
TCL2543_CS=0;
for(i=0;i<4;i++)
{
TCL2543_CLK=1;
ah<<=1;
if(TCL2543_DOUT) ah|=0x01;
TCL2543_CLK=0;
}
for(i=0;i<6;i++)
{
TCL2543_CLK=1;
al<<=1;
if(TCL2543_DOUT) al|=0x01;
TCL2543_CLK=0;
}
TCL2543_CS=1;
ad=(uint)ah;
while(!TCL2543_EOC);
ad<<=6;
ad|=al;
return(ad);
}
//************************TLCA/D2543************************************************
//************************A/D计算************************************************
void jisuan11()
{
uchar i,j,k;
float a[12];
float max,min;
float sum=0;
for(j=0;j<12;j++)