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

📄 smg12232zk.lst

📁 m48,8兆,smg12232带16*16汉字库点阵液晶屏驱动程序,有详细注视,
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    0022 EFCF      LDI	R28,0xFF
    0023 E0D2      LDI	R29,2
    0024 BFCD      OUT	0x3D,R28
    0025 BFDE      OUT	0x3E,R29
    0026 51C0      SUBI	R28,0x10
    0027 40D0      SBCI	R29,0
    0028 EA0A      LDI	R16,0xAA
    0029 8308      STD	Y+0,R16
    002A 2400      CLR	R0
    002B E1E0      LDI	R30,0x10
    002C E0F1      LDI	R31,1
    002D E011      LDI	R17,1
    002E 32E4      CPI	R30,0x24
    002F 07F1      CPC	R31,R17
    0030 F011      BEQ	0x0033
    0031 9201      ST	R0,Z+
    0032 CFFB      RJMP	0x002E
    0033 8300      STD	Z+0,R16
    0034 E3E4      LDI	R30,0x34
    0035 E0F0      LDI	R31,0
    0036 E0A0      LDI	R26,0
    0037 E0B1      LDI	R27,1
    0038 E010      LDI	R17,0
    0039 34E4      CPI	R30,0x44
    003A 07F1      CPC	R31,R17
    003B F021      BEQ	0x0040
    003C 95C8      LPM
    003D 9631      ADIW	R30,1
    003E 920D      ST	R0,X+
    003F CFF9      RJMP	0x0039
    0040 D055      RCALL	_main
_exit:
    0041 CFFF      RJMP	_exit
FILE: D:\SOURCE~1\avr\avr48\smg12232zk\initrialm48.h
(0001) //ICC-AVR application builder : 2007-7-5 15:30:50
(0002) // Target : M48
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) void Port_Init(void);
(0006) void Init_Devices(void);
(0007) 
(0008) 
(0009) void Port_Init(void)
(0010) {
(0011) 	PORTB = 0xFF;
_Port_Init:
    0042 EF8F      LDI	R24,0xFF
    0043 B985      OUT	0x05,R24
(0012) 	DDRB  = 0xFF;
    0044 B984      OUT	0x04,R24
(0013) 	PORTC = 0x6F; //m103 output only
    0045 E68F      LDI	R24,0x6F
    0046 B988      OUT	0x08,R24
(0014) 	DDRC  = 0x6F;
    0047 B987      OUT	0x07,R24
(0015) 	PORTD = 0xFF;
    0048 EF8F      LDI	R24,0xFF
    0049 B98B      OUT	0x0B,R24
(0016) 	DDRD  = 0xFF;
    004A B98A      OUT	0x0A,R24
    004B 9508      RET
(0017) }
(0018) 
(0019) //call this routine to initialize all peripherals
(0020) void Init_Devices(void)
(0021) {
(0022) 	//stop errant interrupts until set up
(0023) 	CLI(); //disable all interrupts
_Init_Devices:
    004C 94F8      BCLR	7
(0024) 	Port_Init();
    004D DFF4      RCALL	_Port_Init
(0025) 
(0026) 
(0027) 	SEI(); //re-enable interrupts
    004E 9478      BSET	7
    004F 9508      RET
FILE: D:\SOURCE~1\avr\avr48\smg12232zk\delay.h
(0001) #ifndef	_DELAY_H
(0002) #define	_DELAY_H
(0003) 
(0004) // mcu:avr   crystal=8MHz
(0005) 
(0006) /**************************************************************
(0007) **函数功能:延时1us
(0008) **输入参数:无
(0009) **返回值:无
(0010) **在本函数外定义变量:无
(0011) **调用的函数:NOP()
(0012) **************************************************************/
(0013) void Delay_1us(void);
(0014) 
(0015) /**************************************************************
(0016) **函数功能:us级延时
(0017) **输入参数:xus:延时us数
(0018) **返回值:无
(0019) **在本函数外定义变量:无
(0020) **调用的函数:Delay_1us()
(0021) **************************************************************/
(0022) void Delay_Us(unsigned char xus);
(0023) 
(0024) /**************************************************************
(0025) **函数功能:延时1ms
(0026) **输入参数:无
(0027) **返回值:无
(0028) **在本函数外定义变量:无
(0029) **调用的函数:NOP()
(0030) **************************************************************/
(0031) void Delay_1ms(void);
(0032) 
(0033) /**************************************************************
(0034) **函数功能:ms级延时
(0035) **输入参数:xms:延时ms数
(0036) **返回值:无
(0037) **在本函数外定义变量:无
(0038) **调用的函数:Delay_1ms()
(0039) **************************************************************/
(0040) void Delay_Ms(unsigned int xms);
(0041) 
(0042) /**************************************************************
(0043) **函数功能:10us级延时
(0044) **输入参数:x10us:延时x10us数
(0045) **返回值:无
(0046) **在本函数外定义变量:无
(0047) **调用的函数:无
(0048) **************************************************************/
(0049) void Delay_X10us(Word x10us);
(0050) 
(0051) 
(0052) void Delay_1us()
(0053) {
(0054) 	NOP();
_Delay_1us:
    0050 0000      NOP
    0051 9508      RET
_Delay_Us:
  i                    --> R20
  xus                  --> R22
    0052 D21C      RCALL	push_gset2
    0053 2F60      MOV	R22,R16
(0055) }
(0056) 
(0057) void Delay_Us(unsigned char xus)//crystal=8MHz
(0058) {
(0059) 	unsigned char i;
(0060) 	for(i=0;i<xus;i++)
    0054 2744      CLR	R20
    0055 C002      RJMP	0x0058
(0061) 		Delay_1us();
    0056 DFF9      RCALL	_Delay_1us
    0057 9543      INC	R20
    0058 1746      CP	R20,R22
    0059 F3E0      BCS	0x0056
    005A D20A      RCALL	pop_gset2
    005B 9508      RET
(0062) }
(0063) 
(0064) void Delay_1ms(void)//crystal=8MHz
(0065) {
(0066) 	unsigned int i;
(0067) 	for(i=0;i<1142;i++)
_Delay_1ms:
  i                    --> R16
    005C 2700      CLR	R16
    005D 2711      CLR	R17
    005E C002      RJMP	0x0061
    005F 5F0F      SUBI	R16,0xFF
    0060 4F1F      SBCI	R17,0xFF
    0061 3706      CPI	R16,0x76
    0062 E0E4      LDI	R30,4
    0063 071E      CPC	R17,R30
    0064 F3D0      BCS	0x005F
    0065 9508      RET
_Delay_Ms:
  i                    --> R20
  j                    --> R22
  xms                  --> R16
    0066 D208      RCALL	push_gset2
(0068) 		;
(0069) }
(0070) 
(0071) void Delay_Ms(Word xms) //crystal=8MHz
(0072) {
(0073) 	Word i,j; //variable:declare Word
(0074) 	for(i=0; i<xms; i++)
    0067 2744      CLR	R20
    0068 2755      CLR	R21
    0069 C014      RJMP	0x007E
(0075) 		for(j=0; j<498;j++)
    006A 2766      CLR	R22
    006B 2777      CLR	R23
    006C C00B      RJMP	0x0078
(0076) 		{
(0077) 			NOP();
    006D 0000      NOP
(0078) 			NOP();
    006E 0000      NOP
(0079) 			NOP();
    006F 0000      NOP
(0080) 			NOP();
    0070 0000      NOP
(0081) 			NOP();
    0071 0000      NOP
(0082) 			NOP();
    0072 0000      NOP
(0083) 			NOP();
    0073 0000      NOP
(0084) 			NOP();
    0074 0000      NOP
(0085) 			NOP();
    0075 0000      NOP
    0076 5F6F      SUBI	R22,0xFF
    0077 4F7F      SBCI	R23,0xFF
    0078 3F62      CPI	R22,0xF2
    0079 E0E1      LDI	R30,1
    007A 077E      CPC	R23,R30
    007B F388      BCS	0x006D
    007C 5F4F      SUBI	R20,0xFF
    007D 4F5F      SBCI	R21,0xFF
    007E 1740      CP	R20,R16
    007F 0751      CPC	R21,R17
    0080 F348      BCS	0x006A
    0081 D1E3      RCALL	pop_gset2
    0082 9508      RET
_Delay_X10us:
  i                    --> R20
  j                    --> R22
  x10us                --> R16
    0083 D1EB      RCALL	push_gset2
(0086) 		}
(0087) }
(0088) 
(0089) void Delay_X10us(Word x10us)//crystal=8MHz
(0090) {
(0091) 	Word i;Byte j; //variable:declare Word
(0092) 	for(i=0; i<x10us; i++)
    0084 2744      CLR	R20
    0085 2755      CLR	R21
    0086 C00A      RJMP	0x0091
(0093) 	{
(0094) 			for(j=0;j<2;j++)
    0087 2766      CLR	R22
    0088 C004      RJMP	0x008D
(0095) 			{
(0096) 			 	NOP();
    0089 0000      NOP
(0097) 				NOP();
    008A 0000      NOP
(0098) 				NOP();
    008B 0000      NOP
    008C 9563      INC	R22
    008D 3062      CPI	R22,2
    008E F3D0      BCS	0x0089
    008F 5F4F      SUBI	R20,0xFF
    0090 4F5F      SBCI	R21,0xFF
    0091 1740      CP	R20,R16
    0092 0751      CPC	R21,R17
    0093 F398      BCS	0x0087
    0094 D1D0      RCALL	pop_gset2
    0095 9508      RET
_main:
  i                    --> Y+6
    0096 9725      SBIW	R28,5
FILE: D:\SOURCE~1\avr\avr48\smg12232zk\main.c
(0001)                 
(0002) /******************  SMG12232ZK串行接口程序******************
(0003) *ICC-AVR application builder : 2007-10-18
(0004) * Target : M8
(0005) * Crystal: 8.0000Mhz
(0006) 
(0007) * Title : Accessing to LCD-CONTROLLER                                   
(0008) * Date :  2007-10-18                                                      
(0009) * Support QQ:  16693799     
(0010) * Create by :	Joe Yuan      
(0011) * DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER */ 
(0012)                                                                       
(0013) 
(0014) 
(0015) #include <iom48v.h>		//ATMEGA48头文件
(0016) #include <macros.h>		//宏定义
(0017) #include "initrialm48.h"//初始化mcu
(0018) #include "define.h"		//端口定义
(0019) #include "delay.h"		//延时程序
(0020) 
(0021) 
(0022) #define LCD_PORT PORTD
(0023) #define LCD_DDR	DDRD
(0024) 	#define LCD_SCLK PD0
(0025) 	#define LCD_CS	PD2
(0026) 	#define LCD_STD PD1
(0027) 
(0028) 
(0029) #define LCD_CS_H LCD_PORT |= BIT(LCD_CS)
(0030) #define LCD_CS_L LCD_PORT &=~ BIT(LCD_CS)
(0031) #define LCD_STD_H LCD_PORT |= BIT(LCD_STD)
(0032) #define LCD_STD_L LCD_PORT &=~ BIT(LCD_STD)
(0033) #define LCD_SCLK_H LCD_PORT |= BIT(LCD_SCLK)
(0034) #define LCD_SCLK_L LCD_PORT &=~ BIT(LCD_SCLK)
(0035) 
(0036) 
(0037) 
(0038) void Send_8bit(Word x);//串行发送8位数据
(0039) void Lcd_Write(Byte start,Byte data);//模块写入子程序
(0040) void Lcd_Reset(void);//模块复位子程序
(0041) void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer);//xpos为列数,ypos为行数,num字符串长度
(0042) void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num);//xpos为列数,ypos为行数,num字符串长度		
(0043) 
(0044) Byte lcd_buf[10];//数据显示数组
(0045) Byte *pointer;
(0046) Long lcd_data1;
(0047) Long lcd_data2;
(0048) 
(0049) 
(0050) void main(void)
(0051) {
(0052) 	Word i;
(0053)  	Init_Devices();
    0097 DFB4      RCALL	_Init_Devices
(0054) 	Lcd_Reset();
    0098 D109      RCALL	_Lcd_Reset
(0055) 	Hzk_Dis_Words(1,1,"袁自刚:16693799");	
    0099 E080      LDI	R24,0
    009A E091      LDI	R25,1
    009B 8399      STD	Y+1,R25
    009C 8388      STD	Y+0,R24
    009D E021      LDI	R18,1
    009E E001      LDI	R16,1
    009F D059      RCALL	_Hzk_Dis_Words
    00A0 C055      RJMP	0x00F6
(0056) 	while(1)
(0057) 	{	
(0058) 		Hzk_Dis_Data(2,1,lcd_data1,7);	
    00A1 E087      LDI	R24,7
    00A2 838C      STD	Y+4,R24
    00A3 90400116  LDS	R4,lcd_data1+2
    00A5 90500117  LDS	R5,lcd_data1+3
    00A7 90200114  LDS	R2,lcd_data1
    00A9 90300115  LDS	R3,lcd_data1+1
    00AB 8228      STD	Y+0,R2
    00AC 8239      STD	Y+1,R3
    00AD 824A      STD	Y+2,R4
    00AE 825B      STD	Y+3,R5
    00AF E021      LDI	R18,1
    00B0 E002      LDI	R16,2
    00B1 D079      RCALL	_Hzk_Dis_Data
(0059) 		lcd_data1 ++;
    00B2 E041      LDI	R20,1
    00B3 E050      LDI	R21,0
    00B4 E060      LDI	R22,0
    00B5 E070      LDI	R23,0
    00B6 90400116  LDS	R4,lcd_data1+2
    00B8 90500117  LDS	R5,lcd_data1+3
    00BA 90200114  LDS	R2,lcd_data1
    00BC 90300115  LDS	R3,lcd_data1+1
    00BE 0E24      ADD	R2,R20
    00BF 1E35      ADC	R3,R21
    00C0 1E46      ADC	R4,R22
    00C1 1E57      ADC	R5,R23
    00C2 92300115  STS	lcd_data1+1,R3
    00C4 92200114  STS	lcd_data1,R2
    00C6 92500117  STS	lcd_data1+3,R5
    00C8 92400116  STS	lcd_data1+2,R4
(0060) 
(0061) 		Hzk_Dis_Data(2,5,lcd_data2,7);	
    00CA E087      LDI	R24,7
    00CB 838C      STD	Y+4,R24
    00CC 90400112  LDS	R4,lcd_data2+2
    00CE 90500113  LDS	R5,lcd_data2+3
    00D0 90200110  LDS	R2,lcd_data2
    00D2 90300111  LDS	R3,lcd_data2+1
    00D4 8228      STD	Y+0,R2
    00D5 8239      STD	Y+1,R3
    00D6 824A      STD	Y+2,R4
    00D7 825B      STD	Y+3,R5
    00D8 E025      LDI	R18,5
    00D9 E002      LDI	R16,2
    00DA D050      RCALL	_Hzk_Dis_Data
(0062) 		lcd_data2 ++;
    00DB E041      LDI	R20,1
    00DC E050      LDI	R21,0
    00DD E060      LDI	R22,0
    00DE E070      LDI	R23,0
    00DF 90400112  LDS	R4,lcd_data2+2
    00E1 90500113  LDS	R5,lcd_data2+3
    00E3 90200110  LDS	R2,lcd_data2
    00E5 90300111  LDS	R3,lcd_data2+1
    00E7 0E24      ADD	R2,R20
    00E8 1E35      ADC	R3,R21
    00E9 1E46      ADC	R4,R22
    00EA 1E57      ADC	R5,R23
    00EB 92300111  STS	lcd_data2+1,R3
    00ED 92200110  STS	lcd_data2,R2
    00EF 92500113  STS	lcd_data2+3,R5
    00F1 92400112  STS	lcd_data2+2,R4
(0063) 		Delay_Ms(300);
    00F3 E20C      LDI	R16,0x2C
    00F4 E011      LDI	R17,1
    00F5 DF70      RCALL	_Delay_Ms
    00F6 CFAA      RJMP	0x00A1
    00F7 9625      ADIW	R28,5
    00F8 9508      RET
_Hzk_Dis_Words:
  ram_address          --> R10
  i                    --> R20
  lcd_pointer          --> R22
  xpos                 --> R12
  ypos                 --> R14
    00F9 D16F      RCALL	push_gset5
    00FA 2EC2      MOV	R12,R18
    00FB 2EE0      MOV	R14,R16
    00FC 856A      LDD	R22,Y+10
    00FD 857B      LDD	R23,Y+11
(0064) 	}	
(0065) 
(0066) }
(0067) /****************发送汉字子程序******************
(0068) ** xpos为列数,ypos为行数
(0069) **lcd_pointer为字符串首地址
(0070) *********************************************************/
(0071) void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数,num字符串长度									
(0072) {
(0073) 	Byte i=0,ram_address;//ram_address:首地址
    00FE 2744      CLR	R20
    00FF C001      RJMP	0x0101
(0074) 	//首先判断字符串得长度
(0075) 	while(*(lcd_pointer+i) != '\0')//字符串长度
(0076) 	{
(0077) 		i++;
    0100 9543      INC	R20
    0101 2FE4      MOV	R30,R20
    0102 27FF      CLR	R31
    0103 0FE6      ADD	R30,R22
    0104 1FF7      ADC	R31,R23
    0105 8020      LDD	R2,Z+0
    0106 2022      TST	R2
    0107 F7C1      BNE	0x0100
(0078) 	}//i=字符串长度	
(0079) 	if(i>15)
    0108 E08F      LDI	R24,0xF
    0109 1784      CP	R24,R20
    010A F408      BCC	0x010C
(0080) 	{
(0081) 		i=15;
    010B E04F      LDI	R20,0xF
(0082) 	}
(0083) 	if(ypos==1)
    010C 2D8E      MOV	R24,R14
    010D 3081      CPI	R24,1
    010E F429      BNE	0x0114
(0084) 	{
(0085) 		ram_address = 0x80+xpos-1;
    010F 2D8C      MOV	R24,R12
    0110 5880      SUBI	R24,0x80
    0111 5081      SUBI	R24,1
    0112 2EA8      MOV	R10,R24
(0086) 	}
    0113 C007      RJMP	0x011B
(0087) 	else if(ypos==2)
    0114 2D8E      MOV	R24,R14
    0115 3082      CPI	R24,2
    0116 F421      BNE	0x011B
(0088) 	{
(0089) 		ram_address = 0x90+xpos-1;
    0117 2D8C      MOV	R24,R12
    0118 5780      SUBI	R24,0x70
    0119 5081      SUBI	R24,1
    011A 2EA8      MOV	R10,R24
(0090) 	}
(0091) 	Lcd_Write(0xf8,ram_address);
    011B 2D2A      MOV	R18,R10
    011C EF08      LDI	R16,0xF8
    011D D099      RCALL	_Lcd_Write
(0092) 	for(;i>0;i--)
    011E C007      RJMP	0x0126

⌨️ 快捷键说明

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