📄 q.c
字号:
*(p2+8)=0xb9,*(p2+9)=0xfd;//"过"=0xb9fd
*(p2+10)=0xc1,*(p2+11)=0xf7;//"流"=0xc1f7
*(p2+12)=0x20,*(p2+13)=0x20;
}
else if(m1&BIT2)
{
*(p2+3)=0x20;
*(p2+4)=0xca,*(p2+5)=0xe4;//"输"=0xcae4
*(p2+6)=0xb3,*(p2+7)=0xf6;//"出"=0xb3f6
*(p2+8)=0xb9,*(p2+9)=0xfd;//"过"=0xb9fd
*(p2+10)=0xd1,*(p2+11)=0xb9;//"压"=0xd1b9
*(p2+12)=0x20,*(p2+13)=0x20;
}
else if(m1&BIT1)
{
*(p2+3)=0x20;
*(p2+4)=0xca,*(p2+5)=0xe4;//"输"=0xcae4
*(p2+6)=0xc8,*(p2+7)=0xeb;//"入"=0xc8eb
*(p2+8)=0xb9,*(p2+9)=0xfd;//"过"=0xb9fd
*(p2+10)=0xc7,*(p2+11)=0xb7;//"欠"=0xc7b7
*(p2+12)=0xd1,*(p2+13)=0xb9;//"压"=0xd1b9
}
else if(!(m1&BIT0))
{//m1.0=0
*(p2+3)=0x20;
*(p2+4)=0xb9,*(p2+5)=0xfd;//"过"=0xb9fd
*(p2+6)=0x20,*(p2+7)=0x20;
*(p2+8)=0xc8,*(p2+9)=0xc8;//"热"=0xc8c8
*(p2+10)=0x20,*(p2+11)=0x20;
*(p2+12)=0x20,*(p2+13)=0x20;
}
if(m1&BIT7)
{ //处理整个系统的运行状态
string[0][12]=0xce;//"稳"=0xcec8
string[0][13]=0xc8;
string[0][14]=0xd1;//"压"=0xd1b9
string[0][15]=0xb9;
}
else
{
string[0][12]=0xce;//"稳"=0xcec8
string[0][13]=0xc8;
string[0][14]=0xc1;//"流"=0xc1f7
string[0][15]=0xf7;
}
p2+=16;
}
}
if(bytes==32) NISP=4,bytes=0,p2=string[0];
}
else
{ //NISP=4接收参数值
if(bytes==0)
k=m1<<8,bytes+=1;
else if(bytes==1)
{ //处理电压值
k+=m1;
k+=k<<1;//k*3
L=k>>10;//L/1024,L是电压值的整数部分
if(L>=10)
{ //电压值不小于10V
*(p2+21)=0x31;//十位数字
*(p2+22)=L-10+0X30;//个位数字
*(p2+23)=0x2e;//小数点
k-=(L<<10);
k=k<<1;//k*10
k=k+(k<<2);
*(p2+24)=(k>>10)+0X30;//十分位数字
}
else
{ //电压值小于10V
*(p2+21)=L+0x30;//个位数字
*(p2+22)=0x2e;//小数点
k-=(L<<10);
k=k<<1;//k*10
k=k+(k<<2);
L=k>>10;
*(p2+23)=L+0X30;//十分位数字.
k-=(L<<10);
k=k<<1;//k*10
k=k+(k<<2);
*(p2+24)=(k>>10)+0X30;//百分位数字
}
bytes+=1;
}
else if(bytes==2) bytes+=1;//总电流值的第一个字节肯定为0x00
else if(bytes==3) //总电流值的第二个字节
{ //处理总电流值
if(m1) *(p2+55)=0x31;//万位数字
else *(p2+55)=0x20;//万位数字
bytes+=1;
}
else if(bytes==4) k=m1,bytes+=1;//总电流值的第三个字节
else if(bytes==5)
{ //总电流值的第四个字节
if(*(p2+55)==0x31) k=24576+(k<<8)+m1;
else
{
k=(k<<8)+m1;
if(k>=0xa000) *(p2+55)=0x31,k-=0xa000;//万位数字
else *(p2+55)=0x20;//万位数字
}
L=k>>12;//L=k/4096
if(L) *(p2+56)=L+0x30;//千位数字
else if(*(p2+55)==0x20) *(p2+56)=0x20;
else *(p2+56)=0x30;
k-=(L<<12);
k=k<<1;//k*10
k=k+(k<<2);
L=k>>12;//L=k/4096
if(L) *(p2+57)=L+0x30;//百位数字
else if(*(p2+56)==0x20) *(p2+57)=0x20;
else *(p2+57)=0x30;
k-=(L<<12);
k=k<<1;//k*10
k=k+(k<<2);
L=k>>12;//L=k/4096
if(L) *(p2+58)=L+0x30;//十位数字
else if(*(p2+57)==0x20) *(p2+58)=0x20;
else *(p2+58)=0x30;
k-=(L<<12);
k=k<<1;//k*10
k=k+(k<<2);
*(p2+59)=(k>>12)+0x30;//个位数字
bytes+=1;
}
else if(bytes==6) bytes+=1;
else if(bytes==7)
{ //总机器数量
if(m1>=10)
*(p2+8)=0x31,*(p2+9)=0x26+m1;
else *(p2+8)=0x20,*(p2+9)=0x30+m1;
bytes+=1;
}
else if(bytes==8) bytes+=1;
else if(bytes==9)
{ //正常运行的机器数量
bytes+=1;
}
else if(bytes==10) bytes+=1;
else //if(bytes==11)
{ //本机的机号
bytes+=1;
k=m1+1;
if(k>=10)
*(p2+5)=0x31,*(p2+6)=0x26+k;
else *(p2+5)=0x20,*(p2+6)=0x30+k;
p3=string[2];//将本机的电流值或工作状态复制到主页
for(i=37;i<47;i++)//先将原有的记录清除掉
*(p2+i)=0x20;
for(i=0;i<16;i++)
if(*(p2+5)==*p3&&*(p2+6)==*(p3+1))
for(j=3;j<14;j++)
*(p2+34+j)=*(p3+j),i=15;
else p3+=16;
BootChar1=0,bytes=0;
if(status==10) Display(string[0]);
else if(status==30) Display(string[2]);
else if(status==40) Display(string[3]);
else if(status==50) Display(string[4]);
else if(status==60) Display(string[5]);
}
/*else if(bytes==12) bytes+=1;
else if(bytes==13)
{ //识别指令类型即工作模式
if(m1==0x41)
{ //收到稳流工作指令
string[1][41]=0x30;//将电压设定值的缓冲区清0
string[1][42]=0x56;
string[1][43]=0x20;
string[1][44]=0x20;
string[1][45]=0x20;
}
else if(m1==0x56)
{
string[1][9]=0x30;//将电流设定值的缓冲区清0
string[1][10]=0x41;
string[1][11]=0x20;
string[1][12]=0x20;
string[1][13]=0x20;
string[1][14]=0x20;
}
bytes+=1;
}
else if(bytes==14) k=m1,bytes+=1;
else //if(bytes==15)
{
BootChar1=0,bytes=0;
if(status==10) Display(string[0]);
else if(status==30) Display(string[2]);
else if(status==40) Display(string[3]);
else if(status==50) Display(string[4]);
else if(status==60) Display(string[5]);
}*/
}
}
main(void)
{
WDTCTL=WDTPW+WDTHOLD;//停止看门狗
_DINT();//关中断
IO_init();//进行I/O初始化
SPI_init();//首先进行SPI通信初始化
U0TXBUF=0x00;
LCM_init();//液晶显示器初始化
Display(string[0]);//显示主页
_EINT();//开中断
while(1)
{
if(keyxd())
{
keybuf=key_scan();
delay(500);//延时消抖动
if((keyxd()!=0)&&(keybuf==key_scan()))
{
while(keyxd()!=0);
keyp();//调用按键处理子程序
}
}
}
}
#pragma vector=UART0RX_VECTOR
__interrupt void UART0RX(void)//UART0的SPI模式接收中断子程序
{
m5=U0RXBUF;
if(m4==0) m1=m5<<m2,m3=m1;
else m1=m3+(m5>>(8-m2)),m3=m5<<m2;
if(BootChar1!=4)
{ //尚未收到四个连续的引导字符0xf0
m4+=1;
if(m1==0xf0) BootChar1+=1;
else
{
BootChar1=0;
if(m4==132)
{
m2+=1;
if(m2==8) m2=0;
m4=0;
}
}
if(BootChar1==4) NISP=1,p2=string[2];
}
else Pro_data();//已经收到四个连续的引导字符0xf0*/
}
/*关于状态参数status的说明
status=10:主页的初始状态
status=20:第二页的初始状态
status=22:正在设置电流值
status=24:正在设置电压
status=30:正在显示第三页
status=40:正在显示第四页
status=50:正在显示第五页
status=60:正在显示第六页
*/
/*关于键盘的说明
1 2 3 选择
4 5 6 删除
7 8 9 确认
. 0 上翻 下翻
*/
/*关于变量的说明
Value:电流值设定过程中用于保存电流值的中间结果.在设定电压值
//后(工作模式发生改变)被清0,否则维持原来的值不变.初值为0
VH,VL:电压值设定过程中用于保存电压值的中间结果,VH保存整数部分,VL保存小数部
//分.在设定电流值后被清0(工作模式发生改变),否则维持原来的值不变.初值为0
Parameter[4],Parameter[5]:设定值最终结果的高8位(整数部分)和低8位(小数部分),初值为0
Parameter[5]:机器号.无机器号输入(缺省值)则为0x65
*/
/*程序中用到的汉字的编码:
电:0xb5e7 压:0xd1b9 流:0xc1f7 机:0xbbfa 号:0xbac5 输:0xcae4 入:0xc8eb 出:0xb3f6 过:0xb9fd
欠:0xc7b7 驱:0xc7fd 动:0xb6af 保:0xb1a3 护:0xbba4 热:0xc8c8 总:0xd7dc 设:0xc9e8 定:0xb6a8 稳:0xcec8
*/
/*
X X X X X X X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -