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

📄 text1.lst

📁 基于C8051F020单片机的计算器实现。有键盘
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   TEXT1                                                                 06/17/2007 20:27:35 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: D:\kc\C51\BIN\C51.EXE Text1.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include "c8051f020.h"
   3          
   4          
   5          sbit key_key = P3^6;
   6          sbit Clock_7281 = P3^5;
   7          sbit Data_7281 = P3^4;
   8          
   9          unsigned char Timer3Counter1;
  10          unsigned char key_value[8]={0};
  11          unsigned char key_value1[8];
  12          unsigned char add[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  13          unsigned char  add1[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
  14          bit key_flag;
  15          
  16          
  17          //外部中断6(键盘用)
  18          void ExtentInt6 (void) interrupt 18 {
  19   1              P3IF &= 0XBF;
  20   1              key_flag = 1;
  21   1      }
  22          //定时器3中断
  23          void Timer3Int(void) interrupt 14 {
  24   1              TMR3CN &= 0X7F; //清中断标志
  25   1              Timer3Counter1++;
  26   1      }
  27          /******************** 系统函数 ********************/
  28          // 端口初始化
  29          void PortInitialization ( void ) {
  30   1      //*******************************//
  31   1      //PXDIN : 0=模拟输入;1=数字输入.//
  32   1      //*******************************//
  33   1      //*******************************//
  34   1      //PXDOUT : 0=漏极开路;1=推挽输出.//
  35   1      //*******************************//
  36   1              
  37   1              XBR0 = 0X00;
  38   1              XBR1 = 0X00;            //
  39   1              XBR2 = 0X00;            //关闭弱上拉
  40   1      
  41   1              EMI0CN = 0;                     //
  42   1              EMI0CF = 0X2c;          //外部存储器高端复用方式
  43   1              EMI0TC = 0Xcf;          //时序选择,地址建立时间很重要哦
  44   1      
  45   1              P3MDOUT = 0X20;         // 
  46   1              P3 = 0X70;                      //
  47   1              XBR2 = 0X40;            //交叉开关使能
  48   1      
  49   1              P74OUT = 0XFF;          //推挽输出,总线上都接上拉电阻;
  50   1                                              //如果漏开则不行因为1将其置为高阻
  51   1      }
  52          // 将系统时钟设置为外部时钟 24 MHZ 
  53          void ExternalClock ( void ) {
  54   1              unsigned int i;
  55   1              OSCXCN    = 0x67;                               // 定义外部时钟,并使能
C51 COMPILER V7.50   TEXT1                                                                 06/17/2007 20:27:35 PAGE 2   

  56   1          for (i = 3000;i > 0;i--);           // 等待 1 ms,使外部时钟稳定
  57   1          while ((OSCXCN & 0x80) == 0);       // 检测时钟准备好标志
  58   1          OSCICN  = 0x08;                             // 禁止内部时钟,选择外部时钟
  59   1      }
  60          
  61           void ExternIntInit(void){  //外部中断初始化
  62   1               
  63   1               P3IF = 0X00;   //下降沿触发,中断向量为18
  64   1               EIE2 = 0X10;   //允许EX6中断
  65   1      }
  66          
  67          void Timer3Init(){                      //定时器3初始化
  68   1              TMR3CN = 0X00;
  69   1              TMR3RLL = 0X30;                 //1ms定时
  70   1              TMR3RLH = 0XF8;
  71   1              TMR3L = 0X30;
  72   1              TMR3H = 0XF8;
  73   1              EIE2 |= 0X01;                   //ET3 = 1;
  74   1      }
  75          
  76          void Delay ( unsigned int n ) {
  77   1              for ( ; n > 0; n --);
  78   1      }
  79          //R=3K3,C=20PF,OSC=4.5MHz
  80          //#pragma disable                                       //关中断
  81          void Write_7281 ( unsigned char ddata ) {
  82   1              unsigned char i;
  83   1              Data_7281 = 1;  //漏开置1
  84   1              Clock_7281 = 0;         //9us
  85   1              Clock_7281 = 1;
  86   1              do {                                                    // 建立握手信号,发送一系列脉冲
  87   2                      Clock_7281 = 0;
  88   2                      Delay(6);
  89   2                      Clock_7281 = 1;
  90   2                      Delay(6);
  91   2              } while ( Data_7281 );                  // 等待bc7281a 发送低电平,表示准备好
  92   1      
  93   1              Clock_7281 = 0;                                 // 15us内再发送一时钟信号
  94   1              Delay(6);
  95   1              Clock_7281 = 1;
  96   1              Delay(6);
  97   1      
  98   1              while ( !Data_7281 );                   // Data_7281 回高电平
  99   1              for( i = 0; i < 8; i ++ ) {
 100   2                      if ( ddata & 0x80 )                     // 发送第7..0位
 101   2                              Data_7281 = 1;
 102   2                      else
 103   2                              Data_7281 = 0;
 104   2                              Delay(10);
 105   2                      ddata = ddata << 1;                     // 发送一时钟信号
 106   2                      Clock_7281 = 0; 
 107   2                      Delay(6);
 108   2                      Clock_7281 = 1;
 109   2                      Delay ( 6 );                            // 延时
 110   2              }
 111   1              Data_7281 = 1;                                  // 回高电平
 112   1              Clock_7281 = 1;
 113   1              Delay ( 1 );
 114   1              }
 115                  
 116                  
 117                  // bc7281a 字节读
C51 COMPILER V7.50   TEXT1                                                                 06/17/2007 20:27:35 PAGE 3   

 118                  //#pragma disable                                       //关中断
 119                  unsigned char Read_7281 ( void ) {
 120   1              unsigned char i;
 121   1              unsigned char ddata =0 ;
 122   1              
 123   1              Data_7281 = 1;  //漏开置1
 124   1      
 125   1              Clock_7281 = 0;                                 // 发送一单一握手脉冲 25us
 126   1              Delay(6);
 127   1              Clock_7281 = 1;
 128   1              Delay(6);
 129   1      
 130   1              while ( Data_7281 );                    // 等待bc7281a 发送低电平,表示准备好
 131   1      
 132   1              Data_7281 = 1;  //漏开置1
 133   1              Clock_7281 = 0;                                 // 15us内再发送一时钟信号 9us
 134   1              Delay(6);
 135   1              Clock_7281 = 1;
 136   1              Delay(6);
 137   1      
 138   1              for ( i = 0; i < 8; i ++ ) {
 139   2              Delay ( 20 );
 140   2                      Data_7281 = 1;  //漏开置1
 141   2                      ddata = ddata << 1;
 142   2                      if ( Data_7281 )                        // 接收第7..0位
 143   2                              ddata = ddata | 0x01;
 144   2                      Clock_7281 = 0;                         // 15 us内发送一时钟信号
 145   2                      Delay ( 10 );
 146   2                      Clock_7281 = 1;
 147   2                      Delay(10);
 148   2              }
 149   1              Clock_7281 = 0;                                 // 发送一时钟信号,表示接收完毕
 150   1              Delay ( 12 );
 151   1              Clock_7281 = 1;

⌨️ 快捷键说明

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