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

📄 ch452l_driver.lis

📁 ch452的数码管和键盘驱动程序
💻 LIS
字号:
                        .module ch452l_driver.c
                        .area text(rom, con, rel)
 0000                   .dbfile ch452l_driver.c
 0000                   .dbfunc e Init_Ch452lport _Init_Ch452lport fV
                        .even
 0000           _Init_Ch452lport::
 0000                   .dbline -1
 0000                   .dbline 60
 0000           ; #include<iom8v.h>
 0000           ; #include<macros.h>
 0000           ; #include"delay.h"
 0000           ; 
 0000           ; /************************************************************************
 0000           ; *说明:运行与CH452L的4线模式,MCU使用ATMEGA8L,MCU与CH452L引脚连接如下:
 0000           ;                    LOAD    PC0      
 0000           ;                                  DCLK    PC1
 0000           ;                                  DIN     PC2
 0000           ;                                  DOUT    PC3
 0000           ; LOAD,DCLK,DIN都为输出,DOUT为输入,若要使用其它IO口,只需更改如下宏定义即可
 0000           ; ***********************************************************************/
 0000           ; #define PC0 0
 0000           ; #define PC1 1
 0000           ; #define PC2 2
 0000           ; #define PC3 3
 0000           ; //#define LOAD_IN DDRC=~BIT(PC0)
 0000           ; #define LOAD_OUT DDRC|=BIT(PC0)
 0000           ; #define LOAD_OUT0 PORTC=~BIT(PC0)
 0000           ; #define LOAD_OUT1 PORTC|=BIT(PC0)
 0000           ; //#define DCLK_IN DDRC=~BIT(PC1)
 0000           ; #define DCLK_OUT DDRC|=BIT(PC1)
 0000           ; #define DCLK_OUT0 PORTC=~BIT(PC1)
 0000           ; #define DCLK_OUT1 PORTC|=BIT(PC1)
 0000           ; //#define DIN_IN DDRC=~BIT(PC2)
 0000           ; #define DIN_OUT DDRC|=BIT(PC2)
 0000           ; #define DIN_OUT0 PORTC=~BIT(PC2)
 0000           ; #define DIN_OUT1 PORTC|=BIT(PC2)
 0000           ; #define DOUT_IN DDRC=~BIT(PC3)
 0000           ; //#define DOUT_OUT DDRC|=BIT(PC3)
 0000           ; #define DOUT_OUT0 PORTC=~BIT(PC3)
 0000           ; #define DOUT_OUT1 PORTC|=BIT(PC3)
 0000           ; 
 0000           ; /*************************************************************************
 0000           ; *宏定义CH452L系统命令
 0000           ; *************************************************************************/
 0000           ; #define CH452L_RESET 0x0001       //CH452L初始化命令
 0000           ; #define CONFIG_SYSTEM  0x0400     //配置系统参数
 0000           ; #define CONFIG_DISPLAY 0x0500     //配置显示参数
 0000           ; 
 0000           ; /*************************************************************************
 0000           ; *宏定义CH452L加载数据DIG7~DIG0
 0000           ; *************************************************************************/
 0000           ; #define CH452L_DIG7 0x0f00
 0000           ; #define CH452L_DIG6 0x0e00
 0000           ; #define CH452L_DIG5 0x0d00
 0000           ; #define CH452L_DIG4 0x0c00
 0000           ; #define CH452L_DIG3 0x0b00
 0000           ; #define CH452L_DIG2 0x0a00
 0000           ; #define CH452L_DIG1 0x0900
 0000           ; #define CH452L_DIG0 0x0800
 0000           ; 
 0000           ; /**************************************************************************
 0000           ; *函数名:初始化CH452L端口
 0000           ; *函数功能:LOAD,DCLK,DIN都为输出,DOUT为输入
 0000           ; *入口参数:无
 0000           ; *出口参数:无
 0000           ; **************************************************************************/
 0000           ; void Init_Ch452lport(void)
 0000           ; {
 0000                   .dbline 61
 0000           ;     LOAD_OUT;
 0000 A09A              sbi 0x14,0
 0002                   .dbline 62
 0002           ;       DCLK_OUT;
 0002 A19A              sbi 0x14,1
 0004                   .dbline 63
 0004           ;       DIN_OUT;
 0004 A29A              sbi 0x14,2
 0006                   .dbline -2
 0006           L1:
 0006                   .dbline 0 ; func end
 0006 0895              ret
 0008                   .dbend
 0008                   .dbfunc e Ch452l_Writecommand _Ch452l_Writecommand fV
 0008           ;              i -> R20
 0008           ;        command -> R22,R23
                        .even
 0008           _Ch452l_Writecommand::
 0008 00D0              rcall push_gset2
 000A B801              movw R22,R16
 000C                   .dbline -1
 000C                   .dbline 74
 000C           ; 
 000C           ; }
 000C           ; 
 000C           ; /**************************************************************************
 000C           ; *函数名称:向CH452L写入命令函数 
 000C           ; *函数功能:
 000C           ; *入口参数:定义一无符号整型变量存储12字节的命令字。
 000C           ; *出口参数:无
 000C           ; ***************************************************************************/
 000C           ; void Ch452l_Writecommand(unsigned int command)
 000C           ; {
 000C                   .dbline 76
 000C           ;     unsigned char i;
 000C           ;       LOAD_OUT0;     
 000C 8EEF              ldi R24,254
 000E 85BB              out 0x15,R24
 0010                   .dbline 77
 0010           ;     for(i=0;i<12;i++)
 0010 4427              clr R20
 0012 0CC0              rjmp L6
 0014           L3:
 0014                   .dbline 78
 0014           ;       {  
 0014                   .dbline 79
 0014           ;           DCLK_OUT0;
 0014 8DEF              ldi R24,253
 0016 85BB              out 0x15,R24
 0018                   .dbline 80
 0018           ;               if(command&1)
 0018 60FF              sbrs R22,0
 001A 02C0              rjmp L7
 001C                   .dbline 81
 001C           ;               {
 001C                   .dbline 82
 001C           ;                   DIN_OUT1;    
 001C AA9A              sbi 0x15,2
 001E                   .dbline 83
 001E           ;               }
 001E 02C0              rjmp L8
 0020           L7:
 0020                   .dbline 85
 0020           ;               else
 0020           ;               {
 0020                   .dbline 86
 0020           ;                   DIN_OUT0;
 0020 8BEF              ldi R24,251
 0022 85BB              out 0x15,R24
 0024                   .dbline 87
 0024           ;               }
 0024           L8:
 0024                   .dbline 88
 0024 A99A              sbi 0x15,1
 0026                   .dbline 89
 0026 7695              lsr R23
 0028 6795              ror R22
 002A                   .dbline 90
 002A           L4:
 002A                   .dbline 77
 002A 4395              inc R20
 002C           L6:
 002C                   .dbline 77
 002C 4C30              cpi R20,12
 002E 90F3              brlo L3
 0030                   .dbline 91
 0030           ;               DCLK_OUT1;
 0030           ;               command=command>>1;
 0030           ;       }
 0030           ;       LOAD_OUT1;       //LOAD上升沿加载一帧数据
 0030 A89A              sbi 0x15,0
 0032                   .dbline 92
 0032           ;       Delay_Nus(300);  //延时
 0032 0CE2              ldi R16,300
 0034 11E0              ldi R17,1
 0036 00D0              rcall _Delay_Nus
 0038                   .dbline -2
 0038           L2:
 0038 00D0              rcall pop_gset2
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbsym r i 20 c
 003C                   .dbsym r command 22 i
 003C                   .dbend
 003C                   .dbfunc e Init_Ch452lsystem _Init_Ch452lsystem fV
                        .even
 003C           _Init_Ch452lsystem::
 003C                   .dbline -1
 003C                   .dbline 102
 003C           ; }
 003C           ; 
 003C           ; /**************************************************************************
 003C           ; *函数名:初始化CH452L系统
 003C           ; *函数功能:扫描极限为8个数码管
 003C           ; *入口参数:无
 003C           ; *出口参数:无
 003C           ; **************************************************************************/
 003C           ; void Init_Ch452lsystem(void)
 003C           ; {
 003C                   .dbline 103
 003C           ;     Ch452l_Writecommand(CH452L_RESET);//芯片复位
 003C 01E0              ldi R16,1
 003E 10E0              ldi R17,0
 0040 E3DF              rcall _Ch452l_Writecommand
 0042                   .dbline 104
 0042           ;     Ch452l_Writecommand(CONFIG_DISPLAY|0x00f0);//8为显示,BCD译码
 0042 00EF              ldi R16,1520
 0044 15E0              ldi R17,5
 0046 E0DF              rcall _Ch452l_Writecommand
 0048                   .dbline 105
 0048           ;       Ch452l_Writecommand(CONFIG_SYSTEM|1);//开启显示
 0048 01E0              ldi R16,1025
 004A 14E0              ldi R17,4
 004C DDDF              rcall _Ch452l_Writecommand
 004E                   .dbline -2
 004E           L9:
 004E                   .dbline 0 ; func end
 004E 0895              ret
 0050                   .dbend

⌨️ 快捷键说明

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