📄 lcd_fuza_yemiam_kongzhi.c
字号:
i=83;
i&=0x03;i<<=4;i|=0x04;i|=0xb0;
P6OUT=i;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
i=83;
i&=0x0b;i<<=2;i|=0x05;i|=0xb0;
P6OUT=i;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
i=83;
i&=0x30;i|=0x06;i|=0xb0;
P6OUT=i;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
i=83;
i&=0x40;i>>=2;i|=0x07;i|=0xb0;
P6OUT=i;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
//发送滤波器B的工作模式"1"
P6OUT=0xb8;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
i=m[3];
i&=0x03;i<<=4;i|=0x09;i|=0xb0;
P6OUT=i;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
i=m[3];
i&=0x0b;i<<=2;i|=0x0a;i|=0xb0;
P6OUT=i;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
i=m[3];
i&=0x30;i|=0x0b;i|=0xb0;
P6OUT=i;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
i=83;
i&=0x03;i<<=4;i|=0x0c;i|=0xb0;
P6OUT=i;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
i=83;
i&=0x0b;i<<=2;i|=0x0d;i|=0xb0;
P6OUT=i;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
i=83;
i&=0x30;i|=0x0e;i|=0xb0;
P6OUT=i;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
i=83;
i&=0x40;i>>=2;i|=0x0f;i|=0xb0;
P6OUT=i;
P3OUT&=~MAX_CP; //从74HC374的输出数据!
P3OUT|=MAX_CP;
delayms(10);
/*
#define BIT6
#define DA_CP BIT7
#define LPA BIT7
#define BPA BIT6
#define HPA BIT5
#define MAX_313 BIT4
#define BPB BIT3
#define HPB BIT2
#define Sensor_Signal_Importing BIT1
#define LPB BIT0
*/
p=3;
}
}
//*****************************************************
void main(void) //主程序
{
WDTCTL=WDTPW+WDTHOLD;//关看门狗
init_xt2(); //初始化
start(); //显示开机页面
while(1); //等待中断
}
//****************************************************
#pragma vector=PORT1_VECTOR
__interrupt void Port1()
{ uchar y,i; //1
if(keyj()==1)
{ for(y=0;y<5;y++) //3
delayms(40); //消抖动
if(keyj()==1)
{ P1IE=0X0; //暂时关中断 //2
keypoint=keyscan(); //按键见键值保存
P1DIR=0X0F;
while((P1IN&0Xf0)!=0xf0);
//界面切换的按键控制部分
//************************************************************
if(keypoint==10) //A键用来切换页面
{
p=p+1; // 5
if(p==5)p=1;
if(p==2) //P=2显示低通滤波器的参数设置页面
{ set_page_lowpa();
for(q=4;q<=6;q+=2)
{ shzw_str(q,shd[q/2]);}
q=2; //q=2表示这时不能输入值
}
else if(p==3) //p=3显示数据发送提示页面
{ sending_page();
q=2;
}
else if(p==4)
{
i=6;
sending_BCD_page();
for(y=2;y<=6;y=y+4)
{
shzw_str_BCD(y,jiguo_BCD_Ma[i]);
i++;
}
i=6;
q=2;
}
else if(p==1) //P=1显示开机页面
{start_page(); q=2;}
} //5
// ************************************************************
else if((keypoint==11)&&(p==2)) //B键用来切换输入参数项
{ //1
q=q+2;
if(q==8)
q=2;
if(q==4) //提示输入项,"程控增益"
{
hzw_pr(0x02,0x20,fang);//放
hzw_pr(0x02,0x30,da);//大
hzw_pr(0x02,0x40,bei_shu);//倍
hzw_pr(0x02,0x50,shu);//数
}
if(q==6) //"截止频率"
{
if(shd[2][keypst-1]==s) //将上一项最后的小数点清除
{
shd[2][--keypst]=quanbai;//让是小数点的这一位数据不显示
data_number[2]=keypst;
shuru[q/2][keypst]=0;
} //变量可以直接给数组传递数值的!
data_number[2]=keypst;
shzw_str(4,shd[2]); //当把这里的页数写成"2"时就不能在改变设置参数项时把后一位的小数点去掉!!!
hzw_pr(0x02,0x20,jie);//截
hzw_pr(0x02,0x30,jiezhi);//止
hzw_pr(0x02,0x40,pin);//频
hzw_pr(0x02,0x50,lv);//率
}
if(q==2)
{
if(shd[3][keypst-1]==s)
{
shd[3][--keypst]=quanbai;
data_number[2]=keypst;
shuru[q/2][keypst]=0;
}
data_number[2]=keypst;
shzw_str(6,shd[3]);
hzw_pr(0x02,0x20,quanbai1);
hzw_pr(0x02,0x30,quanbai1);
hzw_pr(0x02,0x40,quanbai1);
hzw_pr(0x02,0x50,quanbai1);
}
keypst=0;
} //1
else if(keypoint==13) //D键为输入完数据后的确认键,确认后向FPGA发送数据,并转去看测量页面
{
if((shd[2][0]!=quanbai)&&(shd[3][0]!=quanbai))//为保证三个参数都有输入项
{
if(q==4)
{
if (shd[2][keypst-1]==s) //将上一项最后的小数点清除
{
shd[2][--keypst]=quanbai;//让是小数点的这一位数据不显示
data_number[2]=keypst;
shuru[q/2][keypst]=0;
} //变量可以直接给数组传递数值的!
data_number[2]=keypst;
}
else if(q==6)
{
if(shd[q/2][keypst-1]==s)
{
shd[3][--keypst]=quanbai;
data_number[3]=keypst;
shuru[3][keypst]=0;
}
data_number[3]=keypst;
}
transmit();
}
}
else if((p==2)&&(q!=2)) //记录键值
{ //4
if((keypoint==15)&&(keypst>0))//F键用来删除前一个数字
{ shd[q/2][--keypst]=quanbai;
shuru[q/2][keypst]=0;
if(shd[q/2][keypst-1]==s)x=0;
}//保证删掉的数字前面有点时不删除点
if(keypst<4) //指针数组如" *shd[4][4]"最多只有16个存储变量,为何能寸那么多的数据呢?
{ //6 //加了这个"keypst<4"以后根本就让输入的数据超不过4位!!
if(keypoint==1)
{shd[q/2][keypst]=s1;shuru[q/2][keypst]=1;keypst++;}
if(keypoint==2)
{shd[q/2][keypst]=s2;shuru[q/2][keypst]=2;keypst++;}
if(keypoint==3)
{shd[q/2][keypst]=s3;shuru[q/2][keypst]=3;keypst++;}
if(keypoint==4)
{shd[q/2][keypst]=s4;shuru[q/2][keypst]=4;keypst++;}
if(keypoint==5)
{shd[q/2][keypst]=s5;shuru[q/2][keypst]=5;keypst++;}
if(keypoint==6)
{shd[q/2][keypst]=s6;shuru[q/2][keypst]=6;keypst++;}
if(keypoint==7)
{shd[q/2][keypst]=s7;shuru[q/2][keypst]=7;keypst++;}
if(keypoint==8)
{shd[q/2][keypst]=s8;shuru[q/2][keypst]=8;keypst++;}
if(keypoint==9)
{shd[q/2][keypst]=s9;shuru[q/2][keypst]=9;keypst++;}
if(keypoint==0)
{shd[q/2][keypst]=s0;shuru[q/2][keypst]=0;keypst++;}
if(keypoint==12)
{shd[q/2][keypst]=s;shuru[q/2][keypst]=12;keypst++;}//C用来显示小数点,同时这个"C'键起到了将上一次输入的全部数据请零的作用
if(shd[q/2][0]==s) //如果第一个输入的为小数据点,刚为无效
{ keypst=0;
for(y=0;y<8;y++) //清键值数组
{shd[q/2][y]=quanbai;
shuru[q/2][keypst]=0;}
}
else if((shd[q/2][0]==s0)&&(shd[q/2][1]!=s)&&(keypst>1))//如果第一个输入为0,第二个不为小数点也无效
{ keypst=0;
for(y=0;y<3;y++) //清键值数组
{shd[q/2][y]=quanbai;
shuru[q/2][keypst]=0;}
}
if((shd[q/2][keypst-2]==s)&&(shd[q/2][keypst-1]==s)) //连续输入两个小数点后输入的一个无效
{ shd[q/2][keypst-1]=quanbai;
shuru[q/2][keypst-1]=0;
keypst-=1;
}
if(keypst==1)//新输入第一个数,以前原值清除
{ x=0;
for(y=1;y<4;y++) //清键值数组
{shd[q/2][y]=quanbai;
shuru[q/2][keypst]=0;}
}
if(shd[q/2][keypst-1]==s) //输入两个小数点,后输入的一个无效
{ x=x+1;
if(x>1)
{ shd[q/2][keypst-1]=quanbai;
shuru[q/2][keypst-1]=0;
keypst-=1;}
}
{shzw_str(q,shd[q/2]);} //输出键值,在显示其他的界面时,不就会形成乱码吗!!!!
}//6
} //4
} //2
} //3
P1OUT=0;
P1IFG=0; //清除中断标志
P1IE=0Xf0; //开中断
}//1
//想把"C"语言深入的掌握,达到灵活自如的应用,就要在实际的应用调试软件上进行语句的编写和分析其使用特性
//当变量相互之间发生冲突时,有有时编译软件不能识别,这时会发生不可预料的程序执行错误!!!,优化变量的能力对程序的很好执行很重要!!!!
//程序当中我定义了一个函数不用没有报错,我还想是怎么回事,数据不显示哟!
//就是变量的数据覆盖现象,这非常值得注意!!!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -