📄 ch452l_driver.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 + -