这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 分享一个简单实现LCD液晶高速数据图显示和动态放大例程

共2条 1/1 1 跳转至

分享一个简单实现LCD液晶高速数据图显示和动态放大例程

菜鸟
2009-01-06 17:43:19     打赏
利用DWIN HMI 指令集0xC104指令实现高速数据图显示和动态放大 方式:

1.相关指令 1.1写暂存缓冲区(0xC0) Tx: AA C0 <Address> <Word0……Wordn> CC 33 C3 3C Rx: 无
  •    <Address>  暂存缓冲区(RAM)的首地址(字地址),一共40KWord,0x0000-0x9FFF。
  •    <Word0……Wordn>  要写入的数据
1.2使用暂存缓冲区数据高速显示折线图(0xC104) Tx: AA C1 04 <Adr1> <x> <y> <Line_Number> <D_x> <Dis_x> <Color1> <Addr0> <Color0> CC 33 C3 3C Rx: 无
  • <x>   显示起始位置的x坐标;
  • <y>   显示Y坐标的0点(最低点)位置,实际连线点位置=y-Ly;
  • <Line_Number>  连线数目,每条线1个字,最多40960条线;
  • <D_x> 固定写0x01;
  • <Dis_X>  显示的x坐标增量,0x01-0x0F,即每连1条线后,x=x+Dis_x;
  • <Addr0>  <Addr1>  暂存缓冲区(RAM)的首地址(字地址),一共40KWord,0x0000-0x9FFF;
  • <Color0>  <Color1> 为显示线条的颜色,不改变系统调色板属性;
暂存缓冲区的连线数据格式定义为:Ly(2字节),Ly为点的高度。 本指令和0xC103指令基本类似,不同在于: A.读缓冲区的点间隔固定为1; b.每连一个点1之前,先把对应的原来的点0擦除,实现无闪烁显示采用115200bps通信速率时,本指令可以达到的折线显示速度极限大约是5500点/秒。   2.举例(DMT80600S080_01WT+DP104B) //C程序举例,高速实时数据采集显示                 Clrwin(0,448,799,512)      //先清除要显示的窗口                 for(;;)         {       wraddr=0x0000;                 for(i=0;i<2;i++)         {       for(j=0;j<2;j++)         {       Txword(0xAAC0);                 Txword(wraddr);                 for(k=0;k<100;k++)         {       Txword(Read_AD());      }      //发送A/D结果                 TxEOC();                        //发送帧结束符                 wraddr=wraddr+100;      }                 if(i==0)         {       Txstr(*dsp0);           }       //显示第1个Buffer                 else         {       Txstr(*dsp1);           }       //显示第2个Buffer         }}   //C程序举例,曲线动态放大,假设数据存储在暂存缓冲区 K=4;        //放大倍速 Addr=0x0000;  //放大的数据段起始位置 Clrwin(0,448,799,512); Txword(0xAAC1); Txbyte(0x03); Txword(Addr); Txword(0x0000);      //x Txword(0x0200);      //y Txbyte((800/K)-1);   //线段数目=横向分辨率/放大倍速-1 Txbyte(0x01);        //Adrr增量为1 Txbyte(k); Txword(0xF800); //显示线段颜色为红色   ;ASM51 程序示例,高速数据曲线显示         START:  NOP                 MOV     WRADDR_H,#00H           ;写数据到缓冲区                 MOV     WRADDR_L,#00H                                 MOV     R5,#2                   ;两个缓冲区交替切换来实现“无抖动”显示         WRBUF0: MOV     R6,#2         WRBUF1: MOV     A,#0AAH                 ;显示间隔4个点,整屏数据需要200个点                 LCALL   TXBYTE                 MOV     A,#0C0H                 LCALL   TXBYTE                 MOV     A,WRADDR_H                 LCALL   TXBYTE                 MOV     A,WRADDR_L                 LCALL   TXBYTE                 MOV     R7,#100         WRBUF2: MOV     A,#00H                  ;00:RAND_D为采样点数据                 LCALL   TXBYTE                 MOV     A,RAND_D                ;随机数测试数据                 ANL     A,#3FH                 LCALL   TXBYTE                 MOV     A,RAND_D                ;生成随机数                 MOV     B,#61                 MUL     AB                 INC     A                 MOV     RAND_D,A                 DJNZ    R7,WRBUF2                 MOV     DPTR,#CMDTTL            ;帧结束符                 LCALL   TXROMS                 MOV     A,WRADDR_L                 ADD     A,#100                 MOV     WRADDR_L,A                 CLR     A                 ADDC    A,WRADDR_H                 MOV     WRADDR_H,A                 DJNZ    R6,WRBUF1                 MOV     DPTR,#DSP1              ;显示第2个缓冲区数据                 CJNE    R5,#2,WRBUF3                 MOV     DPTR,#DSP0              ;显示第1个缓冲区数据         WRBUF3: LCALL   TXROMS                 DJNZ    R5,WRBUF0                 LJMP    START   DSP0:DB AAH,0C1H,04H,00H,00H,00H,00H,02H,00H,0,199,01H,04H,0FEH,0FEH,00H,200,00H,1FH,0CCH,33H,0C3H,3CH,0FFH DSP1:DB AAH,0C1H,04H,00H,200,00H,00H,02H,00H,0,199,01H,04H,0FEH,0FEH,00H,00H,00H,1FH,0CCH,33H,0C3H,3CH,0FFH
-----------------------------------------

若有技术问题请Emai:dukehong@126.com 咨询!



关键词: 分享     一个     简单     实现     液晶     高速     数据     显示         

菜鸟
2009-01-09 09:30:09     打赏
2楼

实现人机界面效果图如下: 


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]