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

📄 ch451c54.lst

📁 这是单片机实验板比较齐全的程序
💻 LST
字号:
C51 COMPILER V7.50   CH451C54                                                              05/27/2007 09:12:26 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE CH451C54
OBJECT MODULE PLACED IN CH451C54.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CH451C54.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //CH451
   2          //功能  开机后在最低位置1,其余清零;按下键后,左移两位,在低两位显示
   3          //十进制键值,如果按住键不放,最低位小数点点亮,释放后小数点熄灭。
   4          #include <Winbond\W77C32.H>
   5          #include "sybxt1.h"
   6          //如果使用键盘中断请定义
   7          #define  USE_KEY  1
   8          #define  uchar unsigned char
   9          //须主程序定义的参数
  10          uchar  ch451_key;                               // 存放键盘中断中读取的键值
  11          sbit ch451_dclk=P1^1;                            //串行数据时钟上升延激活
  12          sbit ch451_din=P1^0;                                // 串行数据输出,接CH451的数据输入
  13          sbit ch451_load=P1^2;                            //串行命令加载,上升延激活
  14          sbit ch451_dout=P3^3;                                //INT1,键盘中断和键值数据输入,接CH451的数据输出
  15          #define CH451_RESET     0x0201                           //复位
  16          #define CH451_LEFTMOV   0x0300                      //设置移动方式-作移
  17          #define CH451_LEFTCYC   0x0301                      //设置移动方式-左循
  18          #define CH451_RIGHTMOV  0x0302                      //设置移动方式-右移
  19          #define CH451_RIGHTCYC  0x0303                      //设置移动方式-右循 
  20          #define CH451_SYSOFF    0x0400                      //关显示、键盘、看门狗
  21          #define CH451_SYSON1    0x0401                      //开显示
  22          #define CH451_SYSON2    0x0403                      //开显示、键盘
  23          #define CH451_SYSON3    0x0407                      //开显示、键盘、看门狗功能
  24          #define CH451_DSP       0x0500                      //设置默认显示方式
  25          #define CH451_BCD       0x0580                      //设置BCD译码方式
  26          #define CH451_TWINKLE   0x0600                      //设置闪烁控制
  27          #define CH451_DIG0      0x0800                      //数码管位0显示
  28          #define CH451_DIG1      0x0900                      //数码管位1显示 
  29          #define CH451_DIG2      0x0a00                      //数码管位2显示
  30          #define CH451_DIG3      0x0b00                      //数码管位3显示
  31          #define CH451_DIG4      0x0c00                      //数码管位4显示
  32          #define CH451_DIG5      0x0d00                      //数码管位5显示     
  33          #define CH451_DIG6      0x0e00                      //数码管位6显示     
  34          #define CH451_DIG7      0x0f00                      //数码管位7显示
  35          //初始化子程序
  36          code uchar ucch451[][2]={0,0x40,1,0x41,2,0x42,3,0x43,4,0x48,5,0x49,6,0x4a,7,0x4b,8,0x50,9,0x51,10,0x52,11,
             -0x53,12,0x58,13,0x59,14,0x5a,15,0x5b};
  37          uchar getch451code(uchar uccode)
  38          {
  39   1              uchar i;
  40   1              uchar rtn=1;
  41   1              for(i=0;i<16;i++)
  42   1              {
  43   2                      if(ucch451[i][1]==uccode)
  44   2                      {rtn=ucch451[i][0];
  45   3                      break;
  46   3                      }
  47   2                      
  48   2              }
  49   1              return rtn;
  50   1      }
  51          void ch451_init()
  52          {
  53   1              ch451_din=0;                                     //先低后高,选择4线输入
  54   1              
C51 COMPILER V7.50   CH451C54                                                              05/27/2007 09:12:26 PAGE 2   

  55   1              ch451_din=1;
  56   1      #ifdef USE_KEY
  57   1              IT1=0;                                    //设置下降沿触发
  58   1              IE1=0;                                    //清中断标志
  59   1              PX1=0;                                    //设置低优先级
  60   1              EX1=1;                                    //开中断
  61   1      #endif
  62   1              
  63   1      }
  64          //*****************************************************
  65          //输出命令子程序
  66          //定义一无符号整型变量存储12字节的命令字。
  67          void ch451_write(unsigned int command)
  68          {
  69   1              unsigned char i;
  70   1      #ifdef USE_KEY
  71   1              EX1=0;                                   //禁止键盘中断
  72   1      #endif  
  73   1              ch451_load=0;                                  //命令开始       
  74   1              for(i=0;i<12;i++){                             //送入12位数据,低位在前
  75   2                      ch451_din=command&1;                            
  76   2                      ch451_dclk=0;
  77   2                      command>>=1;
  78   2                      ch451_dclk=1;                               //上升沿有效
  79   2              }
  80   1              ch451_load=1;                                 //加载数据
  81   1      #ifdef USE_KEY
  82   1              EX1=1;
  83   1      #endif
  84   1      }
  85          
  86          #ifdef USE_KEY
  87          //*************************************************
  88          //中断子程序  使用中断2,寄存器组1
  89          void ch451_inter() interrupt 2 using 1
  90          {
  91   1              unsigned char i;                              //定义循环变量
  92   1              unsigned char command,keycode;        //定义控制字寄存器,和中间变量定时器
  93   1              
  94   1              command=0x07;                                 //读取键值命令的高4位0111B
  95   1              ch451_load=0;                                 //命令开始
  96   1              for(i=0;i<4;i++){
  97   2                      ch451_din=command&1;                 //低位在前,高位在后
  98   2                      
  99   2                      ch451_dclk=0;
 100   2                      command>>=1;                         //右移一位
 101   2                      ch451_dclk=1;                        //产生时钟上升沿锁通知CH451输入位数据
 102   2              }
 103   1              ch451_load=1;                                //产生加载上升沿通知CH451处理命令数据
 104   1              keycode=0;                                   //清除keycode
 105   1              for(i=0;i<7;i++){
 106   2                      keycode<<=1;                         //数据作移一位,高位在前,低位在后
 107   2                      
 108   2                      keycode|=ch451_dout;                 //从高到低读入451的数据
 109   2                      ch451_dclk=0;                        //产生时钟下升沿通知CH451输出下一位
 110   2                      ch451_dclk=1;
 111   2              }
 112   1              ch451_key=keycode;                          //保存上次的键值
 113   1              IE1=0;                              //清中断标志
 114   1      }
 115          //***********************************************
 116          //*************************************************
C51 COMPILER V7.50   CH451C54                                                              05/27/2007 09:12:26 PAGE 3   

 117          //延时程序
 118          void delay(){                                   //在12P下延时十毫秒
 119   1              
 120   1              uchar i,j,k;
 121   1              for(i=0;i<10;i++)
 122   1                      for(j=0;j<40;j++)
 123   1                              for(k=0;k<120;k++);
 124   1      }
 125          //************************************************
 126          void ch451init()
 127          {
 128   1              
 129   1              ch451_init();                                  //调用初始化
 130   1              ch451_write(0x403);
 131   1              ch451_write(0x580);                           //测试送入命令
 132   1              
 133   1              ch451_write(CH451_DIG0|0X01);                 //最低位显示1
 134   1              ch451_write(CH451_DIG1|0X02);                 //最低位显示1
 135   1              ch451_write(CH451_DIG2|0X03);                 //最低位显示1
 136   1              EA=1;
 137   1              ch451_key=0x0ff;
 138   1      }
 139          void testch451(){
 140   1              uchar a;
 141   1          while(ch451_key==0xff && !(uccmd=='q'||uccmd=='Q'));                        //等待中断
 142   1              if(!(uccmd=='q'||uccmd=='Q'))
 143   1              {
 144   2                      a=ch451_key;
 145   2                      ch451_key=0x0ff;
 146   2                      ch451_write(0x300);                           //左移两位
 147   2                      a&=0x7f;                                     //显示十进制数据
 148   2                      a=getch451code(a);
 149   2                      ch451_write(CH451_DIG0|a);
 150   2                      delay();
 151   2                      
 152   2              }
 153   1      }
 154          #endif 
 155          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    272    ----
   CONSTANT SIZE    =     32    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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