⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vterminal_uart.lst

📁 wq_vga.rar,系列C51列程
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   VTERMINAL_UART                                                        08/15/2006 14:47:13 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE VTERMINAL_UART
OBJECT MODULE PLACED IN .\VTerminal_uart.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE D:\VTer_6448TFT_080_02\C51例程\VTerminal_uart\VTerminal_uart\
                    -VTerminal_uart.c BROWSE DEBUG OBJECTEXTEND PRINT(.\VTerminal_uart.lst) OBJECT(.\VTerminal_uart.obj)

line level    source

   1          //智能显示终端串口(Uart)通信演示程序。
   2          //
   3          #include <reg51.h>
   4          #include <stdio.h>
   5          #include <string.h>
   6          #define uchar unsigned char
   7          
   8          uchar  Fcolor;                          //背景色
   9          uchar  Bcolor;                          //前景色
  10          unsigned short CHX_DAT,CHY_DAT;     //触摸屏坐标变量(CHX_DAT:横坐标,CHY_DAT:纵坐标)
  11          unsigned char  Date[8];                         //时间储存区
  12          unsigned char  touch_en=0;
  13          unsigned char  rx_count;
  14          unsigned char  rc_timer_en=0;
  15          //===========================================
  16          //函数声明
  17          Lcd_Clr();
  18          Read_time();
  19          Read_date();
  20          DIS_Ellipse(unsigned short x0,unsigned short y0,unsigned short xr,unsigned short yr);
  21          DIS_Line(unsigned short x0,unsigned short y0,unsigned short x1,unsigned short y1,unsigned short with);
  22          void Clr_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith);
  23          void inv_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith);
  24          void Set_time(uchar year,uchar month,uchar day,uchar hour,uchar minute,uchar second,uchar date);
  25          AUTO_BMP(unsigned short x0,unsigned short y0,uchar N1,uchar N2,uchar T);
  26          DIS_BMP(unsigned short x0,unsigned short y0,uchar N1);
  27          void Dis_time(unsigned short x0,unsigned short y0,unsigned char i);
  28          DIS_Value(unsigned short x0,unsigned short y0,unsigned short Va,unsigned char i);
  29          DIS_String(unsigned short x0,unsigned short y0,char *fmt);
  30          
  31          //============================================
  32          //LCD 分辨率为 320X240 640X480 或800X600
  33          #define  LCD_XSIZE    640    
  34          #define  LCD_YSIZE    480 
  35           
  36          main(void)
  37          {
  38   1        unsigned int i;
  39   1      
  40   1      //对AT89C51(11.059MHz)的串口初始化
  41   1        TMOD=0x20;                              //定时器1设置为模式2
  42   1        SM0=0;
  43   1        SM1=1;                                  //设置串口为方式1,10位异步收发
  44   1        PCON=PCON|0x80;                         //波特率加倍
  45   1        TL1=0xFD;
  46   1        TH1=0xFD;                               //波特率为19200
  47   1        TR1=1;                                  //启动定时器1
  48   1        REN = 1;                                //允许串口接受使能
  49   1      
  50   1        EA=1;                                   //全局中断使能,(EA=0,关全局中断;EA=1,开全局中断)
  51   1        ES = 1;                                 //串口中断使能置1,允许串口中断
  52   1      
  53   1        Fcolor = 0x0;
  54   1        Bcolor = 0xff;
C51 COMPILER V7.20   VTERMINAL_UART                                                        08/15/2006 14:47:13 PAGE 2   

  55   1        i = 0;
  56   1      
  57   1        //显示终端在上电就绪时发送F0.用仿真器时不要检测F0.
  58   1        //当把程序烧写到单片机上时,显示终端和单片机同时上电,所以一定
  59   1        //要检测是否收到F0。以判断显示终端是否上电就绪
  60   1        while(!(i == 0xF0))
  61   1        {i = SBUF;} 
  62   1      
  63   1        Lcd_Clr();     //清除全屏。
  64   1        //DIS_BMP(LCD_XSIZE-50,LCD_YSIZE-50,0);
  65   1      
  66   1        for(i=10;i<40;i+=4)
  67   1        {
  68   2          DIS_Line(10,i,(LCD_XSIZE-10),i,1);             //画直线
  69   2        }
  70   1        for(i=10;i<40;i+=4)
  71   1        {
  72   2          DIS_Ellipse(LCD_XSIZE/4*3,LCD_YSIZE/2,i,i);   //画圆
  73   2        }
  74   1      
  75   1        DIS_String(0,0,"并行接口通信演示程序之一总线方式");    //显示字符
  76   1        Dis_time(0,16,3);
  77   1      
  78   1        DIS_String(0,32,"读取年月日:");
  79   1        Read_date();
  80   1        for(i=0;i<3;i++)
  81   1        {
  82   2           DIS_Value((6*16)+(i*24),32,Date[i+1],2);
  83   2        }
  84   1        DIS_String(0,48,"读取时分秒:");
  85   1        Read_time();
  86   1        for(i=0;i<3;i++)
  87   1        {
  88   2           DIS_Value((6*16)+(i*24),48,Date[i+5],2);
  89   2        }
  90   1      
  91   1        Set_time(05,11,9,17,22,30,3);     //设置时间为2005年11月9日,17:22:30,星期三。
  92   1        DIS_String(0,64,"X轴座标值:");
  93   1        DIS_String(0,80,"Y轴座标值:");
  94   1        Bcolor = 0x03;
  95   1        Fcolor = 0xE0;
  96   1        Clr_squ((LCD_XSIZE/4*1)-35,(LCD_YSIZE/2)-10,70,20);
  97   1        DIS_String((LCD_XSIZE/4*1)-32,(LCD_YSIZE/2)-8,"按键测试");
  98   1        AUTO_BMP(LCD_XSIZE-50,LCD_YSIZE-50,0,3,2);
  99   1      
 100   1        while(1)
 101   1        {
 102   2            //判断是否有触摸事件发生。
 103   2            if(touch_en==5)
 104   2                {
 105   3              DIS_Value((6*16),64,CHX_DAT,3);
 106   3              DIS_Value((6*16),80,CHY_DAT,3);
 107   3                      if(CHX_DAT > ((LCD_XSIZE/4*1)-35) && CHX_DAT < ((LCD_XSIZE/4*1)+35) &&
 108   3                          CHY_DAT > ((LCD_YSIZE/2)-10) && CHY_DAT < ((LCD_YSIZE/2)+10))       //判断点击处是否在按键区域,如果是往下
             -执行
 109   3                      {
 110   4                  inv_squ((LCD_XSIZE/4*1)-35,(LCD_YSIZE/2)-10,70,20);   //反色按钮。
 111   4                              //用户可在这里加上自己的处理程序,实现按键功能。
 112   4                  while(touch_en!=2){}    //等待放开按键。
 113   4                  inv_squ((LCD_XSIZE/4*1)-35,(LCD_YSIZE/2)-10,70,20);   //反色按钮(恢复原来颜色)。
 114   4                      }
 115   3              else 
C51 COMPILER V7.20   VTERMINAL_UART                                                        08/15/2006 14:47:13 PAGE 3   

 116   3                      {DIS_Ellipse(CHX_DAT,CHY_DAT,4,4);} //如果没有点击到按键,则在按下触摸屏的位置显示一个小圆形。
 117   3              touch_en = 0;
 118   3                }
 119   2        }
 120   1      }
 121          //=====================================================================
 122          //查看一个字符是否传送完毕,当一个字符传送完毕后TI位会被硬件置1;
 123          void check_uart(void)
 124          {
 125   1        while(TI==0)
 126   1        {}
 127   1         TI=0;
 128   1      }
 129          //=====================================================================
 130          //指令头,每一条指令都规定为"0x81, command1,command2,Fcolor,Bcolor"
 131          command_head(unsigned char command1,unsigned char command2)
 132          {
 133   1         TI=0;
 134   1         SBUF= 0x81;
 135   1         check_uart();
 136   1         SBUF= command1;
 137   1         check_uart();
 138   1         SBUF= command2;
 139   1         check_uart();
 140   1      
 141   1         SBUF= Fcolor;
 142   1         check_uart();
 143   1         SBUF= Bcolor;
 144   1         check_uart();
 145   1      }
 146          //=====================================================
 147          //指令头+x0+y0
 148          command_head2(uchar command1,uchar command2,unsigned short x0,unsigned short y0)
 149          {
 150   1         command_head(command1,command2);
 151   1      
 152   1         SBUF= x0/100;
 153   1         check_uart();
 154   1         SBUF= x0%100;
 155   1         check_uart();
 156   1         SBUF= y0/100;
 157   1         check_uart();
 158   1         SBUF= y0%100;
 159   1         check_uart();
 160   1      }
 161          //====================================================
 162          //清屏子程序
 163          Lcd_Clr()
 164          {
 165   1         command_head(0x43,0x4c);             //总共发送了五个字节:0x81,0x43,0x4c,Fcolor,Bcolor
 166   1         SBUF= 0x84;
 167   1         check_uart();
 168   1      }
 169          //===================================================
 170          // 清矩形
 171          void Clr_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith)
 172          {
 173   1         command_head2(0x43,0x58,x0,y0);
 174   1      
 175   1         SBUF= width/100;
 176   1         check_uart();
 177   1         SBUF= width%100;
C51 COMPILER V7.20   VTERMINAL_UART                                                        08/15/2006 14:47:13 PAGE 4   

 178   1         check_uart();
 179   1         SBUF= heith/100;
 180   1         check_uart();
 181   1         SBUF= heith%100;
 182   1         check_uart();
 183   1      
 184   1         SBUF= 0x84;
 185   1         check_uart();
 186   1      }
 187          //==========================================================
 188          // 反色矩形
 189          void inv_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith)
 190          {
 191   1         command_head2(0x43,0x4e,x0,y0);
 192   1      
 193   1         SBUF= width/100;
 194   1         check_uart();
 195   1         SBUF= width%100;
 196   1         check_uart();
 197   1         SBUF= heith/100;
 198   1         check_uart();
 199   1         SBUF= heith%100;
 200   1         check_uart();
 201   1      
 202   1         SBUF= 0x84;
 203   1         check_uart();
 204   1      }
 205          //====================================================
 206          //读取年月日
 207          Read_date()
 208          {
 209   1           command_head(0x52,0x44);
 210   1           SBUF= 0x84;
 211   1           check_uart();
 212   1           while(rc_timer_en != 5){}
 213   1           rc_timer_en = 0;
 214   1      }
 215          //=====================================================
 216          //读取时分秒
 217          Read_time()
 218          {
 219   1           command_head(0x52,0x54);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -