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

📄 51

📁 51单片机大量源码
💻
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.09   EX86                                                                  07/12/2010 14:45:07 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE EX86
OBJECT MODULE PLACED IN ex86.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ex86.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //将按键次数写入AT24C08,再读出并用1602LCD显示
   2          #include<reg52.h>       //包含单片机寄存器的头文件
   3          #include<intrins.h>     //包含_nop_()函数定义的头文件
   4          sbit RS=P2^7;           //寄存器选择位,将RS位定义为P2.0引脚
   5          sbit RW=P2^6;           //读写选择位,将RW位定义为P2.1引脚
   6          sbit E=P2^5;            //使能信号位,将E位定义为P2.2引脚
   7          sbit BF=P0^7;           //忙碌标志位,,将BF位定义为P0.7引脚
   8          sbit K5=P3^3;            //将S位定义为P1.4引脚
   9          #define OP_READ 0xa1    // 器件地址以及读取操作,0xa1即为1010 0001B
  10          #define OP_WRITE 0xa0   // 器件地址以及写入操作,0xa1即为1010 0000B
  11          sbit SDA=P3^5;          //将串行数据总线SDA位定义在为P3.5引脚
  12          sbit SCL=P3^4;          //将串行时钟总线SDA位定义在为P3.4引脚
  13          unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字
  14          unsigned char code string[ ]={"24C08 RW-TEST"}; //定义字符数组显示提示信息
  15          /*****************************************************
  16          函数功能:延时1ms
  17          (3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
  18          ***************************************************/
  19          void delay1ms()
  20          {
  21   1         unsigned char i,j;   
  22   1               for(i=0;i<10;i++)
  23   1                for(j=0;j<33;j++)
  24   1                 ;             
  25   1       }
  26          /*****************************************************
  27          函数功能:延时若干毫秒
  28          入口参数:n
  29          ***************************************************/
  30           void delaynms(unsigned char n)
  31           {
  32   1         unsigned char i;
  33   1              for(i=0;i<n;i++)
  34   1                 delay1ms();
  35   1       }
  36          /*******************************************************************************
  37          以下是对液晶模块的操作程序
  38          ********************************************************************************/
  39          /*****************************************************
  40          函数功能:判断液晶模块的忙碌状态
  41          返回值:result。result=1,忙碌;result=0,不忙
  42          ***************************************************/
  43           unsigned char BusyTest(void)
  44            {
  45   1          bit result;
  46   1              RS=0;       //根据规定,RS为低电平,RW为高电平时,可以读状态
  47   1          RW=1;
  48   1          E=1;        //E=1,才允许读写
  49   1          _nop_();   //空操作
  50   1          _nop_();
  51   1          _nop_(); 
  52   1          _nop_();   //空操作四个机器周期,给硬件反应时间     
  53   1          result=BF;  //将忙碌标志电平赋给result
  54   1         E=0;         //将E恢复低电平
  55   1         return result;
C51 COMPILER V8.09   EX86                                                                  07/12/2010 14:45:07 PAGE 2   

  56   1        }
  57          /*****************************************************
  58          函数功能:将模式设置指令或显示地址写入液晶模块
  59          入口参数:dictate
  60          ***************************************************/
  61          void WriteInstruction (unsigned char dictate)
  62          {   
  63   1          while(BusyTest()==1);   //如果忙就等待
  64   1               RS=0;                  //根据规定,RS和R/W同时为低电平时,可以写入指令
  65   1               RW=0;   
  66   1               E=0;                   //E置低电平(根据表8-6,写指令时,E为高脉冲,
  67   1                                  // 就是让E从0到1发生正跳变,所以应先置"0"
  68   1               _nop_();
  69   1               _nop_();               //空操作两个机器周期,给硬件反应时间
  70   1               P0=dictate;            //将数据送入P0口,即写入指令或地址
  71   1               _nop_();
  72   1               _nop_();
  73   1               _nop_();
  74   1               _nop_();               //空操作四个机器周期,给硬件反应时间
  75   1               E=1;                   //E置高电平
  76   1               _nop_();
  77   1               _nop_();
  78   1               _nop_();
  79   1               _nop_();               //空操作四个机器周期,给硬件反应时间
  80   1                E=0;                  //当E由高电平跳变成低电平时,液晶模块开始执行命令
  81   1       }
  82          /*****************************************************
  83          函数功能:指定字符显示的实际地址
  84          入口参数:x
  85          ***************************************************/
  86           void WriteAddress(unsigned char x)
  87           {
  88   1           WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x"
  89   1       }
  90          /*****************************************************
  91          函数功能:将数据(字符的标准ASCII码)写入液晶模块
  92          入口参数:y(为字符常量)
  93          ***************************************************/
  94           void WriteData(unsigned char y)
  95           {
  96   1          while(BusyTest()==1);  
  97   1                RS=1;           //RS为高电平,RW为低电平时,可以写入数据
  98   1                RW=0;
  99   1                E=0;            //E置低电平(根据表8-6,写指令时,E为高脉冲,
 100   1                             // 就是让E从0到1发生正跳变,所以应先置"0"
 101   1                P0=y;           //将数据送入P0口,即将数据写入液晶模块
 102   1                _nop_();
 103   1                _nop_();
 104   1                _nop_();
 105   1           _nop_();       //空操作四个机器周期,给硬件反应时间
 106   1                E=1;          //E置高电平
 107   1                _nop_();
 108   1                _nop_();
 109   1                _nop_();
 110   1               _nop_();        //空操作四个机器周期,给硬件反应时间
 111   1               E=0;            //当E由高电平跳变成低电平时,液晶模块开始执行命令
 112   1       }
 113          /*****************************************************
 114          函数功能:对LCD的显示模式进行初始化设置
 115          ***************************************************/
 116          void LcdInitiate(void)
 117          {
C51 COMPILER V8.09   EX86                                                                  07/12/2010 14:45:07 PAGE 3   

 118   1          delaynms(15);               //延时15ms,首次写指令时应给LCD一段较长的反应时间
 119   1          WriteInstruction(0x38);     //显示模式设置:16×2显示,5×7点阵,8位数据接口
 120   1              delaynms(5);                //延时5ms ,给硬件一点反应时间
 121   1          WriteInstruction(0x38);
 122   1              delaynms(5);
 123   1              WriteInstruction(0x38);     //连续三次,确保初始化成功
 124   1              delaynms(5);
 125   1              WriteInstruction(0x0c);     //显示模式设置:显示开,无光标,光标不闪烁
 126   1              delaynms(5);
 127   1              WriteInstruction(0x06);     //显示模式设置:光标右移,字符不移
 128   1              delaynms(5);
 129   1              WriteInstruction(0x01);     //清屏幕指令,将以前的显示内容清除
 130   1              delaynms(5);
 131   1      
 132   1       }
 133           /***************************************************
 134           函数功能:显示小时                          
 135          ***************************************************/
 136          void Display(unsigned char x)
 137          {
 138   1         unsigned char i,j;
 139   1              i=x/10;                  //取整运算,求得十位数字
 140   1              j=x%10;                  //取余运算,求得各位数字
 141   1          WriteAddress(0x47);      //写显示地址,将十位数字显示在第2行第7列
 142   1              WriteData(digit[i]);     //将十位数字的字符常量写入LCD
 143   1              WriteData(digit[j]);     //将个位数字的字符常量写入LCD
 144   1           
 145   1       }
 146          /*******************************************************************************
 147          以下是对AT24C02的读写操作程序
 148          ********************************************************************************/
 149          /***************************************************
 150          函数功能:开始数据传送
 151          ***************************************************/
 152          void start()
 153          // 开始位
 154          {
 155   1              SDA = 1;    //SDA初始化为高电平“1”
 156   1              SCL = 1;    //开始数据传送时,要求SCL为高电平“1”
 157   1              _nop_();    //等待一个机器周期
 158   1              _nop_();    //等待一个机器周期

⌨️ 快捷键说明

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