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

📄 51

📁 51单片机大量源码
💻
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   PCF8591                                                               04/08/2010 23:02:02 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE PCF8591
OBJECT MODULE PLACED IN PCF8591.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PCF8591.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          // 硬件配置
   3          //晶震: 12M             
   4          //功能:AD 采样输入   频率输入
   5          
   6          //AD采样输入:
   7          //频率输入:
   8          //创建: 
   9          //#include <reg51.h>                 //51头文件库
  10          
  11          //#include <reg52.h>
  12          #include <AT89X52.H>
  13          #include <intrins.h>             //
  14          sbit SCL=P1^2;                   // 将p1.2口模拟时钟口
  15          sbit SDA=P1^3;                   // 将p1.3口模拟数据口
  16          sbit POUT = P3^1;
  17          sbit PIN =P2^3;
  18          bit askflag;
  19          #define uchar unsigned char
  20          #define uint  unsigned int
  21          
  22          #define disdata  P0              //显示数据码输出口
  23          sbit LCD_RS = P2^0;             
  24          sbit LCD_RW = P2^1;
  25          sbit LCD_EN = P2^2;
  26          sbit P14 = P1^5;
  27          
  28          uint data dis[5]={0x00,0x00,0x00,0x00}; 
  29                                    //定义3个显示数据单元和1个数据存储单元
  30          
  31          //uchar code dis4[] = {"1- .  V  2- .  V"};
  32          uchar code  dis4[] = {"voltage: .  V"};
  33          uchar code  dis5[] = {"frequency:   "};
  34          //uchar code dis5[] = {"3- .  V  4- .  V"};
  35          
  36          
  37          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
             -();_nop_();_nop_();_nop_();_nop_();_nop_();};
  38                                   
  39          bit   bdata SystemError;                //从机错误标志位
  40          
  41          /*********************** PCF8591专用变量定义 ***********************/
  42          
  43          #define PCF8591_WRITE   0x90 
  44          #define PCF8591_READ    0x91
  45          #define  NUM  4                     //接收和发送缓存区的深度
  46          uchar idata receivebuf[NUM];    //数据接收缓冲区
  47          
  48          
  49          unsigned int freq;                         //频率值
  50          unsigned char freq2;
  51          unsigned long x;
  52          unsigned int sec_bit;
  53          unsigned char ov_flage;        //计数溢出标志位
  54          
C51 COMPILER V8.02   PCF8591                                                               04/08/2010 23:02:02 PAGE 2   

  55          
  56                  
  57          
  58          void lcd_flash(void);
  59          
  60          /*******************************************************************/
  61          /*                                                                 */
  62          /*  延时函数                                                       */
  63          /*                                                                 */
  64          /*******************************************************************/
  65          
  66          void delay(int ms)
  67          {
  68   1          while(ms--)
  69   1              {
  70   2            uchar i;
  71   2                for(i=0;i<250;i++)  
  72   2                 {
  73   3                  _nop_();                       
  74   3                      _nop_();
  75   3                      _nop_();
  76   3                      _nop_();
  77   3                      _nop_();                           
  78   3                      _nop_();
  79   3                      _nop_();
  80   3                      _nop_();
  81   3                                      _nop_();                           
  82   3                      _nop_();
  83   3                      _nop_();
  84   3                      _nop_();
  85   3                 }
  86   2              }
  87   1      }               
  88          
  89          /*******************************************************************/
  90          /*                                                                 */
  91          /*检查LCD忙状态                                                    */
  92          /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
  93          /*                                                                 */
  94          /*******************************************************************/ 
  95          
  96          bit lcd_busy()
  97           {                          
  98   1          bit result;
  99   1          LCD_RS = 0;
 100   1          LCD_RW = 1;
 101   1          LCD_EN = 1;
 102   1          delayNOP();
 103   1          result = (bit)(P0&0x80);
 104   1          LCD_EN = 0;
 105   1          return(result); 
 106   1       }
 107          
 108          /*******************************************************************/
 109          /*                                                                 */
 110          /*写指令数据到LCD                                                  */
 111          /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
 112          /*                                                                 */
 113          /*******************************************************************/
 114          
 115          void lcd_wcmd(uchar cmd)
 116          
C51 COMPILER V8.02   PCF8591                                                               04/08/2010 23:02:02 PAGE 3   

 117          {                          
 118   1         while(lcd_busy());
 119   1          LCD_RS = 0;
 120   1          LCD_RW = 0;
 121   1          LCD_EN = 0;
 122   1          _nop_();
 123   1          _nop_(); 
 124   1              _nop_();
 125   1          _nop_();
 126   1          P0 = cmd;
 127   1          delayNOP();
 128   1          LCD_EN = 1;
 129   1          delayNOP();
 130   1          LCD_EN = 0;  
 131   1      }
 132          
 133          /*******************************************************************/
 134          /*                                                                 */
 135          /*写显示数据到LCD                                                  */
 136          /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
 137          /*                                                                 */
 138          /*******************************************************************/
 139          
 140          void lcd_wdat(uchar dat)
 141          {                          
 142   1         while(lcd_busy());
 143   1          LCD_RS = 1;
 144   1          LCD_RW = 0;
 145   1          LCD_EN = 0;
 146   1          P0 = dat;
 147   1          delayNOP();
 148   1          LCD_EN = 1;
 149   1          delayNOP();
 150   1          LCD_EN = 0; 
 151   1      }
 152          
 153          /*******************************************************************/
 154          /*                                                                 */
 155          /*  LCD初始化设定                                                  */
 156          /*                                                                 */
 157          /*******************************************************************/
 158          
 159          void lcd_init()
 160          { 
 161   1          delay(15);                   
 162   1          lcd_wcmd(0x38);      //16*2显示,5*7点阵,8位数据
 163   1          delay(5);
 164   1          lcd_wcmd(0x38);         
 165   1          delay(5);
 166   1          lcd_wcmd(0x38);         
 167   1          delay(5);
 168   1      
 169   1          lcd_wcmd(0x0c);      //显示开,关光标
 170   1          delay(5);
 171   1          lcd_wcmd(0x06);      //移动光标
 172   1          delay(5);
 173   1          lcd_wcmd(0x01);      //清除LCD的显示内容
 174   1          delay(5);
 175   1      }
 176          
 177          /*******************************************************************/
 178          /*                                                                 */
C51 COMPILER V8.02   PCF8591                                                               04/08/2010 23:02:02 PAGE 4   

 179          /*  设定显示位置                                                   */
 180          /*                                                                 */
 181          /*******************************************************************/
 182          
 183          void lcd_pos(uchar pos)
 184          {                          
 185   1        lcd_wcmd(pos | 0x80);  //数据指针=80+地址变量
 186   1      }
 187          
 188          /******************************************************************/
 189          /*                                                                */
 190          /* 数据处理与显示                                                 */
 191          /* 将采集到的数据进行16进制转换为ASCLL码。                        */
 192          /*                                                                */
 193          /******************************************************************/
 194          
 195          show_value(uchar ad_data)
 196          
 197          {   
 198   1          dis[2]=ad_data/51;   //AD值转换为3为BCD码,最大为5.00V。
 199   1          dis[2]=dis[2]+0x30;  //转换为ACSII码
 200   1          dis[3]=ad_data%51;   //余数暂存
 201   1          dis[3]=dis[3]*10;    //计算小数第一位
 202   1          dis[1]=dis[3]/51;
 203   1          dis[1]=dis[1]+0x30;  //转换为ACSII码
 204   1          dis[3]=dis[3]%51;
 205   1          dis[3]=dis[3]*10;    //计算小数第二位
 206   1          dis[0]=dis[3]/51;                                                                             //
 207   1          dis[0]=dis[0]+0x30;  //转换为ACSII码           
 208   1      } 
 209          //-------------------------------------------------------------------
 210          // 函数名称: iic_start()
 211          // 函数功能: 启动I2C总线子程序
 212          //-------------------------------------------------------------------

⌨️ 快捷键说明

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