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

📄 tlc549lcd.lst

📁 一些51单片机基础模块的程序
💻 LST
字号:
C51 COMPILER V7.50   TLC549LCD                                                             04/10/2009 19:50:40 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TLC549LCD
OBJECT MODULE PLACED IN TLC549LCD.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE TLC549LCD.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2          * 文件名  : TLC549LCD.c
   3          * 描述    :  TLC549是一个新型的AD转换器,具有8位的分辨率,具有控制简单,体积小的优点。
   4                                   工程当中的AD是要经过多次采集然后再计算出相对准确的值的。
   5                                   这里的电压值通过液晶1602显示出来。
   6          * 创建人  : 东流,2009年4月10日
   7          * 版本号  : 2.0
   8          * 技术支持论坛:www.zidh.com/bbs(请进入“赞助商板块”中的“东流电子工作室”)
   9          * 感谢“中国自动化资讯网”对本工作室的大力支持。
  10          ***********************************************************************/
  11          #include<reg52.h>
  12          #include<intrins.h>
  13          #define uchar unsigned char
  14          #define uint  unsigned int 
  15          
  16          
  17          sbit AD_Out = P3^2;        //TLC549输出端
  18          sbit CS = P1^0;            //TLC549片选信号
  19          sbit AD_In = P1^1;         //TLC549输入端
  20          
  21          //这三个引脚参考资料
  22          sbit E=P2^7;            //1602使能引脚
  23          sbit RW=P2^6;           //1602读写引脚  
  24          sbit RS=P2^5;           //1602数据/命令选择引脚
  25          
  26          /********************************************************************
  27          * 名称 : delay()
  28          * 功能 : 延时,延时时间大概为140US。
  29          * 输入 : 无
  30          * 输出 : 无
  31          ***********************************************************************/
  32          
  33          void delay()
  34          {
  35   1              int i,j;
  36   1              for(i=0; i<=10; i++)
  37   1              for(j=0; j<=2; j++)
  38   1      ;
  39   1      }
  40          
  41          /********************************************************************
  42          * 名称 : Convert(uchar In_Date)
  43          * 功能 : 因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该函数。
  44          * 输入 : 1602资料上的值
  45          * 输出 : 送到1602的值
  46          ***********************************************************************/
  47          uchar Convert(uchar In_Date)
  48          {
  49   1          uchar i, Out_Date = 0, temp = 0;
  50   1          for(i=0; i<8; i++)
  51   1          {
  52   2              temp = (In_Date >> i) & 0x01;
  53   2              Out_Date |= (temp << (7 - i));
  54   2          }
  55   1          return Out_Date;
C51 COMPILER V7.50   TLC549LCD                                                             04/10/2009 19:50:40 PAGE 2   

  56   1      }
  57          /********************************************************************
  58          * 名称 : enable(uchar del)
  59          * 功能 : 1602命令函数
  60          * 输入 : 输入的命令值
  61          * 输出 : 无
  62          ***********************************************************************/
  63          
  64          void enable(uchar del)
  65          {
  66   1              P0 = Convert(del);
  67   1              RS = 0;
  68   1              RW = 0;
  69   1              E = 0;
  70   1              delay();
  71   1              E = 1;
  72   1              delay();
  73   1      }
  74          
  75          /********************************************************************
  76          * 名称 : write(uchar del)
  77          * 功能 : 1602写数据函数
  78          * 输入 : 需要写入1602的数据
  79          * 输出 : 无
  80          ***********************************************************************/
  81          
  82          void write(uchar del)
  83          {
  84   1              P0 = Convert(del);
  85   1              RS = 1;
  86   1              RW = 0;
  87   1              E = 0;
  88   1              delay();
  89   1              E = 1;
  90   1              delay();
  91   1      }
  92          
  93          /********************************************************************
  94          * 名称 : L1602_init()
  95          * 功能 : 1602初始化,请参考1602的资料
  96          * 输入 : 无
  97          * 输出 : 无
  98          ***********************************************************************/
  99          void L1602_init(void)
 100          {
 101   1              enable(0x01);
 102   1              enable(0x38);
 103   1              enable(0x0c);
 104   1              enable(0x06);
 105   1              enable(0xd0);
 106   1      }
 107          
 108          /********************************************************************
 109          * 名称 : L1602_char(uchar hang,uchar lie,char sign)
 110          * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
 111                           L1602_char(1,5,'b')
 112          * 输入 : 行,列,需要输入1602的数据
 113          * 输出 : 无
 114          ***********************************************************************/
 115          void L1602_char(uchar hang,uchar lie,char sign)
 116          {
 117   1              uchar a;
C51 COMPILER V7.50   TLC549LCD                                                             04/10/2009 19:50:40 PAGE 3   

 118   1              if(hang == 1) a = 0x80;
 119   1              if(hang == 2) a = 0xc0;
 120   1              a = a + lie - 1;
 121   1              enable(a);
 122   1              write(sign);
 123   1      }
 124          
 125          /********************************************************************
 126          * 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
 127          * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
 128                           L1602_string(1,5,"ab cd ef;")
 129          * 输入 : 行,列,需要输入1602的数据
 130          * 输出 : 无
 131          ***********************************************************************/
 132          void L1602_string(uchar hang,uchar lie,uchar *p)
 133          {
 134   1              uchar a;
 135   1              if(hang == 1) a = 0x80;
 136   1              if(hang == 2) a = 0xc0;
 137   1              a = a + lie - 1;
 138   1              enable(a);
 139   1              while(1)
 140   1              {
 141   2                      if(*p == '\0') break;
 142   2                      write(*p);
 143   2                      p++;
 144   2              }
 145   1      }
 146          
 147          
 148                            
 149          /********************************************************************
 150          * 名称 : AD_Change(void)
 151          * 功能 : TLC549驱动程序,在“视频及教程”中有讲解。
 152          * 输入 : 无
 153          * 输出 : temp (电压值)
 154          ***********************************************************************/
 155          uchar AD_Change(void)
 156          {
 157   1              uchar i,temp = 0;
 158   1              CS = 0;
 159   1              _nop_();
 160   1              _nop_();
 161   1              _nop_();
 162   1              _nop_();
 163   1              for(i=0; i<8; i++)
 164   1              {
 165   2                      AD_In = 1;
 166   2                      _nop_();
 167   2                      _nop_();
 168   2                      temp = temp << 1;
 169   2                      if(AD_Out == 1) temp += 1;
 170   2                      AD_In = 0;
 171   2                      _nop_();
 172   2                      _nop_();
 173   2              }
 174   1              CS = 1;
 175   1              return temp;    
 176   1      }
 177          
 178          /********************************************************************
 179          * 名称 : Main()
C51 COMPILER V7.50   TLC549LCD                                                             04/10/2009 19:50:40 PAGE 4   

 180          * 功能 : 主函数
 181          * 输入 : 无
 182          * 输出 : 无
 183          ***********************************************************************/
 184          void Main(void)
 185          {
 186   1              uint i = 0,temp;        
 187   1              uint j;
 188   1              L1602_init();
 189   1              L1602_string(1,1,"AD(TLC549) TEST ");
 190   1              L1602_string(2,1,"     0.00V      ");
 191   1              P2 = 0x00;
 192   1              P1 = 0xff;
 193   1              while(1)
 194   1              {
 195   2                      temp = AD_Change();
 196   2                      j = temp * 2;   //这里取的是一个大概的值。真实电压应为 temp * 5 / 256, 得出的数为 "x.xx"。 
 197   2                      L1602_char(2,6,j/100%10+48);
 198   2                      L1602_char(2,8,j/10%10+48);                
 199   2                      L1602_char(2,9,j%10+48);
 200   2              }
 201   1      }
 202          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    384    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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