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

📄 ch451_start.lst

📁 国产键盘、显示芯片CH451在ADUC845下的程序
💻 LST
字号:
C51 COMPILER V8.08   CH451_START                                                           08/20/2007 02:08:00 PAGE 1   


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

line level    source

   1                                                                                                                                                                                                                                  // CH451 
   2          // AT89C51 C语言程序
   3          //Web:http//winchiphead.com
   4          //Author: yhw  2003.7
   5          
   6          //初始化子程序
   7          #include<aduc845.h>
   8          #include "ch451.h"
   9          void ch451_init()
  10          {
  11   1        ch451_din=0;                                     //先低后高,选择4线输入
  12   1        ch451_din=1;
  13   1      #ifdef USE_KEY
                IT1=0;                                          //设置下降沿触发
                IE1=0;                                          //清中断标志
                PX1=0;                                          //设置低优先级
                EX1=1;                                          //开中断
              #endif
  19   1      
  20   1      }
  21          //*****************************************************
  22          
  23           //输出命令子程序
  24           //定义一无符号整型变量存储12字节的命令字。
  25           void ch451_write(unsigned int command)
  26          {
  27   1        unsigned char i;
  28   1      #ifdef USE_KEY
                EX1=0;                                         //禁止键盘中断
              #endif  
  31   1        ch451_load=0;                                  //命令开始       
  32   1        for(i=0;i<12;i++){                             //送入12位数据,低位在前
  33   2          ch451_din=command&1;                                
  34   2          ch451_dclk=0;
  35   2          command>>=1;
  36   2          ch451_dclk=1;                               //上升沿有效
  37   2        }
  38   1        ch451_load=1;                                 //加载数据
  39   1      #ifdef USE_KEY
                EX1=1;
              #endif
  42   1      }
  43          
  44          #ifdef USE_KEY
              
              //*************************************************
              //输入命令子程序,MCU从451读一字节
               unsigned char ch451_read()
              {
                unsigned char i;
                unsigned char command,keycode;                //定义命令字,和数据存储器
                EX1=0;                                       //关中段 
                command=0x07;                                //输入读451命令字        
                ch451_load=0;
                for(i=0;i<4;i++){
C51 COMPILER V8.08   CH451_START                                                           08/20/2007 02:08:00 PAGE 2   

               
                  ch451_din=command&1;                      //送入最低位
                  ch451_dclk=0;                        
                  command>>=1;                              //往右移一位
                  ch451_dclk=1;                             //产生时钟上升沿锁通知CH451输入位数据
               }
                ch451_load=1;                               //产生加载上升沿通知CH451处理命令数据
                keycode=0;                                  //清除keycode
                for(i=0;i<7;i++){
                  keycode<<=1;                              //数据移入keycode,高位在前,低位在后
                  keycode|=ch451_dout;                      //从高到低读入451的数据
                  ch451_dclk=0;                             //产生时钟下升沿通知CH451输出下一位
                  ch451_dclk=1;
               }
                IE1=0;                                      //清中断标志
                EX1=1;
                return(keycode);                           //反回键值
              }
              //*************************************************
              //中断子程序  使用中断2,寄存器组1
              
              void ch451_inter() interrupt 2 using 1
              {
                unsigned char i;                            //定义循环变量
                unsigned char command,keycode;              //定义控制字寄存器,和中间变量定时器
                command=0x07;                               //读取键值命令的高4位0111B
                ch451_load=0;                               //命令开始
                for(i=0;i<4;i++){
                  ch451_din=command&1;                     //低位在前,高位在后
                  ch451_dclk=0;
                  command>>=1;                             //右移一位
                  ch451_dclk=1;                            //产生时钟上升沿锁通知CH451输入位数据
               }
                ch451_load=1;                              //产生加载上升沿通知CH451处理命令数据
                keycode=0;                                 //清除keycode
                for(i=0;i<7;i++){
                  keycode<<=1;                             //数据作移一位,高位在前,低位在后
                  keycode|=ch451_dout;                     //从高到低读入451的数据
                  ch451_dclk=0;                            //产生时钟下升沿通知CH451输出下一位
                  ch451_dclk=1;
               }
                ch451_key=keycode;                        //保存上次的键值
                IE1=0;                                    //清中断标志
              }
              
              //***********************************************
              
              #endif 
 104          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =     31    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -