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

📄 ds1307.lst

📁 这是8051单片机模拟IIC总线
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.07   DS1307                                                                02/27/2007 10:08:54 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE DS1307
OBJECT MODULE PLACED IN ds1307.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ds1307.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /********************************************************************
   2                                 VIIC_C51.C
   3            此程序是I2C操作平台(主方式的软件平台)的底层的C子程序,如发送数据
   4          及接收数据,应答位发送,并提供了几个直接面对器件的操作函数,它很方便的
   5          与用户程序连接并扩展.....  
   6            
   7              注意:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 
   8          一定的修改....(本例是1us机器周期,即晶振频率要小于12MHZ)
   9          
  10          ********************************************************************/
  11            
  12          // adress-8bits
  13                        
  14          //#include <reg764.h>   
  15          #include <SST89x5x4.H>       /*头文件的包含*/
  16          
  17          #include <intrins.h>
  18          #include <math.h>
  19          
  20          //#include <SST89x5x4.H>
  21          
  22          #define uchar unsigned  char
  23          #define uint unsigned int
  24          #define lcd_clr 0x01
  25          #define you_on  0x0f
  26          
  27          #define BIT0    0X01
  28          #define BIT1    0X02
  29          #define BIT2    0X04
  30          #define BIT3    0X08
  31          #define BIT4    0X10
  32          #define BIT5    0X20
  33          #define BIT6    0X40
  34          #define BIT7    0X80
  35          #define  _Nop()  _nop_()        /*定义空指令*/
  36          
  37          
  38          /*
  39          keyboard        data
  40          0               12
  41          1               8
  42          2               4
  43          3               0
  44          4               1
  45          5               2
  46          6               3
  47          7               5
  48          8               6
  49          9               7
  50          10-ok   9
  51          11              10
  52          12-wrong11
  53          13              13
  54          14              14
  55          15              15
C51 COMPILER V7.07   DS1307                                                                02/27/2007 10:08:54 PAGE 2   

  56          */      
  57                  
  58          //全局变量定义
  59          sbit rs = P1^7;
  60          sbit rw  = P1^6;
  61          sbit e = P2^1;
  62          sbit lcd_deng = P2^3;
  63          
  64          
  65          //函数申明
  66          void lcd_ini(void);     
  67          void lcd_wrc(uchar com);
  68          void lcd_wrd(uchar dat);
  69          void lcd_checkbusy();
  70          void delay(uchar n);
  71          void lcd_on();
  72          void lcd_off();
  73          uchar lcd_read_ac();
  74          void lcd_dis_num(uint dat);
  75          void lcd_dis_ch(uchar h,uchar l);
  76          void lcd_add(uchar h,uchar l);
  77          void lcd_dis_int(long dat,uint int_bits);       //显示一个有符号的整数,显示为dat的低int_bits位
  78          
  79          uchar key_data(void);
  80          
  81          
  82           //i2c相关函数
  83          void Start_I2c();               //起动总线函数
  84          void Stop_I2c();                //结束总线函数
  85          void  SendByte(uchar c);                //字节数据传送函数send
  86          uchar  RcvByte();               //字节数据传送函数 receive
  87          void Ack_I2c(bit a);            //主控器进行应答信号
  88          bit ISendStr_8(uchar add,uchar son_add,uchar dat);              //向子地址为8位的器件发送多字节数据函数 
  89          bit ISendStr_16(uchar add,uint son_add,uchar dat);              //向子地址为16位的器件发送多字节数据函数 
  90          uchar IRcvStr_8(uchar add,uchar son_add);               //向子地址为8位的器件读取多字节数据函数
  91          uchar IRcvStr_16(uchar add,uint son_add);               //向子地址为16位的器件读取多字节数据函数
  92          
  93          
  94          void lcd_dis_time(void);                //时钟显示函数
  95          void set_time(uchar sec, uchar min, uchar hr, uchar dy, uchar dt,uchar mn,uchar yr);            //时钟设置sec, min, 
             -hr, dy, dt, mn, yr
  96          
  97          
  98          
  99          /* 常,变量定义区 */
 100           
 101          /*端口位定义*/
 102          sbit SDA = P3^3;            /*模拟I2C数据传送位*/
 103          sbit SCL = P1^4;            /*模拟I2C时钟控制位*/
 104          sbit WP = P1^3; 
 105          /*状态标志*/
 106          
 107          bit ack;                 /*应答标志位*/
 108          uchar s;
 109          
 110          void main()
 111          {
 112   1              uchar i = 0;
 113   1              uchar v;
 114   1              uchar mydata = 0;
 115   1              uchar keydata = 0;
 116   1      //      uint pot_i;
C51 COMPILER V7.07   DS1307                                                                02/27/2007 10:08:54 PAGE 3   

 117   1      //      pot_i = &i;
 118   1              uchar max=58;
 119   1              uchar *s;
 120   1              s = &max;
 121   1      
 122   1              lcd_off();
 123   1              lcd_on();
 124   1              lcd_ini();
 125   1      //      lcd_add(2,1);
 126   1      //      lcd_dis_ch(0xb4,0xa1);
 127   1      
 128   1      
 129   1      //      I2C
 130   1              WP = 0;
 131   1      
 132   1      //  write to rom
 133   1      /*
 134   1              lcd_add(2,1);
 135   1      
 136   1              i = ISendStr_16(0xa0,0x0000,19);
 137   1              lcd_wrd(0x30+i);
 138   1      */
 139   1      /*
 140   1              lcd_add(3,1);
 141   1              for(v=0x0000;v<8;v++)
 142   1              {
 143   1                      i = 0;
 144   1                      while(i == 0)
 145   1                      {
 146   1                              i = ISendStr_16(0xa0,v,250+2*v+1);
 147   1                      }
 148   1                      lcd_wrd(0x30+(uchar)i); 
 149   1              }
 150   1      */
 151   1      
 152   1      // read rom   set address
 153   1      /*
 154   1              for(v=0x0000;v<8;v++)
 155   1              {
 156   1                      i = IRcvStr_16(0xa0,v);
 157   1                      lcd_wrc(0x88+2*v);
 158   1                      lcd_dis_num(i);
 159   1              }
 160   1      
 161   1      /*
 162   1      */
 163   1      
 164   1      
 165   1      //      while(1);
 166   1              
 167   1              set_time(30,11,10,2,27,2,7);            //时钟设置sec, min, hr, dy, dt, mn, yr
 168   1              while(1)
 169   1              {
 170   2                      lcd_dis_time();         //时钟显示函数
 171   2      
 172   2      
 173   2                      keydata = key_data();
 174   2                      lcd_add(4,6);
 175   2                      switch(keydata)
 176   2                      {
 177   3                              case 0:
 178   3                              {
C51 COMPILER V7.07   DS1307                                                                02/27/2007 10:08:54 PAGE 4   

 179   4                                      v = 3;
 180   4                                      lcd_dis_num(v);
 181   4                                      break;
 182   4                              }
 183   3                              case 1:
 184   3                              {
 185   4                                      v = 4;
 186   4                                      lcd_dis_num(v);
 187   4                                      break;
 188   4                              }
 189   3                              case 2:
 190   3                              {
 191   4                                      v = 5;
 192   4                                      lcd_dis_num(v);
 193   4                                      break;
 194   4                              }
 195   3                              case 3:
 196   3                              {
 197   4                                      v = 6;
 198   4                                      lcd_dis_num(v);
 199   4                                      break;
 200   4                              }
 201   3                              case 4:
 202   3                              {
 203   4                                      v = 2;
 204   4                                      lcd_dis_num(v);
 205   4                                      break;
 206   4                              }
 207   3                              case 5:
 208   3                              {
 209   4                                      v = 7;
 210   4                                      lcd_dis_num(v);
 211   4                                      break;
 212   4                              }
 213   3                              case 6:
 214   3                              {
 215   4                                      v = 8;
 216   4                                      lcd_dis_num(v);
 217   4                                      break;
 218   4                              }
 219   3                              case 7:
 220   3                              {
 221   4                                      v = 9;
 222   4                                      lcd_dis_num(v);
 223   4                                      break;
 224   4                              }
 225   3                              case 8:
 226   3                              {
 227   4                                      v = 1;
 228   4                                      lcd_dis_num(v);
 229   4                                      break;
 230   4                              }
 231   3                              case 9:
 232   3                              {
 233   4                                      v = 10;
 234   4                                      lcd_dis_num(v);
 235   4                                      break;
 236   4                              }
 237   3                              case 10:
 238   3                              {
 239   4                                      v = 11;
 240   4                                      lcd_dis_num(v);
C51 COMPILER V7.07   DS1307                                                                02/27/2007 10:08:54 PAGE 5   

 241   4                                      break;
 242   4                              }
 243   3                              case 11:
 244   3                              {
 245   4                                      v = 12;
 246   4                                      lcd_dis_num(v);
 247   4                                      break;
 248   4                              }
 249   3                              case 12:
 250   3                              {
 251   4                                      v = 0;
 252   4                                      lcd_dis_num(v);
 253   4                                      break;
 254   4                              }
 255   3                              case 13:
 256   3                              {
 257   4                                      v = 13;
 258   4                                      lcd_dis_num(v);
 259   4                                      break;
 260   4                              }
 261   3                              case 14:
 262   3                              {
 263   4                                      v = 14;
 264   4                                      lcd_dis_num(v);
 265   4                                      break;
 266   4                              }
 267   3                              case 15:

⌨️ 快捷键说明

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