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

📄 lcd.lis

📁 atmega169 lcd 程序用于驱动lcd
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module lcd.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\TDdownload\zxy\169demo\169LCD\lcd动态校验\lcd.c
                        .area lit(rom, con, rel)
 0000           _LCD_character_table::
 0000 2313              .word 4899
 0002 2002              .word 544
 0004 3211              .word 4402
 0006 3212              .word 4658
 0008 3102              .word 561
 000A 1312              .word 4627
 000C 1313              .word 4883
 000E 2202              .word 546
 0010 3313              .word 4915
 0012 3312              .word 4659
 0014 2022              .word 8736
 0016                   .dbsym e LCD_character_table _LCD_character_table A[22:11]ki
                        .area text(rom, con, rel)
 0000                   .dbfile C:\TDdownload\zxy\169demo\169LCD\lcd动态校验\lcd.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 28
 0000           ; // **************************************************************
 0000           ; // ***                         广 州 天 河 双 龙 电 子 公 司              ***
 0000           ; // ***                   http://www.sl.com.cn                 ***
 0000           ; // ***                    lcd 显示校验                                ***
 0000           ; // ***                  作者:zxy@sl.com.cn                   ***
 0000           ; // ***                       2006年3月28日                    ***
 0000           ; // ***         目标MCU:MEGA169    晶振:内部(INT)8MHZ         ***
 0000           ; // **************************************************************
 0000           ; //实验效果:0-9动态循环显示
 0000           ; #include <iom169v.h>
 0000           ; #include <macros.h>
 0000           ; #define pLCDREG (*(unsigned char *)(0xEC)) 
 0000           ; const unsigned int LCD_character_table[] = // Character definitions table.
 0000           ; {
 0000           ;       0x1323,         // '0'
 0000           ;       0x0220,         // '1'
 0000           ;       0x1132,         // '2'
 0000           ;       0x1232,         // '3'  
 0000           ;       0x0231,         // '4'
 0000           ;       0x1213,         // '5'
 0000           ;       0x1313,         // '6'
 0000           ;       0x0222,         // '7'
 0000           ;       0x1333,         // '8'
 0000           ;       0x1233,         // '9'
 0000           ;       0x2220         // 'c'
 0000           ; };          
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 29
 0000           ;  PORTA = 0x00;
 0000 2224              clr R2
 0002 22B8              out 0x2,R2
 0004                   .dbline 30
 0004           ;  DDRA  = 0x00;
 0004 21B8              out 0x1,R2
 0006                   .dbline 31
 0006           ;  PORTC = 0x00; 
 0006 28B8              out 0x8,R2
 0008                   .dbline 32
 0008           ;  DDRC  = 0x00;
 0008 27B8              out 0x7,R2
 000A                   .dbline 33
 000A           ;  PORTD = 0x00;
 000A 2BB8              out 0xb,R2
 000C                   .dbline 34
 000C           ;  DDRD  = 0x00; 
 000C 2AB8              out 0xa,R2
 000E                   .dbline 35
 000E           ;  PORTG = 0x00;
 000E 24BA              out 0x14,R2
 0010                   .dbline 36
 0010           ;  DDRG  = 0x00;
 0010 23BA              out 0x13,R2
 0012                   .dbline -2
 0012           L1:
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014                   .dbend
 0014                   .dbfunc e delay_us _delay_us fV
 0014           ;           time -> R16,R17
                        .even
 0014           _delay_us::
 0014                   .dbline -1
 0014                   .dbline 40
 0014           ; }
 0014           ; /*                            微秒级延时程序                  */
 0014           ; void delay_us(int time)
 0014           ;        {     
 0014           L3:
 0014                   .dbline 42
 0014           ;         do
 0014           ;               {
 0014                   .dbline 43
 0014           ;                time--;
 0014 0150              subi R16,1
 0016 1040              sbci R17,0
 0018                   .dbline 44
 0018           ;               }       
 0018           L4:
 0018                   .dbline 45
 0018           ;         while (time>1);
 0018 81E0              ldi R24,1
 001A 90E0              ldi R25,0
 001C 8017              cp R24,R16
 001E 9107              cpc R25,R17
 0020 CCF3              brlt L3
 0022           X0:
 0022                   .dbline -2
 0022           L2:
 0022                   .dbline 0 ; func end
 0022 0895              ret
 0024                   .dbsym r time 16 I
 0024                   .dbend
 0024                   .dbfunc e delay_ms _delay_ms fV
 0024           ;           time -> R20,R21
                        .even
 0024           _delay_ms::
 0024 4A93              st -y,R20
 0026 5A93              st -y,R21
 0028 A801              movw R20,R16
 002A                   .dbline -1
 002A                   .dbline 49
 002A           ;        }        
 002A           ; /*                        毫秒级延时程序                      */       
 002A           ; void delay_ms(unsigned int time)
 002A           ;        {
 002A 05C0              xjmp L8
 002C           L7:
 002C                   .dbline 51
 002C           ;         while(time!=0)
 002C           ;                 {             
 002C                   .dbline 52
 002C           ;                  delay_us(1000);
 002C 08EE              ldi R16,1000
 002E 13E0              ldi R17,3
 0030 F1DF              xcall _delay_us
 0032                   .dbline 53
 0032           ;                  time--;
 0032 4150              subi R20,1
 0034 5040              sbci R21,0
 0036                   .dbline 54
 0036           ;                 }
 0036           L8:
 0036                   .dbline 50
 0036 4030              cpi R20,0
 0038 4507              cpc R20,R21
 003A C1F7              brne L7
 003C           X1:
 003C                   .dbline -2
 003C           L6:
 003C                   .dbline 0 ; func end
 003C 5991              ld R21,y+
 003E 4991              ld R20,y+
 0040 0895              ret
 0042                   .dbsym r time 20 i
 0042                   .dbend
 0042                   .dbfunc e lcd_init _lcd_init fV
                        .even
 0042           _lcd_init::
 0042                   .dbline -1
 0042                   .dbline 57
 0042           ;        }                                      
 0042           ; void lcd_init(void)
 0042           ; {
 0042                   .dbline 59
 0042           ; 
 0042           ; LCDCRA = (1<<LCDEN);
 0042 80E8              ldi R24,128
 0044 8093E400          sts 228,R24
 0048                   .dbline 62
 0048           ; /* 晶体振荡器*/
 0048           ; /* 1/3 偏置和1/4 占空比 */
 0048           ; LCDCRB =  (0<<LCDCS) |(1<<LCDMUX1)| (1<<LCDMUX0)| (1<<LCDPM2)| (1<<LCDPM1)| (1<<LCDPM0);
 0048 87E3              ldi R24,55
 004A 8093E500          sts 229,R24
 004E                   .dbline 65
 004E           ; /* 选择16 为预分频因子,7 为LCD 时钟分频数*/
 004E           ; /* 得到帧速率为 Hz */
 004E           ; LCDFRR = (1<<LCDPS2) |(1<<LCDPS1) |(0<<LCDPS0) |(1<<LCDCD2) | (1<<LCDCD1) | (0<<LCDCD0);
 004E 86E6              ldi R24,102
 0050 8093E600          sts 230,R24
 0054                   .dbline 67
 0054           ; /* 设置输出电压为3.3 V */
 0054           ; LCDCCR = (1<<LCDCC3) | (1<<LCDCC2) | (1<<LCDCC1) | (1<<LCDCC0);
 0054 8FE0              ldi R24,15
 0056 8093E700          sts 231,R24
 005A                   .dbline 70
 005A           ; /* 使能LCD,缺省波形并禁止所有中断*/
 005A           ; 
 005A           ;  LCDDR0=0x00;
 005A 2224              clr R2
 005C 2092EC00          sts 236,R2
 0060                   .dbline 71
 0060           ;  LCDDR1=0x00;
 0060 2092ED00          sts 237,R2
 0064                   .dbline 72
 0064           ;  LCDDR2=0x00;
 0064 2092EE00          sts 238,R2
 0068                   .dbline 73
 0068           ;  LCDDR3=0x00;
 0068 2092EF00          sts 239,R2
 006C                   .dbline 74
 006C           ;  LCDDR5=0x00;
 006C 2092F100          sts 241,R2
 0070                   .dbline 75
 0070           ;  LCDDR6=0x00;
 0070 2092F200          sts 242,R2
 0074                   .dbline 76
 0074           ;  LCDDR7=0x00;
 0074 2092F300          sts 243,R2
 0078                   .dbline 77
 0078           ;  LCDDR8=0x00;
 0078 2092F400          sts 244,R2
 007C                   .dbline 78
 007C           ;  LCDDR10=0x00;
 007C 2092F600          sts 246,R2
 0080                   .dbline 79
 0080           ;  LCDDR11=0x00;
 0080 2092F700          sts 247,R2
 0084                   .dbline 80
 0084           ;  LCDDR12=0x00;
 0084 2092F800          sts 248,R2
 0088                   .dbline 81
 0088           ;  LCDDR13=0x00;
 0088 2092F900          sts 249,R2
 008C                   .dbline 82
 008C           ;  LCDDR15=0x00;
 008C 2092FB00          sts 251,R2
 0090                   .dbline 83
 0090           ;  LCDDR16=0x00;
 0090 2092FC00          sts 252,R2
 0094                   .dbline 84
 0094           ;  LCDDR17=0x00;
 0094 2092FD00          sts 253,R2
 0098                   .dbline 85
 0098           ;  LCDDR18=0x00;
 0098 2092FE00          sts 254,R2
 009C                   .dbline 86
 009C           ;  LCDCRA=(1<<LCDEN);
 009C 80E8              ldi R24,128
 009E 8093E400          sts 228,R24
 00A2                   .dbline -2
 00A2           L10:
 00A2                   .dbline 0 ; func end
 00A2 0895              ret
 00A4                   .dbend
 00A4                   .dbfunc e init_devices _init_devices fV
                        .even
 00A4           _init_devices::
 00A4                   .dbline -1
 00A4                   .dbline 89
 00A4           ; }
 00A4           ; void init_devices(void)
 00A4           ; {
 00A4                   .dbline 91
 00A4           ;  
 00A4           ;  port_init();
 00A4 ADDF              xcall _port_init
 00A6                   .dbline 92
 00A6           ;  lcd_init();
 00A6 CDDF              xcall _lcd_init
 00A8                   .dbline -2
 00A8           L11:
 00A8                   .dbline 0 ; func end
 00A8 0895              ret
 00AA                   .dbend
 00AA                   .dbfunc e main _main fV
 00AA           ;              n -> R10,R11
 00AA           ;              i -> R20,R21
 00AA           ;              j -> R10,R11
 00AA           ;              m -> R22,R23
                        .even
 00AA           _main::
 00AA                   .dbline -1
 00AA                   .dbline 97
 00AA           ; 
 00AA           ; }
 00AA           ; 
 00AA           ; void main(void)
 00AA           ; {
 00AA                   .dbline 98
 00AA           ;  unsigned int i,j,m,n=0;
 00AA AA24              clr R10
 00AC BB24              clr R11
 00AE                   .dbline 99
 00AE           ;  init_devices();
 00AE FADF              xcall _init_devices
 00B0 3EC2              xjmp L14
 00B2           L16:
 00B2                   .dbline 102
 00B2           ;  while(1)
 00B2           ;                {  
 00B2           ;                 while ( !(LCDCRA & (1<<LCDIF)) );
 00B2           L17:
 00B2                   .dbline 102
 00B2 2090E400          lds R2,228
 00B6 24FE              sbrs R2,4
 00B8 FCCF              rjmp L16
 00BA           X2:
 00BA                   .dbline 103
 00BA           ;                 LCDCRA = (1<<LCDEN)|(1<<LCDIF);
 00BA 80E9              ldi R24,144
 00BC 8093E400          sts 228,R24
 00C0                   .dbline 104
 00C0           ;                 for(i=0;i<10;i++)     
 00C0 4427              clr R20
 00C2 5527              clr R21
 00C4 2FC2              xjmp L22
 00C6           L19:
 00C6                   .dbline 105
 00C6           ;                  {
 00C6                   .dbline 106
 00C6           ;                   j=LCD_character_table[i];                   //左1位
 00C6 02E0              ldi R16,2
 00C8 10E0              ldi R17,0
 00CA 9A01              movw R18,R20
 00CC 0E940000          xcall empy16s
 00D0 F801              movw R30,R16
 00D2 80E0              ldi R24,<_LCD_character_table
 00D4 90E0              ldi R25,>_LCD_character_table
 00D6 E80F              add R30,R24
 00D8 F91F              adc R31,R25
 00DA A590              lpm R10,Z+
 00DC B490              lpm R11,Z
 00DE                   .dbline 108

⌨️ 快捷键说明

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