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

📄 vter_gpio.lst

📁 wq_vga.rar,系列C51列程
💻 LST
字号:
C51 COMPILER V7.20   VTER_GPIO                                                             07/29/2006 12:05:19 PAGE 1   


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

line level    source

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

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

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

⌨️ 快捷键说明

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