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

📄 pcf8591-da-lcd1602-c51.lst

📁 89S52单片机做的A/D,D/A的实验的源程序PCF8591 D/A CONVERTER */ /* */ /* LCD1602显示 */ /* 参考电压接至5V电源 */ /* 最小输出电
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.08   PCF8591_DA_LCD1602_C51                                                12/21/2006 16:15:07 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE PCF8591_DA_LCD1602_C51
OBJECT MODULE PLACED IN PCF8591-DA-LCD1602-C51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PCF8591-DA-LCD1602-C51.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************/
   2          /*                                                                 */
   3          /* ME500单片机开发系统演示程序 - PCF8591  D/A CONVERTER            */
   4          /*                                                                 */
   5          /* LCD1602显示                                                     */
   6          /* 参考电压接至5V电源                                              */
   7          /* 最小输出电压:0.00V  最大输出电压:5.00V  分辨率:0.02V         */
   8          /*                                                                 */
   9          /* 版本: V1.0 (2006/11/20)                                        */
  10          /* 作者: gguoqing (Email: gguoqing@willar.com)                    */
  11          /* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界) */
  12          /* 时间: 2006/12/02                                               */
  13          /*                                                                 */
  14          /*【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved */
  15          /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!       */
  16          /*                                                                 */
  17          /*******************************************************************/
  18          
  19          #include <reg52.h>
  20          #include <intrins.h>
  21          #include <string.h>
  22          
  23          #define uchar unsigned char
  24          #define uint  unsigned int
  25          #define disdata  P0              //显示数据码输出口
  26          
  27          sbit SDA=P1^3;                   // 将p1.3口模拟数据口
  28          sbit SCL=P1^0;                   // 将p1.0口模拟时钟口
  29          
  30          sbit LCD_RS = P2^0;
  31          sbit LCD_RW = P2^1;
  32          sbit LCD_EN = P2^2;
  33          
  34          sbit  K1   = P1^4;       
  35          sbit  K2   = P1^5;       //选择健
  36          sbit  K3   = P1^6;       //启动健
  37          sbit  K4   = P1^7;       //停止健
  38          sbit  BEEP = P3^7;       //蜂鸣器
  39          
  40          uchar code dis1[] = {"    PCF-8591    "};
  41          uchar code dis2[] = {"  DA CONVERTER  "};
  42          
  43          uchar code dis3[] = {" K2: D/A CHOOSE "};
  44          uchar code dis4[] = {"K3:ENTER K4:EXIT"};
  45          
  46          uchar code dis5[] = {"   SINE  WAVE   "};
  47          uchar code dis6[] = {"  SQUARE  WAVE  "};
  48          uchar code dis7[] = {" TRIANGLE  WAVE "};
  49          uchar code dis8[] = {" SAWTOOTH  WAVE "};
  50          
  51          bit  out1=0,out2=0,out3=0,out4=0,START=0;
  52          
  53          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  54          
  55          bit   bdata SystemError;                //从机错误标志位
C51 COMPILER V7.08   PCF8591_DA_LCD1602_C51                                                12/21/2006 16:15:07 PAGE 2   

  56          
  57          uchar N=0x00,k_count;
  58          /*********************** PCF8591专用变量定义 ***********************/
  59          
  60          #define PCF8591_WRITE   0x90
  61          #define PCF8591_READ    0x91
  62          #define  NUM  4                     //接收和发送缓存区的深度
  63          uchar idata receivebuf[NUM];    //数据接收缓冲区
  64          
  65          uchar  code  sin_tab[] =        //正弦波输出表
  66          {
  67               0x80,0x83,0x86,0x89,0x8D,0x90,0x93,0x96,0x99,0x9C,0x9F,0xA2,0xA5,0xA8,0xAB,0xAE,
  68               0xB1,0xB4,0xB7,0xBA,0xBC,0xBF,0xC2,0xC5,0xC7,0xCA,0xCC,0xCF,0xD1,0xD4,0xD6,0xD8,
  69               0xDA,0xDD,0xDF,0xE1,0xE3,0xE5,0xE7,0xE9,0xEA,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,0xF5,
  70               0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  71               0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFD,0xFC,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,
  72               0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEA,0xE9,0xE7,0xE5,0xE3,0xE1,0xDF,0xDD,0xDA,
  73               0xD8,0xD6,0xD4,0xD1,0xCF,0xCC,0xCA,0xC7,0xC5,0xC2,0xBF,0xBC,0xBA,0xB7,0xB4,0xB1,
  74               0xAE,0xAB,0xA8,0xA5,0xA2,0x9F,0x9C,0x99,0x96,0x93,0x90,0x8D,0x89,0x86,0x83,0x80,
  75               0x80,0x7C,0x79,0x76,0x72,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x55,0x51,
  76               0x4E,0x4C,0x48,0x45,0x43,0x40,0x3D,0x3A,0x38,0x35,0x33,0x30,0x2E,0x2B,0x29,0x27,
  77               0x25,0x22,0x20,0x1E,0x1C,0x1A,0x18,0x16,0x15,0x13,0x11,0x10,0x0E,0x0D,0x0B,0x0A,
  78               0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
  79               0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
  80               0x0A,0x0B,0x0D,0x0E,0x10,0x11,0x13,0x15,0x16,0x18,0x1A,0x1C,0x1E,0x20,0x22,0x25,
  81               0x27,0x29,0x2B,0x2E,0x30,0x33,0x35,0x38,0x3A,0x3D,0x40,0x43,0x45,0x48,0x4C,0x4E,
  82               0x51,0x55,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x72,0x76,0x79,0x7C,0x7E
  83          };
  84          
  85          /*******************************************************************/
  86          /*                                                                 */
  87          /*  延时函数                                                       */
  88          /*                                                                 */
  89          /*******************************************************************/
  90          void delayB(uchar x)    //x*0.14MS
  91           {
  92   1         uchar i;
  93   1         while(x--)
  94   1         {
  95   2           for (i=0; i<13; i++)
  96   2           { }
  97   2         }
  98   1       }
  99          
 100          /*******************************************************************/
 101          /*                                                                 */
 102          /*  延时函数                                                       */
 103          /*                                                                 */
 104          /*******************************************************************/
 105          void delay(int ms)
 106          {
 107   1          while(ms--)
 108   1              {
 109   2            uchar i;
 110   2                for(i=0;i<250;i++)
 111   2                 {
 112   3                  _nop_();
 113   3                  _nop_();
 114   3                  _nop_();
 115   3                  _nop_();
 116   3                 }
 117   2              }
C51 COMPILER V7.08   PCF8591_DA_LCD1602_C51                                                12/21/2006 16:15:07 PAGE 3   

 118   1      }
 119          
 120          /*******************************************************************/
 121          /*                                                                 */
 122          /*  蜂鸣器函数                                                     */
 123          /*                                                                 */
 124          /*******************************************************************/
 125          void beep()
 126           {
 127   1         uchar j;
 128   1         for (j=0;j<180;j++)
 129   1          { 
 130   2           delayB(5);
 131   2           BEEP=!BEEP;                 //BEEP取反
 132   2          } 
 133   1           BEEP=1;                    //关闭蜂鸣器
 134   1               delay(100);
 135   1       }
 136          
 137          
 138          /*******************************************************************/
 139          /*                                                                 */
 140          /*检查LCD忙状态                                                    */
 141          /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
 142          /*                                                                 */
 143          /*******************************************************************/
 144          
 145          bit lcd_busy()
 146           {
 147   1          bit result;
 148   1          LCD_RS = 0;
 149   1          LCD_RW = 1;
 150   1          LCD_EN = 1;
 151   1          delayNOP();
 152   1          result = (bit)(P0&0x80);
 153   1          LCD_EN = 0;
 154   1          return(result);
 155   1       }
 156          
 157          /*******************************************************************/
 158          /*                                                                 */
 159          /*写指令数据到LCD                                                  */
 160          /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
 161          /*                                                                 */
 162          /*******************************************************************/
 163          
 164          void lcd_wcmd(uchar cmd)
 165          
 166          {
 167   1         while(lcd_busy());
 168   1          LCD_RS = 0;
 169   1          LCD_RW = 0;
 170   1          LCD_EN = 0;
 171   1          _nop_();
 172   1          _nop_();
 173   1          P0 = cmd;
 174   1          delayNOP();
 175   1          LCD_EN = 1;
 176   1          delayNOP();
 177   1          LCD_EN = 0;
 178   1      }
 179          
C51 COMPILER V7.08   PCF8591_DA_LCD1602_C51                                                12/21/2006 16:15:07 PAGE 4   

 180          /*******************************************************************/
 181          /*                                                                 */
 182          /*写显示数据到LCD                                                  */
 183          /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
 184          /*                                                                 */
 185          /*******************************************************************/
 186          
 187          void lcd_wdat(uchar dat)
 188          {
 189   1         while(lcd_busy());
 190   1          LCD_RS = 1;
 191   1          LCD_RW = 0;
 192   1          LCD_EN = 0;
 193   1          P0 = dat;
 194   1          delayNOP();
 195   1          LCD_EN = 1;
 196   1          delayNOP();
 197   1          LCD_EN = 0;
 198   1      }
 199          
 200          /*******************************************************************/
 201          /*                                                                 */
 202          /*  LCD初始化设定                                                  */
 203          /*                                                                 */
 204          /*******************************************************************/
 205          
 206          void lcd_init()
 207          {
 208   1          delay(15);
 209   1          lcd_wcmd(0x38);      //16*2显示,5*7点阵,8位数据
 210   1          delay(5);
 211   1          lcd_wcmd(0x38);
 212   1          delay(5);
 213   1          lcd_wcmd(0x38);
 214   1          delay(5);
 215   1      
 216   1          lcd_wcmd(0x0c);      //显示开,关光标
 217   1          delay(5);

⌨️ 快捷键说明

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