📄 程序.c
字号:
dishz816(4,50,xr);
}
void disyesclr(void)
{
dishz816(2,82,DY);
dishz816(2,90,DE);
dishz816(2,98,DS);
dishz816(4,34,DC);
dishz816(4,42,DL);
dishz816(4,50,xr);
}
void dispzs(void)
{
dishz816(4,50,DS);
dishz816(4,58,gang);
dishz816(4,66,DP);
dishz816(4,74,DZ);
dishz816(4,82,DS);
}
void disq(uchar xx)
{
switch(xx)
{
case 0:hzcode=dig0;break;
case 1:hzcode=dig1;break;
case 2:hzcode=dig2;break;
case 3:hzcode=dig3;break;
default:break;
}
dishz816(2,98,hzcode);
dishz816(4,42,xq);
dishz816(4,50,gang);
dishz816(4,58,DP);
dishz816(4,66,DO);
dishz816(4,74,DI);
dishz816(4,82,DN);
}
void dist(uchar yy)
{
switch(yy)
{
case 0:hzcode=dig0;break;
case 1:hzcode=dig1;break;
case 2:hzcode=dig2;break;
case 3:hzcode=dig3;break;
default:break;
}
dishz816(2,98,hzcode);
dishz816(4,42,xt);
dishz816(4,50,gang);
dishz816(4,58,DP);
dishz816(4,66,DO);
dishz816(4,74,DI);
dishz816(4,82,DN);
}
void diszero(void)
{
uchar i,colum=64;
for(i=0;i<6;i++)
{ checkdig(Low[i]);
dishz816(2,colum,hzcode);
if(point1!=0)
{
if(5-i==point1)
{
colum=colum+8;
hzcode=dot;
dishz816(2,colum,hzcode);
}
}
colum=colum+8;
}
zerocolum=colum-8;
zero=colum-8;
dishz816(4,zerocolum,heng);
}
void disspan(void)
{
uchar i,colum=64;
for(i=0;i<6;i++)
{
checkdig(High[i]);
dishz816(2,colum,hzcode);
if(point2!=0)
{
if(5-i==point1)
{
colum=colum+8;
hzcode=dot;
dishz816(2,colum,hzcode);
}
}
colum=colum+8;
}
spancolum=colum-8;
span=colum-8;
dishz816(4,spancolum,heng);
}
void dissecret(void)
{
dishz816(2,82,dig2);
dishz816(2,90,dig0);
dishz816(2,98,dig0);
dishz816(2,106,dig0);
dishz816(4,4,DS);
dishz816(4,12,DE);
dishz816(4,20,DC);
dishz816(4,28,xr);
dishz816(4,36,DE);
dishz816(4,44,xt);
}
void setkey(void)
{
uchar key1,key2,key3,clr=0;
if(set==0)
{
r1=0;r2=0;r3=0;r4=0;r5=0;r6=0;r8=0;
}
key1=P2IN&0x01;
key2=P2IN&0x02;
key3=P2IN&0x04;
if(key1==0)
{
set++;
if(set==4)
{
if(move==0)
set=set+4;
}
}
if(set==1)
{
if(r1==0)
{
clearLCD();
discode();
r1=1;
}
if(key2==0)
{
code[i]++;
if(code[i]>9)
code[i]=0;
checkdig(code[i]);
dishz816(2,codecolum,hzcode);
}
if(key3==0)
{
i++;
if(i==1)
{clearLCDa(4,82);codecolum=90;dishz816(4,codecolum,heng);}
if(i==2)
{ clearLCDa(4,90);
codecolum=98;
dishz816(4,codecolum,heng);
}
if(i==3)
{clearLCDa(4,98);codecolum=106;dishz816(4,codecolum,heng);}
if(i>3)
{
{clearLCDa(4,106);
codecolum=82;
dishz816(4,codecolum,heng);
i=0;}
}
}
}
if(set==2)
{
if((r2==0)&&(set==2))
{
checkcode();
if(set==2)
{
clearLCD();
disnoclr();
r2=1;
}
}
if(key2==0)
{
clearLCD();
disyesclr();
yes=1;
}
if((key3==0)&&(yes==1))
{
yes=0;
sum=0;
set=0;
clearLCD();
}
}
if(set==3)
{
if(r3==0)
{
clearLCD();
dispzs();
r3=1;
}
if(key3==0)
{
disq(point1);
move=1;
}
if((key2==0)&&(move==1))
{
point1++;
if(point1>3)
point1=0;
disq(point1);
}
}
if(set==4)
{ move=0;
if(r4==0)
{
clearLCD();
dist(point2);
r4=1;
}
if(key2==0)
{
point2++;
if(point2>3)
point2=0;
dist(point2);
}
}
if(set==5)
{
if(r5==0)
{
clearLCD();
diszero();
r5=1;
}
if(key2==0)
{
Low[5-j]++;
if(Low[5-j]>9)
Low[5-j]=0;
checkdig(Low[5-j]);
dishz816(2,zerocolum,hzcode);
}
if(key3==0)
{
j++;
if(j==point1)
{ clearLCDa(4,zerocolum);
zerocolum=zerocolum-16;
dishz816(4,zerocolum,heng);
}
else
{ clearLCDa(4,zerocolum);
zerocolum=zerocolum-8;
dishz816(4,zerocolum,heng);
}
if(j>5)
{ clearLCDa(4,zerocolum);
zerocolum=zero;
dishz816(4,zerocolum,heng);
j=0;
}
}
}
if(set==6)
{
Lclm=Low[0]*100000+Low[1]*10000+Low[2]*1000+Low[3]*100+Low[4]*10+Low[5];
if(r6==0)
{
clearLCD();
disspan();
r6=1;
}
if(key2==0)
{
High[5-k]++;
if(High[5-k]>9)
High[5-k]=0;
checkdig(High[5-k]);
dishz816(2,spancolum,hzcode);
}
if(key3==0)
{
k++;
if(k==point1)
{ clearLCDa(4,spancolum);
spancolum=spancolum-16;
dishz816(4,spancolum,heng);
}
else
{ clearLCDa(4,spancolum);
spancolum=spancolum-8;
dishz816(4,spancolum,heng);
}
if(k>5)
{ clearLCDa(4,spancolum);
spancolum=span;
dishz816(4,spancolum,heng);
k=0;
}
}
}
if(set==7)
{ Hclm=High[0]*100000+High[1]*10000+High[2]*1000+High[3]*100+High[4]*10+High[5];
set=0;
clearLCD();
}
if(set==8)
{
if(r8==0)
{
clearLCD();
dissecret();
r8=1;
}
if(key2==0)
{
password[x]++;
if(password[x]>9)
password[x]=0;
checkdig(password[x]);
dishz816(2,passcolum,hzcode);
dishz816(4,passcolum,heng);
}
if(key3==0)
{
x++;
if(x==1)
{
clearLCDa(4,82);
passcolum=90;
dishz816(4,passcolum,heng);
}
if(x==2)
{
clearLCDa(4,90);
passcolum=98;
dishz816(4,passcolum,heng);
}
if(x==3)
{
clearLCDa(4,98);
passcolum=106;
dishz816(4,passcolum,heng);
}
if(x>3)
{
clearLCDa(4,106);
passcolum=82;
dishz816(4,passcolum,heng);
x=0;
}
}
}
if(set==9)
{
set=0;
clearLCD();
}
}
//////////////////A/D初始化程序////////////////////////////////
void ADinit(void)
{
P6SEL=0xFF; //P6口设为外围模块功能
ADC12CTL0&=~0x02; //ENC=0
ADC12CTL0=ADC12ON;
ADC12CTL1=0x0200; //SHP=1
ADC12MCTL0=0x84; //REF=AVSS,AVCC,INPUT=A4
//ADC12MCTL4是最后一个转换通道
//ADC12SC位触发采样和保持
//采样脉冲由采样定时器产生
//时钟源:内部振器
//时钟分频:1
//转换模式:单通道单次转换
ADC12CTL0|=0x02; //ENC=1
}
void fun(void)
{
double b=2500;
switch(point1)
{
case 0:times1=1;break;
case 1:times1=10;break;
case 2:times1=100;break;
case 3:times1=1000;break;
default:break;
}
switch(point2)
{
case 0:times2=1;break;
case 1:times2=10;break;
case 2:times2=100;break;
case 3:times2=1000;break;
default:break;
}
voltage=(result*3.3/4095-1.65)/(-27.5);
w=(voltage*1000)/60;
jiao=asin(w)/2;
Q=(b*tan(jiao)+2500)*times1;
sum=sum+0.53*Q/times1*times2;
if((Q>Hclm)||(Q<Lclm))
P1OUT|=BIT2;
else
P1OUT&=~BIT2;
}
/////////////////////定时器初始化程序////////////////////////////
void timerinit(void)
{
TACTL=0x0184; //ACLK 4分频,清TAR
CCTL0|=CCIE; //CCR0中断允许
CCR0=38; //定时0.1s
TACTL|=MC0;
_EINT();
}
///////////////////////////////////////////////////////////////////
void keyscan(void)
{
uchar keydelay;
key=P2IN&0x07;
delay(1000);
keydelay=P2IN&0x07;
if(key==keydelay)
{
if(key!=0x07)
{
setkey();
}
}
if(set==0)
{
displayQ();
displaytotal();
}
}
//////////////////////定时器中断程序///////////////////////////////
interrupt[TIMERA0_VECTOR] void timer_A(void)
{
t++;
ADC12CTL0|=0x01; //开始转换
while((ADC12IFG&BIT0)==0);
result=ADCMEM[0];
resultall=resultall+result;
}
//////////////////////////////////主函数///////////////////////////////////////////////////////////
void main(void)
{
uchar i;
WDTCTL=WDTPW+WDTHOLD; //停止看门狗
BCSCTL1=0xe0;
BCSCTL2=0xc0;
do
{
IFG1&=~OFIFG;
for(i=0xff;i>0;i--);
}
while((IFG1&OFIFG)!=0);
P1DIR|=BIT2;
P2DIR&=0x00; //P2口输入
//WDTCTL=WDTPW+WDTSSEL; //ACLK为时钟源 tACLK*215
lcdinit();
ADinit();
timerinit();
while(1)
{
if(t==5000)
{
t=0;
result=resultall/5000;
resultall=0;
fun();
keyscan();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -