小弟學藝不精!請多多包涵!!!分享下源代碼有很多可以調用的函數,,,,謝謝 ADC0832與DAC0832處理數據。
/*****************************************************************
*************作者:張通 *****************************************
*************信息工程學院*****************************************
*************簡易直流穩壓代碼*************************************
******************************************************************/
#include"reg52.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define WR WR2
#define DAT P0
sbit K1=P3^1;
sbit K2=P3^2;
sbit K3=P3^3;
sbit CS=P2^5; //片選信號
sbit SID=P2^2; //數據信號
sbit SCLK=P2^1; //時鐘信號
sbit RST=P2^2; //復位信號
sbit CH = P2^0; //并行、串行選擇信號
sbit clk0832=P3^6;
sbit DI0832=P3^4;
sbit DO0832=P3^5;
sbit ADCS=P3^7;
sbit WR=P2^6;
bit _Int=0;
bit state;
bit k=0;
bit m=0;
bit q=0;
bit fushu=0;
uint Ch0value,Ch1value;
uint x;
uchar ADdat;
uchar result;
uchar kyreg;
uchar go;
uint DAdat;
uchar hh;
uchar temp; //存放功能狀態
void hzkdis(unsigned char code *s);
void delayms(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=115;y>0;y--);
}
void delay(uint t)
{
uint i,j;
for(i=0; i<t; i++)
for(j=0; j<10; j++);
}
/**********
*讀數值
***********/
uchar keyread()
{
uchar kysta=1;//按鍵標志,kysta=1無按鍵
while(kysta)//鎖定P3口低三位
{
P3=0X0e;
kyreg=P3;
if(kyreg!=0x0e)
{
delay(20);
kyreg=P3;
if(kyreg!=0x0e)
{
if(kyreg==0x0c)return 11; //第一個鍵
if(kyreg==0x0a)return 12; //第二個鍵
if(kyreg==0x06)return 13; //第三個鍵
}
/*****************************************************************
*************作者:張通 *****************************************
*************信息工程學院*****************************************
*************簡易直流穩壓代碼*************************************
******************************************************************/
#include"reg52.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define WR WR2
#define DAT P0
sbit K1=P3^1;
sbit K2=P3^2;
sbit K3=P3^3;
sbit CS=P2^5; //片選信號
sbit SID=P2^2; //數據信號
sbit SCLK=P2^1; //時鐘信號
sbit RST=P2^2; //復位信號
sbit CH = P2^0; //并行、串行選擇信號
sbit clk0832=P3^6;
sbit DI0832=P3^4;
sbit DO0832=P3^5;
sbit ADCS=P3^7;
sbit WR=P2^6;
bit _Int=0;
bit state;
bit k=0;
bit m=0;
bit q=0;
bit fushu=0;
uint Ch0value,Ch1value;
uint x;
uchar ADdat;
uchar result;
uchar kyreg;
uchar go;
uint DAdat;
uchar hh;
uchar temp; //存放功能狀態
void hzkdis(unsigned char code *s);
void delayms(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=115;y>0;y--);
}
void delay(uint t)
{
uint i,j;
for(i=0; i<t; i++)
for(j=0; j<10; j++);
}
/**********
*讀數值
***********/
uchar keyread()
{
uchar kysta=1;//按鍵標志,kysta=1無按鍵
while(kysta)//鎖定P3口低三位
{
P3=0X0e;
kyreg=P3;
if(kyreg!=0x0e)
{
delay(20);
kyreg=P3;
if(kyreg!=0x0e)
{
if(kyreg==0x0c)return 11; //第一個鍵
if(kyreg==0x0a)return 12; //第二個鍵
if(kyreg==0x06)return 13; //第三個鍵
}
}
while(kyreg!=0x0c)//鍵復位
{
P3=0X0e;
kyreg=P3;
}
}
}
uchar keyread2()
{
if(K2==0) //KEY鍵實現數據增加
{
// WR2=1;
// delay(50);
// WR2=0;
if(K2==0) //第二個鍵按下
delay(50); //P1口數值加1
P0=go;
go++;
while(!K2);
}
}
uchar keyread3()
{
if(K3==0)//KEY3鍵實現數據減少
{
// WR2=1;
// delay(50);
// WR2=0;
if(K3==0);//第三個鍵按下
delay(50);
P0=go;
go--;//P1口數值減1
while(!K3);
}
}
/***********************
*ADC0832數據處理函數
***********************/
uchar ADC0832(uchar channel)
{uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
DI0832=1; //DI為1
_nop_(); //延時兩個指令周期
_nop_();
ADCS=0; //拉低cs,選通;確定數據輸入開始
clk0832=1; //時鐘信號為高
_nop_();
_nop_();
clk0832=0; //時鐘信號為低,此處為第一個下降沿
_nop_();
_nop_();
clk0832=1; //時鐘信號為高
DI0832=channel&0x1;// 這句?
_nop_(); _nop_();
clk0832=0; //時鐘信號為低,此處為第二個下降沿
_nop_();
_nop_();
clk0832=1; //時鐘信號為高
DI0832=(channel>>1)&0x1; // ?
_nop_();
_nop_();
clk0832=0; //時鐘信號為低,此處為第三個下降沿
DI0832=1; //DI為1
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=DO0832;//這句?
clk0832=1;
_nop_();
_nop_();
clk0832=0;//形成一次時鐘脈沖
_nop_();
_nop_();
dat<<=1;
if(i==7) dat|=DO0832;
}
for(i=0;i<8;i++)
{ j=0;
j=j|DO0832;
clk0832=1;
_nop_();
_nop_();
clk0832=0;//形成一次時鐘脈沖
_nop_();
_nop_();
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
ADCS=1; //拉高CS端
clk0832=0;//拉低CLK端
DO0832=1;//拉高數據端回到初始狀態
dat<<=8;
dat|=ndat;
return(dat); //return ad k
}
/**********
*DAC送數
**********/
void seDAC(uchar DAdat)
{
WR=1;
_nop_();
_nop_();
DAT=DAdat;
WR=0;
_nop_();
_nop_();
WR=1;
while(kyreg!=0x0c)//鍵復位
{
P3=0X0e;
kyreg=P3;
}
}
}
uchar keyread2()
{
if(K2==0) //KEY鍵實現數據增加
{
// WR2=1;
// delay(50);
// WR2=0;
if(K2==0) //第二個鍵按下
delay(50); //P1口數值加1
P0=go;
go++;
while(!K2);
}
}
uchar keyread3()
{
if(K3==0)//KEY3鍵實現數據減少
{
// WR2=1;
// delay(50);
// WR2=0;
if(K3==0);//第三個鍵按下
delay(50);
P0=go;
go--;//P1口數值減1
while(!K3);
}
}
/***********************
*ADC0832數據處理函數
***********************/
uchar ADC0832(uchar channel)
{uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
DI0832=1; //DI為1
_nop_(); //延時兩個指令周期
_nop_();
ADCS=0; //拉低cs,選通;確定數據輸入開始
clk0832=1; //時鐘信號為高
_nop_();
_nop_();
clk0832=0; //時鐘信號為低,此處為第一個下降沿
_nop_();
_nop_();
clk0832=1; //時鐘信號為高
DI0832=channel&0x1;// 這句?
_nop_(); _nop_();
clk0832=0; //時鐘信號為低,此處為第二個下降沿
_nop_();
_nop_();
clk0832=1; //時鐘信號為高
DI0832=(channel>>1)&0x1; // ?
_nop_();
_nop_();
clk0832=0; //時鐘信號為低,此處為第三個下降沿
DI0832=1; //DI為1
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=DO0832;//這句?
clk0832=1;
_nop_();
_nop_();
clk0832=0;//形成一次時鐘脈沖
_nop_();
_nop_();
dat<<=1;
if(i==7) dat|=DO0832;
}
for(i=0;i<8;i++)
{ j=0;
j=j|DO0832;
clk0832=1;
_nop_();
_nop_();
clk0832=0;//形成一次時鐘脈沖
_nop_();
_nop_();
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
ADCS=1; //拉高CS端
clk0832=0;//拉低CLK端
DO0832=1;//拉高數據端回到初始狀態
dat<<=8;
dat|=ndat;
return(dat); //return ad k
}
/**********
*DAC送數
**********/
void seDAC(uchar DAdat)
{
WR=1;
_nop_();
_nop_();
DAT=DAdat;
WR=0;
_nop_();
_nop_();
WR=1;
}
/********************************************************************
* 名稱 : sendbyte()
* 功能 : 按照液晶的串口通信協議,發送數據
* 輸入 : zdata
* 輸出 : 無
***********************************************************************/
void sendbyte(unsigned char zdata)
{
unsigned int h;
for(h=0; h<8; h++)
{
if((zdata << h) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
SCLK = 1;
}
}
/********************************************************************
* 名稱 : sendbyte()
* 功能 : 按照液晶的串口通信協議,發送數據
* 輸入 : zdata
* 輸出 : 無
***********************************************************************/
void sendbyte(unsigned char zdata)
{
unsigned int h;
for(h=0; h<8; h++)
{
if((zdata << h) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
SCLK = 1;
}
}
/********************************************************************
* 名稱 : write_com()
* 功能 : 寫串口指令
* 輸入 : cmdcode
* 輸出 : 無
***********************************************************************/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}
* 名稱 : write_com()
* 功能 : 寫串口指令
* 輸入 : cmdcode
* 輸出 : 無
***********************************************************************/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名稱 : write_data()
* 功能 : 寫串口指令
* 輸入 : cmdcode
* 輸出 : 無
***********************************************************************/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
* 名稱 : write_data()
* 功能 : 寫串口指令
* 輸入 : cmdcode
* 輸出 : 無
***********************************************************************/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名稱 : lcdinit()
* 功能 : 初始化函數
* 輸入 : cmdcode
* 輸出 : 無
***********************************************************************/
void lcdinit()
{
RST = 0;
delay(100);
RST = 1;
delay(20000);
write_com(0x30);
delay(50);
write_com(0x0c);
delay(50);
write_com(0x03);
delay(50);
}
* 名稱 : lcdinit()
* 功能 : 初始化函數
* 輸入 : cmdcode
* 輸出 : 無
***********************************************************************/
void lcdinit()
{
RST = 0;
delay(100);
RST = 1;
delay(20000);
write_com(0x30);
delay(50);
write_com(0x0c);
delay(50);
write_com(0x03);
delay(50);
}
/********************************************************************
* 名稱 : hzkdis()
* 功能 : 顯示字符串
* 輸入 : *s
* 輸出 : 無
***********************************************************************/
void hzkdis(unsigned char code *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}
void Test()
{
write_com(0x03);
delay(50);
write_com(0x80);
hzkdis("簡易直流穩壓電源");
// write_com(0x90);
// hzkdis("V=00.0v A=00.0a ");
write_com(0x98);
hzkdis("張通 干順 顏煒");;
// write_com(0x98);
// hzkdis(" 12級電子18班 ");
}
void writeNumber(uchar row,uchar rank,uint s)
{
uchar addr;
switch(row)
{
case 0:addr=0x80;break;
case 1:addr=0x90;break;
case 2:addr=0x88;break;
case 3:addr=0x98;break;
}
write_com(0x80);
hzkdis("簡易直流穩壓電源");
write_com(addr+rank);
write_data('V');
write_data('=');
write_data(s/10000+'0');
write_data(s%10000/1000+'0');
write_data(s%1000/100+'0');
write_data(s%100/10+'0');
write_data(s%10+'0');
write_data('m');
write_data('v');
// write_data(' ');
// write_data(' ');
// write_data('A');
// write_data('=');
// write_data(y/100+'0');
// write_data(y%100/10+'0');
// write_data('.');
// write_data(y%10+'0');
// write_data('a');
* 名稱 : hzkdis()
* 功能 : 顯示字符串
* 輸入 : *s
* 輸出 : 無
***********************************************************************/
void hzkdis(unsigned char code *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}
void Test()
{
write_com(0x03);
delay(50);
write_com(0x80);
hzkdis("簡易直流穩壓電源");
// write_com(0x90);
// hzkdis("V=00.0v A=00.0a ");
write_com(0x98);
hzkdis("張通 干順 顏煒");;
// write_com(0x98);
// hzkdis(" 12級電子18班 ");
}
void writeNumber(uchar row,uchar rank,uint s)
{
uchar addr;
switch(row)
{
case 0:addr=0x80;break;
case 1:addr=0x90;break;
case 2:addr=0x88;break;
case 3:addr=0x98;break;
}
write_com(0x80);
hzkdis("簡易直流穩壓電源");
write_com(addr+rank);
write_data('V');
write_data('=');
write_data(s/10000+'0');
write_data(s%10000/1000+'0');
write_data(s%1000/100+'0');
write_data(s%100/10+'0');
write_data(s%10+'0');
write_data('m');
write_data('v');
// write_data(' ');
// write_data(' ');
// write_data('A');
// write_data('=');
// write_data(y/100+'0');
// write_data(y%100/10+'0');
// write_data('.');
// write_data(y%10+'0');
// write_data('a');
}
void writeNumber1(uchar row,uchar rank,uint s)
{
uchar addr;
switch(row)
{
case 0:addr=0x80;break;
case 1:addr=0x90;break;
case 2:addr=0x88;break;
case 3:addr=0x98;break;
}
write_com(0x80);
hzkdis("簡易直流穩壓電源");
write_com(addr+rank);
write_data('A');
write_data('=');
write_data(s/10000+'0');
write_data(s%10000/1000+'0');
write_data(s%1000/100+'0');
write_data(s%100/10+'0');
write_data(s%10+'0');
write_data('m');
write_data('a');
}
void writeNumber1(uchar row,uchar rank,uint s)
{
uchar addr;
switch(row)
{
case 0:addr=0x80;break;
case 1:addr=0x90;break;
case 2:addr=0x88;break;
case 3:addr=0x98;break;
}
write_com(0x80);
hzkdis("簡易直流穩壓電源");
write_com(addr+rank);
write_data('A');
write_data('=');
write_data(s/10000+'0');
write_data(s%10000/1000+'0');
write_data(s%1000/100+'0');
write_data(s%100/10+'0');
write_data(s%10+'0');
write_data('m');
write_data('a');
}
//void display()
//{
//writeNumber(1,1,Ch0value);
//
//}
///*********輸出電壓自增自減程序***********/
//void volchange()
//{
// uchar i,a,b,c,y,z;
// if(temp==1&&(DAdat<511))
// {
// if(q)
// {
// if(z==9)
// {
// DAdat+=3;z=0;
// } //進位
// else DAdat+=2;
// }
// else DAdat+=3;
// z++;
// if(DAdat>=129)
// {
// Ch0value=Ch0value+1;
//// lcdcmd(0x80);
//// lcddata("V=0000mvA=0000ma");
//// c=x/100,a=x%100/10;
//// b=x%10; //一位小數,個位,十位的運算
//// lcdcmd(0x90);
//// for(i=0;i<8;i++)
//// lcddata("V"); //電壓顯示
//// lcddata(Disp[c]);
//// lcddata(Disp[a]);
//// lcddata(".");
//// lcddata(Disp[b]);
//// lcddata("mv");
// writeNumber(1,0, Ch0value*0.742);
// }
// else if(temp==2&&(DAdat>1))
// {
// if(q)
// {
// if(y==9){DAdat-=3;y=0;}//借位
// else DAdat-=2;
// }
// else
// DAdat-=3;
// y++;
// if(DAdat>127)
// {
// Ch0value=Ch0value-1;
//// c=x/100,a=x%100/10;b=x%10;//一位小數,個位,十位的運算
//// lcdcmd(0x90);
//// for(i=0;i<8;i++)
//// lcdcmd("V=");//電壓顯示
//// lcdcmd(Disp[c]);
//// lcdcmd(Disp[a]);
//// lcdcmd('.');
//// lcdcmd(Disp[b]);
// writeNumber(1,0, Ch0value*0.742);
// }
//
// }
// hh=0;
// }
// }
/********************************************************************
* 名稱 : Main()
* 功能 : 主函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void main()
{ uchar A=0;
// WR=1;
EA=1;
EX0=1;
// PX0=1;
IT0=1;
EX1=1;
IT1=1;
// unsigned int vol;
// uchar i,j,l=0,a=0,b=0,e=0;
// bit dian=0;
// bit o=0,p=0; //負數標志位,確認標志位
// pp: a=b=0;dian=0;o=p=0,x=0;
// P1=0;
P0=0xff;
CH = 0;
delay(1);
lcdinit();
delay(10);
Test();
while(1)
{
//if((P3^1==0)&&(A==0))
// {
// }
Ch0value=ADC0832(0);
Ch1value=ADC0832(1);
// if(!K)
// {
// for(i=0;i<10;i++)
// {
// Ch0value=ADC0832(0);
// delayms(50);
// n=n+Ch0value;
// K=1;
//
// }
// }
//
// m=n/10;
// Ch0value=m;
//
if(DAT>Ch0value)//輸出值大于顯示值
{
result=DAT-Ch0value;//輸出值減顯示值
state=0;
}
else
{
result=Ch0value-DAT;//顯示值減輸出值
state=1;
}
if (result>=2)
{
result/=2;
if(state)result=Ch0value-result;
else result=Ch0value+result;
}
else result=Ch0value;
_Int=1;
// Ch1value=ADC0832(1);
// delayms(50);
// Ch1value=read0832(1);
// delayms(50);
//Ch0value=Ch0value*3.922;
writeNumber(1,0, Ch0value*79);
writeNumber1(2,0, Ch1value/4.5);
//{
//writeNumber(1,1,Ch0value);
//
//}
///*********輸出電壓自增自減程序***********/
//void volchange()
//{
// uchar i,a,b,c,y,z;
// if(temp==1&&(DAdat<511))
// {
// if(q)
// {
// if(z==9)
// {
// DAdat+=3;z=0;
// } //進位
// else DAdat+=2;
// }
// else DAdat+=3;
// z++;
// if(DAdat>=129)
// {
// Ch0value=Ch0value+1;
//// lcdcmd(0x80);
//// lcddata("V=0000mvA=0000ma");
//// c=x/100,a=x%100/10;
//// b=x%10; //一位小數,個位,十位的運算
//// lcdcmd(0x90);
//// for(i=0;i<8;i++)
//// lcddata("V"); //電壓顯示
//// lcddata(Disp[c]);
//// lcddata(Disp[a]);
//// lcddata(".");
//// lcddata(Disp[b]);
//// lcddata("mv");
// writeNumber(1,0, Ch0value*0.742);
// }
// else if(temp==2&&(DAdat>1))
// {
// if(q)
// {
// if(y==9){DAdat-=3;y=0;}//借位
// else DAdat-=2;
// }
// else
// DAdat-=3;
// y++;
// if(DAdat>127)
// {
// Ch0value=Ch0value-1;
//// c=x/100,a=x%100/10;b=x%10;//一位小數,個位,十位的運算
//// lcdcmd(0x90);
//// for(i=0;i<8;i++)
//// lcdcmd("V=");//電壓顯示
//// lcdcmd(Disp[c]);
//// lcdcmd(Disp[a]);
//// lcdcmd('.');
//// lcdcmd(Disp[b]);
// writeNumber(1,0, Ch0value*0.742);
// }
//
// }
// hh=0;
// }
// }
/********************************************************************
* 名稱 : Main()
* 功能 : 主函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void main()
{ uchar A=0;
// WR=1;
EA=1;
EX0=1;
// PX0=1;
IT0=1;
EX1=1;
IT1=1;
// unsigned int vol;
// uchar i,j,l=0,a=0,b=0,e=0;
// bit dian=0;
// bit o=0,p=0; //負數標志位,確認標志位
// pp: a=b=0;dian=0;o=p=0,x=0;
// P1=0;
P0=0xff;
CH = 0;
delay(1);
lcdinit();
delay(10);
Test();
while(1)
{
//if((P3^1==0)&&(A==0))
// {
// }
Ch0value=ADC0832(0);
Ch1value=ADC0832(1);
// if(!K)
// {
// for(i=0;i<10;i++)
// {
// Ch0value=ADC0832(0);
// delayms(50);
// n=n+Ch0value;
// K=1;
//
// }
// }
//
// m=n/10;
// Ch0value=m;
//
if(DAT>Ch0value)//輸出值大于顯示值
{
result=DAT-Ch0value;//輸出值減顯示值
state=0;
}
else
{
result=Ch0value-DAT;//顯示值減輸出值
state=1;
}
if (result>=2)
{
result/=2;
if(state)result=Ch0value-result;
else result=Ch0value+result;
}
else result=Ch0value;
_Int=1;
// Ch1value=ADC0832(1);
// delayms(50);
// Ch1value=read0832(1);
// delayms(50);
//Ch0value=Ch0value*3.922;
writeNumber(1,0, Ch0value*79);
writeNumber1(2,0, Ch1value/4.5);
// while(!k)
// {
// delay(200);
// i=keyread();
/* if(!m)
{
//lcdcmd(0x1);
for(j=0;j<7;j++)
//lcddata(0x90);
m=1;
// }*/
// if(i==11){m=0;goto pp;}//復位
// else if(i==12){temp=1;k=1;q=!q;hh=1;;}//加1
// else if(i==13){temp=2;k=1;q=!q;hh=1;;}//減1
//
// }
// if(vol>100)
// {
// lcdcmd(0x01);//顯示清0,數據指針清0
// delay(2);
// write_cmd(0x80);//從第一個位寫數據
// lcdcmd("V=0000mvA=0000ma");
// p=1;//溢出標志,P=1溢出
// }
// if(!fushu&&!hh)//送入DAC的數字量
// {
// DAdat=256*vol/150+128;
// if(DAdat==512)
// DAdat=511;hh=0;
// }
// else if(fushu&&!hh)
// {
// DAdat=256-256*vol/150;
// fushu=0;
// hh=0;
// }
// if((temp==0)&&(!p))
// seDAC(DAdat); //函數調用
// else if(temp==1)
// {
// volchange();
// seDAC(DAdat);
// keyread2();
// temp=0;
// }
// else if(temp==2)
// {
// volchange();
// seDAC(DAdat);
// keyread3();
// temp=0;
// }
// p=0;
// k=0;
// }
}
// delay(5000);
// while(!k)
// {
// delay(200);
// i=keyread();
// if(!m) ;
// if(i==11){m=0;goto pp;}//復位
// else if(i==12){temp=1;k=1;q=!q;hh=1;;}//加1
// else if(i==13){temp=2;k=1;q=!q;hh=1;;}//減1
//
// }
// if(vol>100)
// {
// lcdcmd(0x01);//顯示清0,數據指針清0
// delay(2);
// write_cmd(0x80);//從第一個位寫數據
// lcdcmd("V=0000mvA=0000ma");
// p=1;//溢出標志,P=1溢出
// }
// if(!fushu&&!hh)//送入DAC的數字量
// {
// DAdat=256*vol/150+128;
// if(DAdat==512)
// DAdat=511;hh=0;
// }
// else if(fushu&&!hh)
// {
// DAdat=256-256*vol/150;
// fushu=0;
// hh=0;
// }
// if((temp==0)&&(!p))
// seDAC(DAdat); //函數調用
// else if(temp==1)
// {
// volchange();
// seDAC(DAdat);
// keyread2();
// temp=0;
// }
// else if(temp==2)
// {
// volchange();
// seDAC(DAdat);
// keyread3();
// temp=0;
// }
// p=0;
// k=0;
// }
}
// delay(5000);
// while(!k)
// {
// delay(200);
// i=keyread();
// if(!m) ;
}
//
void reADC() interrupt 2
{
uchar result;
bit state;
DAT=0x80;
ADdat=DAT;
_nop_();
_nop_();
if(ADdat>DAdat)//輸出值大于顯示值
{
result=ADdat-DAdat;//輸出值減顯示值
state=0;
}
else
{
result=DAdat-ADdat;//顯示值減輸出值
state=1;
}
if (result>=2)
{
result/=2;
if(state)result=DAdat-result;
else result=DAdat+result;
}
else result=DAdat;
_Int=1;
}
/******************
*反饋比較
*******************/
uchar cmp(uchar x,uchar y)
{
uchar result;
bit state;
if(x>=y)
{
result=x-y;
state=0;
}
else
{
result=y-x;
state=1;
}
if(result>=2)
{
result/=2;
if(state)result=y-result;
else result=y+result;
//
void reADC() interrupt 2
{
uchar result;
bit state;
DAT=0x80;
ADdat=DAT;
_nop_();
_nop_();
if(ADdat>DAdat)//輸出值大于顯示值
{
result=ADdat-DAdat;//輸出值減顯示值
state=0;
}
else
{
result=DAdat-ADdat;//顯示值減輸出值
state=1;
}
if (result>=2)
{
result/=2;
if(state)result=DAdat-result;
else result=DAdat+result;
}
else result=DAdat;
_Int=1;
}
/******************
*反饋比較
*******************/
uchar cmp(uchar x,uchar y)
{
uchar result;
bit state;
if(x>=y)
{
result=x-y;
state=0;
}
else
{
result=y-x;
state=1;
}
if(result>=2)
{
result/=2;
if(state)result=y-result;
else result=y+result;
}
else result=y;
return (result);
}
void keyzj()interrupt 2
{
DAT-=0.7;
delay(200);
}
void keyjs()interrupt 1
{
DAT+=1;
delay(200);
}
else result=y;
return (result);
}
void keyzj()interrupt 2
{
DAT-=0.7;
delay(200);
}
void keyjs()interrupt 1
{
DAT+=1;
delay(200);
}