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

📄 main.lis

📁 m48,8兆,smg12232带16*16汉字库点阵液晶屏驱动程序,有详细注视,
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\SOURCE~1\avr\avr48\smg12232zk/initrialm48.h
 0000                   .dbfunc e Port_Init _Port_Init fV
                        .even
 0000           _Port_Init::
 0000                   .dbline -1
 0000                   .dbline 10
 0000           ;                 
 0000           ; /******************  SMG12232ZK串行接口程序******************
 0000           ; *ICC-AVR application builder : 2007-10-18
 0000           ; * Target : M8
 0000           ; * Crystal: 8.0000Mhz
 0000           ; 
 0000           ; * Title : Accessing to LCD-CONTROLLER                                   
 0000           ; * Date :  2007-10-18                                                      
 0000           ; * Support QQ:  16693799     
 0000           ; * Create by : Joe Yuan      
 0000                   .dbline 11
 0000           ; * DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER */ 
 0000 8FEF              ldi R24,255
 0002 85B9              out 0x5,R24
 0004                   .dbline 12
 0004           ;                                                                       
 0004 84B9              out 0x4,R24
 0006                   .dbline 13
 0006           ; 
 0006 8FE6              ldi R24,111
 0008 88B9              out 0x8,R24
 000A                   .dbline 14
 000A           ; 
 000A 87B9              out 0x7,R24
 000C                   .dbline 15
 000C           ; #include <iom48v.h>           //ATMEGA48头文件
 000C 8FEF              ldi R24,255
 000E 8BB9              out 0xb,R24
 0010                   .dbline 16
 0010           ; #include <macros.h>           //宏定义
 0010 8AB9              out 0xa,R24
 0012                   .dbline -2
 0012           L1:
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014                   .dbend
 0014                   .dbfunc e Init_Devices _Init_Devices fV
                        .even
 0014           _Init_Devices::
 0014                   .dbline -1
 0014                   .dbline 21
 0014           ; #include "initrialm48.h"//初始化mcu
 0014           ; #include "define.h"           //端口定义
 0014           ; #include "delay.h"            //延时程序
 0014           ; 
 0014           ; 
 0014                   .dbline 23
 0014           ; #define LCD_PORT PORTD
 0014           ; #define LCD_DDR       DDRD
 0014 F894              cli
 0016                   .dbline 24
 0016           ;       #define LCD_SCLK PD0
 0016 F4DF              rcall _Port_Init
 0018                   .dbline 27
 0018           ;       #define LCD_CS  PD2
 0018           ;       #define LCD_STD PD1
 0018           ; 
 0018 7894              sei
 001A                   .dbline -2
 001A           L2:
 001A                   .dbline 0 ; func end
 001A 0895              ret
 001C                   .dbend
 001C                   .dbfile D:\SOURCE~1\avr\avr48\smg12232zk/delay.h
 001C                   .dbfunc e Delay_1us _Delay_1us fV
                        .even
 001C           _Delay_1us::
 001C                   .dbline -1
 001C                   .dbline 53
 001C           ; 
 001C           ; #define LCD_CS_H LCD_PORT |= BIT(LCD_CS)
 001C           ; #define LCD_CS_L LCD_PORT &=~ BIT(LCD_CS)
 001C           ; #define LCD_STD_H LCD_PORT |= BIT(LCD_STD)
 001C           ; #define LCD_STD_L LCD_PORT &=~ BIT(LCD_STD)
 001C           ; #define LCD_SCLK_H LCD_PORT |= BIT(LCD_SCLK)
 001C           ; #define LCD_SCLK_L LCD_PORT &=~ BIT(LCD_SCLK)
 001C           ; 
 001C           ; 
 001C           ; 
 001C           ; void Send_8bit(Word x);//串行发送8位数据
 001C           ; void Lcd_Write(Byte start,Byte data);//模块写入子程序
 001C           ; void Lcd_Reset(void);//模块复位子程序
 001C           ; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer);//xpos为列数,ypos为行数,num字符串长度
 001C           ; void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num);//xpos为列数,ypos为行数,num字符串长度               
 001C           ; 
 001C           ; Byte lcd_buf[10];//数据显示数组
 001C           ; Byte *pointer;
 001C           ; Long lcd_data1;
 001C           ; Long lcd_data2;
 001C           ; 
 001C           ; 
 001C           ; void main(void)
 001C           ; {
 001C           ;       Word i;
 001C           ;       Init_Devices();
 001C                   .dbline 54
 001C           ;       Lcd_Reset();
 001C 0000              nop
 001E                   .dbline -2
 001E           L3:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbend
 0020                   .dbfunc e Delay_Us _Delay_Us fV
 0020           ;              i -> R20
 0020           ;            xus -> R22
                        .even
 0020           _Delay_Us::
 0020 00D0              rcall push_gset2
 0022 602F              mov R22,R16
 0024                   .dbline -1
 0024                   .dbline 58
 0024           ;       Hzk_Dis_Words(1,1,"袁自刚:16693799");   
 0024           ;       while(1)
 0024           ;       {       
 0024           ;               Hzk_Dis_Data(2,1,lcd_data1,7);  
 0024                   .dbline 60
 0024           ;               lcd_data1 ++;
 0024           ; 
 0024 4427              clr R20
 0026 02C0              rjmp L8
 0028           L5:
 0028                   .dbline 61
 0028 F9DF              rcall _Delay_1us
 002A           L6:
 002A                   .dbline 60
 002A 4395              inc R20
 002C           L8:
 002C                   .dbline 60
 002C 4617              cp R20,R22
 002E E0F3              brlo L5
 0030                   .dbline -2
 0030           L4:
 0030 00D0              rcall pop_gset2
 0032                   .dbline 0 ; func end
 0032 0895              ret
 0034                   .dbsym r i 20 c
 0034                   .dbsym r xus 22 c
 0034                   .dbend
 0034                   .dbfunc e Delay_1ms _Delay_1ms fV
 0034           ;              i -> R16,R17
                        .even
 0034           _Delay_1ms::
 0034                   .dbline -1
 0034                   .dbline 65
 0034           ;               Hzk_Dis_Data(2,5,lcd_data2,7);  
 0034           ;               lcd_data2 ++;
 0034           ;               Delay_Ms(300);
 0034           ;       }       
 0034           ; 
 0034                   .dbline 67
 0034           ; }
 0034           ; /****************发送汉字子程序******************
 0034 0027              clr R16
 0036 1127              clr R17
 0038 02C0              rjmp L13
 003A           L10:
 003A                   .dbline 68
 003A           L11:
 003A                   .dbline 67
 003A 0F5F              subi R16,255  ; offset = 1
 003C 1F4F              sbci R17,255
 003E           L13:
 003E                   .dbline 67
 003E 0637              cpi R16,118
 0040 E4E0              ldi R30,4
 0042 1E07              cpc R17,R30
 0044 D0F3              brlo L10
 0046                   .dbline -2
 0046           L9:
 0046                   .dbline 0 ; func end
 0046 0895              ret
 0048                   .dbsym r i 16 i
 0048                   .dbend
 0048                   .dbfunc e Delay_Ms _Delay_Ms fV
 0048           ;              i -> R20,R21
 0048           ;              j -> R22,R23
 0048           ;            xms -> R16,R17
                        .even
 0048           _Delay_Ms::
 0048 00D0              rcall push_gset2
 004A                   .dbline -1
 004A                   .dbline 72
 004A           ; ** xpos为列数,ypos为行数
 004A           ; **lcd_pointer为字符串首地址
 004A           ; *********************************************************/
 004A           ; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数,num字符串长度                                                                        
 004A           ; {
 004A                   .dbline 74
 004A           ;       Byte i=0,ram_address;//ram_address:首地址
 004A           ;       //首先判断字符串得长度
 004A 4427              clr R20
 004C 5527              clr R21
 004E 14C0              rjmp L18
 0050           L15:
 0050                   .dbline 75
 0050           ;       while(*(lcd_pointer+i) != '\0')//字符串长度
 0050 6627              clr R22
 0052 7727              clr R23
 0054 0BC0              rjmp L22
 0056           L19:
 0056                   .dbline 76
 0056                   .dbline 77
 0056 0000              nop
 0058                   .dbline 78
 0058 0000              nop
 005A                   .dbline 79
 005A 0000              nop
 005C                   .dbline 80
 005C 0000              nop
 005E                   .dbline 81
 005E 0000              nop
 0060                   .dbline 82
 0060 0000              nop
 0062                   .dbline 83
 0062 0000              nop
 0064                   .dbline 84
 0064 0000              nop
 0066                   .dbline 85
 0066 0000              nop
 0068                   .dbline 86
 0068           L20:
 0068                   .dbline 75
 0068 6F5F              subi R22,255  ; offset = 1
 006A 7F4F              sbci R23,255
 006C           L22:
 006C                   .dbline 75
 006C 623F              cpi R22,242
 006E E1E0              ldi R30,1
 0070 7E07              cpc R23,R30
 0072 88F3              brlo L19
 0074           L16:
 0074                   .dbline 74
 0074 4F5F              subi R20,255  ; offset = 1
 0076 5F4F              sbci R21,255
 0078           L18:
 0078                   .dbline 74
 0078 4017              cp R20,R16
 007A 5107              cpc R21,R17
 007C 48F3              brlo L15
 007E                   .dbline -2
 007E           L14:
 007E 00D0              rcall pop_gset2
 0080                   .dbline 0 ; func end
 0080 0895              ret
 0082                   .dbsym r i 20 i
 0082                   .dbsym r j 22 i
 0082                   .dbsym r xms 16 i
 0082                   .dbend
 0082                   .dbfunc e Delay_X10us _Delay_X10us fV
 0082           ;              i -> R20,R21
 0082           ;              j -> R22
 0082           ;          x10us -> R16,R17
                        .even
 0082           _Delay_X10us::
 0082 00D0              rcall push_gset2
 0084                   .dbline -1
 0084                   .dbline 90
 0084           ;       {
 0084           ;               i++;
 0084           ;       }//i=字符串长度 
 0084           ;       if(i>15)
 0084           ;       {
 0084           ;               i=15;
 0084           ;       }
 0084           ;       if(ypos==1)
 0084           ;       {
 0084           ;               ram_address = 0x80+xpos-1;
 0084           ;       }
 0084           ;       else if(ypos==2)
 0084           ;       {
 0084           ;               ram_address = 0x90+xpos-1;
 0084           ;       }
 0084                   .dbline 92
 0084           ;       Lcd_Write(0xf8,ram_address);
 0084           ;       for(;i>0;i--)
 0084 4427              clr R20
 0086 5527              clr R21
 0088 0AC0              rjmp L27
 008A           L24:
 008A                   .dbline 93
 008A           ;       {
 008A                   .dbline 94
 008A           ;               Lcd_Write(0xfa,*lcd_pointer);   
 008A 6627              clr R22
 008C 04C0              rjmp L31
 008E           L28:
 008E                   .dbline 95
 008E                   .dbline 96
 008E 0000              nop
 0090                   .dbline 97
 0090 0000              nop
 0092                   .dbline 98
 0092 0000              nop
 0094                   .dbline 99
 0094           L29:
 0094                   .dbline 94
 0094 6395              inc R22
 0096           L31:
 0096                   .dbline 94
 0096 6230              cpi R22,2
 0098 D0F3              brlo L28
 009A                   .dbline 100
 009A           L25:
 009A                   .dbline 92
 009A 4F5F              subi R20,255  ; offset = 1
 009C 5F4F              sbci R21,255
 009E           L27:
 009E                   .dbline 92
 009E 4017              cp R20,R16
 00A0 5107              cpc R21,R17

⌨️ 快捷键说明

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