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

📄 vter_bus.lst

📁 wq_vga.rar,系列C51列程
💻 LST
字号:
C51 COMPILER V7.20   VTER_BUS                                                              08/21/2006 14:14:46 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE VTER_BUS
OBJECT MODULE PLACED IN VTer_bus.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE VTer_bus.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //智能显示终端并行接口通信演示程序之一总线方式。
   2          //仿真器需选择:"总线设置(Bus Option)"的"仅使用数据总线(Use XBus Only)"。
   3          
   4          #include <reg51.h>
   5          #include <stdio.h>
   6          #include <string.h>
   7          #define uchar unsigned char
   8          //==========================================================
   9          //定义P0口为数据线,P3.1, P3.2,P3.3为控制线。
  10          sbit           CS0         =P3^1;          //片选信号 
  11          sbit               PINT    =P3^2;          //触摸屏中断信号
  12          uchar              Fcolor;                 //背景色
  13          uchar              Bcolor;                 //前景色
  14          unsigned short CHX_DAT,CHY_DAT;        //触摸屏坐标
  15          unsigned char  Date[8];                            //读时间值
  16          //==========================================================
  17          //写一个数据子程序:
  18          Write_Byte(uchar dc_data)
  19          {
  20   1          uchar xdata DC;   //定义一个外部RAM变量
  21   1          uchar i;
  22   1          CS0 = 0;
  23   1              DC = dc_data;   //数据dc_data写到外部RAM(即LCD控制板)。
  24   1          CS0 = 1;
  25   1          //加入适当的空操作延时
  26   1              //当采用更高速的单片机时应加入更多的空操作延时
  27   1              //这里加上8个空操作延时,在AT89C51,22MHz下是完全没问题的。
  28   1          for(i=0;i<8;i++){}  
  29   1      }
  30          //==========================================================
  31          //读一个字节数据子程序:
  32          uchar Read_Byte(void)
  33          {
  34   1          uchar xdata DC;
  35   1          CS0 = 0;
  36   1              return DC;
  37   1      }
  38          //=================================================
  39          /*外中断处理程序*/
  40          void Ex1_int( ) interrupt 2 using 1       
  41          { 
  42   1              uchar temp1,temp2,temp3,temp4;
  43   1      
  44   1              temp1 = Read_Byte();
  45   1              temp2 = Read_Byte();
  46   1              temp3 = Read_Byte();
  47   1              temp4 = Read_Byte();
  48   1              if(temp1 == 0xF8)                       //如果接收到的第一个字节是0xF8, 则收到的数据是年月日。
  49   1              {
  50   2             Date[0] = temp1;
  51   2             Date[1] = temp2;
  52   2             Date[2] = temp3;
  53   2             Date[3] = temp4;
  54   2              }
  55   1              else if(temp1 == 0xF9)                  //如果接收到的第一个字节是0xF9, 则收到的数据是时分秒。
C51 COMPILER V7.20   VTER_BUS                                                              08/21/2006 14:14:46 PAGE 2   

  56   1              {
  57   2             Date[4] = temp1;
  58   2             Date[5] = temp2;
  59   2             Date[6] = temp3;
  60   2             Date[7] = temp4;
  61   2              }
  62   1              else                                    //收到的数据触摸屏的座标值。
  63   1              {
  64   2              CHX_DAT = temp1 * 100;
  65   2              CHX_DAT = temp2 + CHX_DAT;  //高低两字节组合(高低两个字节100进1)
  66   2              CHY_DAT = temp3 * 100;
  67   2              CHY_DAT = temp4 + CHY_DAT;  //高低两字节组合(高低两个字节100进1)
  68   2              }
  69   1      }
  70          //==============================================
  71          //函数声明
  72          Lcd_Clr();
  73          Read_time();
  74          Read_date();
  75          DIS_Ellipse(unsigned short x0,unsigned short y0,unsigned short xr,unsigned short yr);
  76          DIS_Line(unsigned short x0,unsigned short y0,unsigned short x1,unsigned short y1,unsigned short with);
  77          void Clr_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith);
  78          void inv_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith);
  79          void Set_time(uchar year,uchar month,uchar day,uchar hour,uchar minute,uchar second,uchar date);
  80          AUTO_BMP(unsigned short x0,unsigned short y0,uchar N1,uchar N2,uchar T);
  81          DIS_BMP(unsigned short x0,unsigned short y0,uchar N1);
  82          void Dis_time(unsigned short x0,unsigned short y0,unsigned char i);
  83          DIS_Value(unsigned short x0,unsigned short y0,unsigned short Va,unsigned char i);
  84          DIS_String(unsigned short x0,unsigned short y0,char *fmt);
  85          test_timer();
  86          void push_windows(unsigned char mun_dc);   //保存当前窗口至后台子程序
  87          void pop_windows(unsigned char mun_dc);    //恢复之前保存在后台的窗口
  88          //==============================================
  89          //LCD 分辨率为 320X240 640X480 或800X600
  90          #define  LCD_XSIZE    320    
  91          #define  LCD_YSIZE    240 
  92          
  93          main(void)
  94          {
  95   1        unsigned int i;
  96   1      
  97   1        CS0 = 0;
  98   1        PINT = 1;
  99   1        Fcolor = 0x0;
 100   1        Bcolor = 0xff;
 101   1        i = 0;
 102   1      
 103   1        //显示终端在上电就绪时发送F0.用仿真器时不要检测F0.
 104   1        //当把程序烧写到单片机上时,显示终端和单片机同时上电,所以一定
 105   1        //要检测是否收到F0。以判断显示终端是否上电就绪
 106   1        //while(!(i == 0xF0))
 107   1        //{i = Read_Byte();} 
 108   1      
 109   1        IT1 = 0;           //外部中断1为电平触发方式。    
 110   1        EA=1;              //全局中断使能,(EA=0,关全局中断;EA=1,开全局中断)
 111   1        EX1 = 1;           //外部中断使能置1,允许外部中断
 112   1      
 113   1        Lcd_Clr();             //清除全屏。
 114   1        //DIS_BMP(LCD_XSIZE-50,LCD_YSIZE-50,0);
 115   1      
 116   1        for(i=10;i<40;i+=4)
 117   1        {
C51 COMPILER V7.20   VTER_BUS                                                              08/21/2006 14:14:46 PAGE 3   

 118   2          DIS_Line(10,i,(LCD_XSIZE-10),i,1);             //画直线
 119   2        }
 120   1        for(i=10;i<40;i+=4)
 121   1        {
 122   2          DIS_Ellipse(LCD_XSIZE/4*3,LCD_YSIZE/2,i,i);   //画圆
 123   2        }
 124   1      
 125   1        DIS_String(0,0,"并行接口通信演示程序之一总线方式");//显示字符
 126   1        Dis_time(0,16,3);
 127   1      
 128   1        DIS_String(0,32,"读取年月日:");
 129   1        DIS_String(0,48,"读取时分秒:");
 130   1        test_timer();
 131   1      
 132   1        Set_time(05,11,9,17,22,30,3);                                           //设置时间为2005年11月9日,17:22:30,星期三。
 133   1        DIS_String(0,64,"X轴座标值:");
 134   1        DIS_String(0,80,"Y轴座标值:");
 135   1        Bcolor = 0x03;
 136   1        Fcolor = 0xE0;
 137   1        Clr_squ((LCD_XSIZE/4*1)-35,(LCD_YSIZE/2)-10,70,20);
 138   1        DIS_String((LCD_XSIZE/4*1)-32,(LCD_YSIZE/2)-8,"按键测试");
 139   1        AUTO_BMP(LCD_XSIZE-50,LCD_YSIZE-50,0,3,2);
 140   1        while(1)
 141   1        {
 142   2            PINT = 1;     //将PINT设为输入端口
 143   2            //判断是否有触摸事件发生。
 144   2            if(PINT ==0)
 145   2                {
 146   3              DIS_Value((6*16),64,CHX_DAT,3);
 147   3              DIS_Value((6*16),80,CHY_DAT,3);
 148   3                      if(CHX_DAT > ((LCD_XSIZE/4*1)-35) && CHX_DAT < ((LCD_XSIZE/4*1)+35) &&
 149   3                          CHY_DAT > ((LCD_YSIZE/2)-10) && CHY_DAT < ((LCD_YSIZE/2)+10))      //判断点击处是否在按键区域,如果

⌨️ 快捷键说明

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