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

📄 ch452l_driver.s

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

⌨️ 快捷键说明

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