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

📄 ch452ldriver.s

📁 ch452的数码管和键盘驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module ch452ldriver.c
	.area text(rom, con, rel)
	.dbfile G:\CH452L\ch452ldriver.c
	.dbfunc e Init_Ch452lport _Init_Ch452lport fI
	.even
_Init_Ch452lport::
	.dbline -1
	.dbline 71
; #include<iom8v.h>
; #include<macros.h>
; #include"delay.h"
; 
; unsigned flag;
; 
; /************************************************************************
; *说明:运行与CH452L的4线模式,MCU使用ATMEGA8L,MCU与CH452L引脚连接如下:
;                    LOAD    PC0      
; 				   DCLK    PC1
; 				   DIN     PC2
; 				   DOUT    PD2()INT0
; LOAD,DCLK,DIN都为输出,DOUT为输入,若要使用其它IO口,只需更改如下宏定义即可
; *************************************************************************/
; #define PC0 0
; #define PC1 1
; #define PC2 2
; #define PD2 2
; 
; #define LOAD_OUT DDRC |= BIT(PC0)
; #define LOAD_OUT0 PORTC &= ~BIT(PC0)
; #define LOAD_OUT1 PORTC |= BIT(PC0)
; 
; #define DCLK_OUT DDRC |= BIT(PC1)
; #define DCLK_OUT0 PORTC &= ~BIT(PC1)
; #define DCLK_OUT1 PORTC |= BIT(PC1)
; 
; #define DIN_OUT  DDRC  |= BIT(PC2)
; #define DIN_OUT0 PORTC &= ~BIT(PC2)
; #define DIN_OUT1 PORTC |= BIT(PC2)
; 
; #define DOUT_IN DDRD &= ~BIT(PD2)
; #define DOUT_OUT0 PORTD &= ~BIT(PD2)
; #define DOUT_OUT1 PORTD |= BIT(PD2)
; #define DOUT_PIN PIND & 0x04
; 
; /*************************************************************************
; *宏定义CH452L系统命令
; *************************************************************************/
; #define RESET_CHIP 0x0201
; #define OPEN_DISPLAY 0x0401     //开启显示
; #define OPEN_KEYBOARD 0x0422    //开启键盘   
; #define OPEN_DISPLAY_KEYBOARD 0x0423    //开启显示和键盘
; #define DATA_LEFT 0x0300        //数据左移
; #define DATA_RIGHT 0x0302       //数据右移
; #define LEFT_CIRCLE 0x0301      //数据左循环
; #define RIGHT_CIRCLE 0x0303     //数据右循环
; #define READ_KEYCODE 0x0700     //读取按键代码
; 
; 
; /*************************************************************************
; *宏定义CH452L加载数据DIG7~DIG0
; * 说明:若要使用小数点,则只需将第7位置为1即可,例如0x0f80
; *************************************************************************/
; #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为输入
; *入口参数:无
; *出口参数:无
; **************************************************************************/
; int Init_Ch452lport(void)
; {
	.dbline 72
;     LOAD_OUT;
	sbi 0x14,0
	.dbline 73
; 	LOAD_OUT1;
	sbi 0x15,0
	.dbline 75
; 	
; 	DCLK_OUT;
	sbi 0x14,1
	.dbline 76
; 	DCLK_OUT1;
	sbi 0x15,1
	.dbline 78
; 	
; 	DIN_OUT;
	sbi 0x14,2
	.dbline 79
; 	DIN_OUT1;
	sbi 0x15,2
	.dbline 81
; 	
; 	DOUT_IN;
	cbi 0x11,2
	.dbline 82
; 	DOUT_OUT1;
	sbi 0x12,2
	.dbline 84
; 	
; 	Delay_Nus(30);  //延时
	ldi R16,30
	ldi R17,0
	rcall _Delay_Nus
	.dbline 85
;     return 0x31;
	ldi R16,49
	ldi R17,0
	.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 95
; }
; 
; /**************************************************************************
; *函数名称:向CH452L写入命令函数 
; *函数功能:
; *入口参数:定义一无符号整型变量存储12字节的命令字。
; *出口参数:无
; ***************************************************************************/
; void Ch452l_Writecommand(unsigned int command)
; {
	.dbline 98
;     unsigned char i;
; 	
; 	LOAD_OUT0;
	cbi 0x15,0
	.dbline 99
; 	Delay_Nus(2);
	ldi R16,2
	ldi R17,0
	rcall _Delay_Nus
	.dbline 100
;     for(i=0;i<12;i++)
	clr R20
	rjmp L6
L3:
	.dbline 101
; 	{  
	.dbline 102
; 	    DCLK_OUT0;
	cbi 0x15,1
	.dbline 103
; 		if(command&0x0001==0x0001)
	sbrs R22,0
	rjmp L7
	.dbline 104
; 		{
	.dbline 105
; 		    DIN_OUT1;    
	sbi 0x15,2
	.dbline 106
; 		}
	rjmp L8
L7:
	.dbline 108
; 		else
; 		{
	.dbline 109
; 		    DIN_OUT0;
	cbi 0x15,2
	.dbline 110
; 		}
L8:
	.dbline 111
	lsr R23
	ror R22
	.dbline 112
	sbi 0x15,1
	.dbline 113
L4:
	.dbline 100
	inc R20
L6:
	.dbline 100
	cpi R20,12
	brlo L3
	.dbline 114
; 		command=command>>1;
; 		DCLK_OUT1;
; 	}
; 	LOAD_OUT1;       //LOAD上升沿加载一帧数据
	sbi 0x15,0
	.dbline 115
; 	DIN_OUT1;
	sbi 0x15,2
	.dbline 116
; 	DCLK_OUT1;	
	sbi 0x15,1
	.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 fI
	.even
_Init_Ch452lsystem::
	.dbline -1
	.dbline 144
; }
; 
; /**************************************************************************
; *函数名:Init_Ch452lsystem(void)
; *函数功能:初始化CH452L
; *命令说明:
; *(1)采用BCD译码方式显示设置显示参数命令:
; *       命令     显示位数
; *      0x0580       8
; *      0x0590       1
; *      0x05a0       2
; *      0x05b0       3     
; *      0x05c0       4
; *      0x05d0       5
; *      0x05e0       6
; *      0x05f0       7
; *(2)OPEN_DISPLAY_KEYBOARD开启显示和键盘命令
; *        命令        开启             输出中断方式
; *      0x0401        显示             无(无键盘功能下不考虑)
; *      0x0402        键盘             低电平中断(不推荐用于测试)
; *      0x0422        键盘             边缘中断
; *      0x0403        显示和键盘       低电平中断(不推荐使用)
; *      0x0423        显示和键盘       边缘中断
; *入口参数:无
; *出口参数:无
; **************************************************************************/
; int Init_Ch452lsystem(void)
; {
	.dbline 145
;     Ch452l_Writecommand(RESET_CHIP);//芯片复位
	ldi R16,513
	ldi R17,2
	rcall _Ch452l_Writecommand
	.dbline 146
; 	Delay_Nus(40);
	ldi R16,40
	ldi R17,0
	rcall _Delay_Nus
	.dbline 148
;     
; 	Ch452l_Writecommand(OPEN_DISPLAY_KEYBOARD);//开启显示和键盘,边缘中断
	ldi R16,1059
	ldi R17,4
	rcall _Ch452l_Writecommand
	.dbline 149
; 	Delay_Nus(5);
	ldi R16,5
	ldi R17,0
	rcall _Delay_Nus
	.dbline 150
; 	return 0x32;
	ldi R16,50
	ldi R17,0
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Display_Ch452lBCD _Display_Ch452lBCD fV
;              i -> <dead>
;              p -> R20,R21
;              n -> R22
	.even
_Display_Ch452lBCD::
	rcall push_gset2
	movw R20,R18
	mov R22,R16
	.dbline -1
	.dbline 162
; }
; 
; /***************************************************************************
; *函数名:
; *功能:
; *入口参数:
;  n   要显示的数码管的位数 
;  *p  要显示的数码管的值,BCD码,在显示前将要显示的数码管的BCD码存入该数组
; *出口参数:
; ****************************************************************************/
; void Display_Ch452lBCD(unsigned char n,unsigned char *p)
; {
	.dbline 164
;     unsigned char i;
; 	switch(n)
	clr R23
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L14
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L15
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	breq L16
	cpi R22,4
	ldi R30,0
	cpc R23,R30
	breq L17
	cpi R22,5
	ldi R30,0
	cpc R23,R30
	breq L18
	cpi R22,6
	ldi R30,0
	cpc R23,R30
	brne X1
	rjmp L19
X1:
	cpi R22,7
	ldi R30,0
	cpc R23,R30
	brne X2
	rjmp L20
X2:
	cpi R22,8
	ldi R30,0
	cpc R23,R30
	brne X3
	rjmp L21
X3:
	rjmp L12
X0:
	.dbline 165
; 	{
L14:
	.dbline 167
; 	    case(1):
; 		    Ch452l_Writecommand(0x0590);//1位显示,BCD译码
	ldi R16,1424
	ldi R17,5
	rcall _Ch452l_Writecommand
	.dbline 168
; 			Delay_Nus(3);
	ldi R16,3
	ldi R17,0
	rcall _Delay_Nus
	.dbline 169
; 			break;
	rjmp L12
L15:
	.dbline 171
; 		case(2):
; 		    Ch452l_Writecommand(0x05a0);//2位显示,BCD译码
	ldi R16,1440
	ldi R17,5
	rcall _Ch452l_Writecommand
	.dbline 172
; 			Delay_Nus(3);
	ldi R16,3
	ldi R17,0
	rcall _Delay_Nus
	.dbline 173
; 			break;
	rjmp L12
L16:
	.dbline 175
; 		case(3):
; 		    Ch452l_Writecommand(0x05b0);//3位显示,BCD译码
	ldi R16,1456
	ldi R17,5
	rcall _Ch452l_Writecommand
	.dbline 176
; 			Delay_Nus(3);
	ldi R16,3
	ldi R17,0
	rcall _Delay_Nus
	.dbline 177
; 			break;
	rjmp L12
L17:
	.dbline 179
; 		case(4):
; 		    Ch452l_Writecommand(0x05c0);//4位显示,BCD译码
	ldi R16,1472
	ldi R17,5
	rcall _Ch452l_Writecommand
	.dbline 180
; 			Delay_Nus(3);
	ldi R16,3
	ldi R17,0
	rcall _Delay_Nus
	.dbline 181
; 			break;

⌨️ 快捷键说明

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