任务:
1. 修改项目二数值返回函数;
2. 滚屏报警显示,且报警常亮不休眠;
3. 烧录软件开发;
上午
目前程序烧录进去后存在的问题是:无法连续两次输入上限值;
代码如下:
DWIN.c
#include "DWIN.h"
#include "usart.h"
#include "delay.h"
#include "sys.h"
int rx=0;
u8 ID1,ID2,m=0;
u16 Recive_shang,Recive_xia,shang1,shang2,xia1,xia2;
u8 t;
char buf3[10]={0x5A,0xA5,0x07,0x82,0x10,0x02,0x00,0x00}; //上限
char buf4[10]={0x5A,0xA5,0x07,0x82,0x10,0x04,0x00,0x00}; //下限
void Send_Dwin(char *p)
{
for(t=0;t<10;t++)
{
USART_SendData(USART1,*(p+t));//向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
USART_RX_STA=0;
}
void Count_Temp(void)
{
ID1=USART_RX_BUF[4];
ID2=USART_RX_BUF[5];
if(ID1==0x10&&ID2==0x04)
{
xia1=USART_RX_BUF[9];
xia2=USART_RX_BUF[10];
Recive_xia=(xia1<<8)|xia2;
if(m==1)
{
buf3[8]=shang1,buf3[9]=shang2;
Send_Dwin(buf3);
m=0;
}
}
if(ID1==0x10&&ID2==0x02)
{
shang1=USART_RX_BUF[9];
shang2=USART_RX_BUF[10];
Recive_shang=(shang1<<8)|shang2;
if(m==0)
{
buf4[8]=xia1,buf4[9]=xia2;
Send_Dwin(buf4);
m=1;
}
}
}
main.c
#include "delay.h"
#include "sys.h"
#include "LED.h"
#include "DWIN.h"
#include "EPPROM.h"
#include "485.h"
#include "ADS1232.h"
#include "usart.h"
u8 a,d=1;
u16 JIZUNZI,Shangxianzhi,Xiaxianzhi;
char buf1[10]={0x5A,0xA5,0x07,0x82,0x10,0x06,0x00,0x00}; //锟斤拷锟斤拷值
char buf2[10]={0x5A,0xA5,0x07,0x82,0x10,0x08,0x00,0x00}; //锟斤拷锟斤拷
int Shengding=1,Qidong=1,Guilin=1;
void Julizhi_Send(void)
{
ADS1232_Read_Send();
buf1[8]=JL1;
buf1[9]=JL2;
buf2[8]=JL1;
buf2[9]=JL2;
Send_Dwin(buf1);
Send_Dwin(buf2);
}
int main(void)
{
u16 len,t;
unsigned char Byte[3];
uart_init(115200);
RCC_Configuration();
ADS1232_Init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
while(1)
{
while(a==0)
{
Julizhi_Send();
if(DZ1==0x20&&DZ2==0x02&&GL1==0x01)
{
JIZUNZI=(JL1<<8)|JL2;
buf2[8]=0;
buf2[9]=0;
Send_Dwin(buf2);
while(d==1)
{
Count_Temp();
if(DZ1==0x20&&DZ2==0x00&&GL1==0x01)
{
d=0;
a=1;
}
}
}
Shangxianzhi=JIZUNZI+Recive_shang;
Xiaxianzhi=JIZUNZI-Recive_xia;
}
}
}
Ctrl + S的格式化发生错误了,难搞;
对于屏的串口,需要先有Send后才能读取数值(小bug);
原版代码Count_Temp函数里的逻辑有问题;
当输入了上限后,m置为了1,但当下一步操作再改变上限值时,判断返回值是false,无法Send;
所以再下一步的操作将无法返回数值;
更改后的Count_Temp函数:
这样还有个bug,就是如果连续两次上限值输入相同,则下一次的下限值无法读取;
下午
添加个滚动文本来显示报警;
字体大小是个问题,字库的字体大小都是固定的;
所以只能再生成一个小字库,用GBK编码,70*70;
参考的帖子:DGUS II 如何用小字库轻松实现超大点阵字库显示
小字库显示不出来,我服了;
迪文的文本显示是真的垃圾,各种问题;
只能再建一个大号字库;
也许可以试一下将滚动文本改为文本 — 还是乱码,应该就是字库的问题;
对于模拟触控唤醒屏幕的做法,客服演示该无应答版本的内核也能做到;
但实际上利用串口调试助手发送指令后无响应,屏幕暗度未变化;
可能要用OS来做了;
难搞;
不知道可不可以用C开发来做;