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

📄 7843.lst

📁 这个是我在8279上显示触摸屏坐标的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.23a  7843                                                                  06/23/2008 16:59:40 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE 7843
OBJECT MODULE PLACED IN D:\51SERIAL\1\7843.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE D:\51SERIAL\1\7843.C DB SB OE

stmt level    source

   1          /*触摸屏芯片ADS7846/ADS7843驱动程序(C51)
   2          
   3          [文件名] Touch.c
   4          [功 能] 8051单片机驱动ADS7846/ADS7843芯片
   5          [简 介] ADS7846/7843芯片 适合用在4线制触摸屏,它通过标准SPI协议和CPU通信,操作简单,精度高,当
   6          触摸屏被按下时(即有触摸事件发生)则ADS7846向CPU发中断请求,CPU接到请求后,应延时一下再响应
   7          其请求,目的是为了消除抖动使得采样更准确。如果一次采样不准确。
   8          [原作者] 鞠春阳
   9          [版 本] v1.1b
  10          [最后修改时间] 2004年3月31日 9:11
  11          [版 权] 哈尔滨众邦龙科技开发有限公司 单片机坐标网:www.mcuzb.com
  12          */
  13          
  14          
  15          #include <reg51.h>
  16          #include <intrins.h>
  17          
  18          #include<absacc.h>
  19          #define COM8279 XBYTE [0x3fff]
  20          #define DAT8279 XBYTE [0x3ffe]
  21          #define COM8155  XBYTE [0x1f00]
  22          
  23          #define uchar unsigned char
  24          #define uint  unsigned int
  25          
  26          uchar code HELLO[8]={0,0,0,0x3f,0x38,0x38,0x79,0x76};
  27          uchar code Table[]={0x3F,0x06,0x5B,0x4F,
  28                              0x66,0x6D,0x7D,0x07,
  29                              0x7F,0x6F,0x77,0x7C,
  30                              0x39,0x5E,0x79,0x71,
  31                              0x01,0x40,0x08};    //16:-up,17:-,18:_
  32          uchar code keytable[]={    0x00,0x04,0x08,0x0c,0x00,0x00,0x00,0x00,
  33                                     0x01,0x05,0x09,0x0d,0x00,0x00,0x00,0x00,
  34                                     0x02,0x06,0x0A,0x0e,0x00,0x00,0x00,0x00,
  35                                     0x03,0x07,0x0b,0x0F};
  36          uchar idata dismem[8]={0,0,0,0,0,0,0,0};
  37          //uchar idata bcddis[6]={}
  38          uchar  KbHit,ucKey;
  39          void D10us(unsigned char x)
  40          {
  41   1         unsigned char i;              // Unit: 10uS, T=(ucTime*4+6)uS
  42   1         for(i=0;i<x;i++);
  43   1      }
  44          
  45          void Dus(unsigned char x)
  46          {
  47   1         unsigned char i;              // Unit: 10uS, T=(ucTime*4+6)uS
  48   1         for(i=0;i<x;i++);
  49   1      }
  50          void Dms(unsigned char ucTime)         // Unit: 1mS
  51          {
  52   1         unsigned char i;
  53   1         for(i=0;i<ucTime;i++)
  54   1            Dus(246);
  55   1      }
C51 COMPILER V6.23a  7843                                                                  06/23/2008 16:59:40 PAGE 2   

  56          void D1s(unsigned char ucTime)         // Unit: 1S
  57          {
  58   1         unsigned char i;
  59   1         for(i=0;i<ucTime;i++)
  60   1         {
  61   2            Dms(250);
  62   2            Dms(250);
  63   2            Dms(250);
  64   2            Dms(250);
  65   2         }
  66   1      }
  67          void key() interrupt 2 using 1
  68          {
  69   1            EX1=0;            //int0禁止
  70   1            ucKey=DAT8279;
  71   1                ucKey=keytable[ucKey];
  72   1      
  73   1            KbHit=1;
  74   1            EX1=1;
  75   1      }
  76          
  77          
  78          
  79          void Init8279(void)
  80          {
  81   1           uchar i;
  82   1           COM8279=0xd0;          //清除显示
  83   1           do{ACC=COM8279;}
  84   1           while(ACC^7==1)  ;
  85   1           COM8279=0x00;          //键盘显示方式
  86   1           Dus(1);
  87   1               COM8279 = 0x34;   // 写时钟分频系数
  88   1           Dus(1);
  89   1               COM8279= 0X90;         //设定显示RAM地址,自动加1
  90   1           for(i=0;i<8;i++)
  91   1           {
  92   2              DAT8279=HELLO[i];
  93   2              Dus(1);
  94   2           }
  95   1          Dms(250);
  96   1      }
  97          
  98          void Dis8279(void)
  99          {
 100   1          uchar i,x;
 101   1          COM8279=0xd0;
 102   1          do{ACC=COM8279;}
 103   1          while(ACC^7==1) ;
 104   1          COM8279=0x90;
 105   1          for(i=0;i<8;i++)
 106   1          {
 107   2             x=dismem[i];
 108   2                 DAT8279=Table[x];
 109   2            // Dus(1);
 110   2          }
 111   1      }
 112          
 113          sbit DCLK=P1^0;
 114          sbit CS=P1^1;
 115          sbit DIN=P1^2;
 116          sbit DOUT=P1^4;
 117          sbit BUSY=P1^3;
C51 COMPILER V6.23a  7843                                                                  06/23/2008 16:59:40 PAGE 3   

 118          
 119          void delay(unsigned int i)
 120          {
 121   1      while(i--);
 122   1      }
 123          
 124          
 125          void start() //SPI开始
 126          {
 127   1      DCLK=0;
 128   1      CS=1;
 129   1      DIN=1;
 130   1      DCLK=1;
 131   1      CS=0;
 132   1      }
 133          
 134          WriteCharTo7843(unsigned char num) //SPI写数据
 135          {
 136   1      unsigned char count=0;
 137   1      DCLK=0;
 138   1      for(count=0;count<8;count++)
 139   1      {
 140   2      num<<=1;
 141   2      DIN=CY;
 142   2      DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效
 143   2      DCLK=1; _nop_();_nop_();_nop_();
 144   2      }
 145   1      }
 146          
 147          
 148          ReadFromCharFrom7843() //SPI 读数据
 149          {
 150   1      unsigned char count=0;
 151   1      unsigned int Num=0;
 152   1      for(count=0;count<12;count++)
 153   1      {
 154   2      Num<<=1;
 155   2      DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效
 156   2      DCLK=0; _nop_();_nop_();_nop_();
 157   2      if(DOUT) Num++;
 158   2      }
 159   1      return(Num);
 160   1      }
 161          
 162          void ZhongDuan() interrupt 0 //外部中断0 用来接受键盘发来的数据
 163          {
 164   1      unsigned int X=0,Y=0;
 165   1      delay(10000); //中断后延时以消除抖动,使得采样数据更准确
 166   1      start(); //启动SPI
 167   1      // while(BUSY); //如果BUSY信号不好使可以删除不用
 168   1      delay(2);
 169   1      WriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
 170   1      // while(BUSY); //如果BUSY信号不好使可以删除不用
 171   1      delay(2);
 172   1      DCLK=1; _nop_();_nop_();_nop_();_nop_();
 173   1      DCLK=0; _nop_();_nop_();_nop_();_nop_();
 174   1      X=ReadFromCharFrom7843();
 175   1      WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
 176   1      DCLK=1; _nop_();_nop_();_nop_();_nop_();
 177   1      DCLK=0; _nop_();_nop_();_nop_();_nop_();
 178   1      Y=ReadFromCharFrom7843();
 179   1      CS=1;
C51 COMPILER V6.23a  7843                                                                  06/23/2008 16:59:40 PAGE 4   

 180   1      }
 181          
 182          
 183          main()
 184          {

⌨️ 快捷键说明

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