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

📄 lcd.lst

📁 ATMEGA16L 驱动的串口12864
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    004A E5CF      LDI	R28,0x5F
    004B E0D4      LDI	R29,4
    004C BFCD      OUT	0x3D,R28
    004D BFDE      OUT	0x3E,R29
    004E 51C0      SUBI	R28,0x10
    004F 40D0      SBCI	R29,0
    0050 EA0A      LDI	R16,0xAA
    0051 8308      STD	Y+0,R16
    0052 2400      CLR	R0
    0053 E6EC      LDI	R30,0x6C
    0054 E0F0      LDI	R31,0
    0055 E010      LDI	R17,0
    0056 36EC      CPI	R30,0x6C
    0057 07F1      CPC	R31,R17
    0058 F011      BEQ	0x005B
    0059 9201      ST	R0,Z+
    005A CFFB      RJMP	0x0056
    005B 8300      STD	Z+0,R16
    005C E8E7      LDI	R30,0x87
    005D E0F0      LDI	R31,0
    005E E6A0      LDI	R26,0x60
    005F E0B0      LDI	R27,0
    0060 E010      LDI	R17,0
    0061 39E3      CPI	R30,0x93
    0062 07F1      CPC	R31,R17
    0063 F021      BEQ	0x0068
    0064 95C8      LPM
    0065 9631      ADIW	R30,1
    0066 920D      ST	R0,X+
    0067 CFF9      RJMP	0x0061
    0068 940E0176  CALL	_main
_exit:
    006A CFFF      RJMP	_exit
FILE: E:\AVR程序\12864串口\lcd.h
(0001) #include <iom16v.h>
(0002) #include "macros.h"
(0003) 
(0004) #define uchar unsigned char
(0005) #define uint  unsigned int
(0006) 
(0007) void write(unsigned char start, unsigned char ddata);
(0008) void sendbyte(unsigned char bbyte);
(0009) void delaynms(unsigned int di);
(0010) void lcdinit(void);
(0011) void lcdtest(void);
(0012) void lcdcls(void);
(0013) 
(0014) /*-----------------------------------------------------------------------
(0015) 延时函数
(0016) 系统时钟:8M
(0017) -----------------------------------------------------------------------*/
(0018) void delay_1us(void)                 //1us延时函数
(0019)   {
(0020)    asm("nop");
_delay_1us:
    006B 0000      NOP
    006C 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    006D 940E01E0  CALL	push_gset2
    006F 01B8      MOVW	R22,R16
(0021)   }
(0022) 
(0023) void delay_nus(unsigned int n)       //N us延时函数
(0024)   {
(0025)    unsigned int i=0;
    0070 2744      CLR	R20
    0071 2755      CLR	R21
(0026)    for (i=0;i<n;i++)
    0072 C003      RJMP	0x0076
(0027)    delay_1us();
    0073 DFF7      RCALL	_delay_1us
    0074 5F4F      SUBI	R20,0xFF
    0075 4F5F      SBCI	R21,0xFF
    0076 1746      CP	R20,R22
    0077 0757      CPC	R21,R23
    0078 F3D0      BCS	0x0073
    0079 940E01D4  CALL	pop_gset2
    007B 9508      RET
(0028)   }
(0029)   
(0030) void delay_1ms(void)                 //1ms延时函数
(0031)   {
(0032)    unsigned int i;
(0033)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    007C 2700      CLR	R16
    007D 2711      CLR	R17
    007E C002      RJMP	0x0081
    007F 5F0F      SUBI	R16,0xFF
    0080 4F1F      SBCI	R17,0xFF
    0081 3704      CPI	R16,0x74
    0082 E0E4      LDI	R30,4
    0083 071E      CPC	R17,R30
    0084 F3D0      BCS	0x007F
    0085 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0086 940E01E0  CALL	push_gset2
    0088 01B8      MOVW	R22,R16
(0034)   }
(0035)   
(0036) void delay_nms(unsigned int n)       //N ms延时函数
(0037)   {
(0038)    unsigned int i=0;
    0089 2744      CLR	R20
    008A 2755      CLR	R21
(0039)    for (i=0;i<n;i++)
    008B C003      RJMP	0x008F
(0040)    delay_1ms();
    008C DFEF      RCALL	_delay_1ms
    008D 5F4F      SUBI	R20,0xFF
    008E 4F5F      SBCI	R21,0xFF
    008F 1746      CP	R20,R22
    0090 0757      CPC	R21,R23
    0091 F3D0      BCS	0x008C
    0092 940E01D4  CALL	pop_gset2
    0094 9508      RET
FILE: E:\AVR程序\12864串口\lcd.c
(0001) #include "lcd.h"
(0002) 
(0003) #define CS BIT(5)
(0004) #define SID BIT(6)
(0005) #define SCLK BIT(7)
(0006) 
(0007) #define LCD_ON PORTD &=~ BIT(7)
(0008) #define LCD_OFF PORTD &=~ BIT(7)
(0009) 
(0010) 
(0011) #define EN_CS PORTA  |=  CS
(0012) #define DIS_CS PORTA &=~ CS
(0013) 
(0014) #define ST_SID PORTA |= SID
(0015) #define CLS_SID PORTA &=~ SID
(0016) 
(0017) #define ST_SCLK PORTA |= SCLK
(0018) #define CLS_SCLK PORTA &=~ SCLK
(0019) 
(0020) 
(0021) unsigned char  ma[] ={"汉字显示LCD"};
(0022) unsigned char flash ma2[]={"自带字库图文混排"};
(0023) unsigned char flash ma3[]={"控制IC:ST7920  "};
(0024) unsigned char flash ma4[]={"功能强大使用方便"};
(0025) 
(0026) void portini(void)
(0027) {
(0028)     DDRD=0xff;
_portini:
    0095 EF8F      LDI	R24,0xFF
    0096 BB81      OUT	0x11,R24
(0029)     PORTD = 0xff;
    0097 BB82      OUT	0x12,R24
(0030)     DDRB = 0xff;
    0098 BB87      OUT	0x17,R24
(0031)     PORTB = 0xff;
    0099 BB88      OUT	0x18,R24
    009A 9508      RET
_delaynms:
  da                   --> R20
  db                   --> R22
  di                   --> R16
    009B 940E01E0  CALL	push_gset2
(0032) }
(0033) 
(0034) void delaynms(uint di) //延时
(0035) {
(0036)  uint da,db;
(0037)  for(da=0;da<di;da++)
    009D 2744      CLR	R20
    009E 2755      CLR	R21
    009F C00B      RJMP	0x00AB
(0038)    for(db=0;db<1000;db++);
    00A0 2766      CLR	R22
    00A1 2777      CLR	R23
    00A2 C002      RJMP	0x00A5
    00A3 5F6F      SUBI	R22,0xFF
    00A4 4F7F      SBCI	R23,0xFF
    00A5 3E68      CPI	R22,0xE8
    00A6 E0E3      LDI	R30,3
    00A7 077E      CPC	R23,R30
    00A8 F3D0      BCS	0x00A3
    00A9 5F4F      SUBI	R20,0xFF
    00AA 4F5F      SBCI	R21,0xFF
    00AB 1740      CP	R20,R16
    00AC 0751      CPC	R21,R17
    00AD F390      BCS	0x00A0
    00AE 940E01D4  CALL	pop_gset2
    00B0 9508      RET
(0039) }
(0040) 
(0041) 
(0042) void lcdinit(void)//初始化LCD
(0043) {
(0044)     delaynms(10);
_lcdinit:
    00B1 E00A      LDI	R16,0xA
    00B2 E010      LDI	R17,0
    00B3 DFE7      RCALL	_delaynms
(0045)     EN_CS;
    00B4 9ADD      SBI	0x1B,5
(0046)     write(0,0x30); //8位界面,基本指令集
    00B5 E320      LDI	R18,0x30
    00B6 2700      CLR	R16
    00B7 D019      RCALL	_write
(0047) 	delaynms(10);
    00B8 E00A      LDI	R16,0xA
    00B9 E010      LDI	R17,0
    00BA DFE0      RCALL	_delaynms
(0048)     write(0,0x30); //显示打开,光标关,反白关
    00BB E320      LDI	R18,0x30
    00BC 2700      CLR	R16
    00BD D013      RCALL	_write
(0049) 	delaynms(10);
    00BE E00A      LDI	R16,0xA
    00BF E010      LDI	R17,0
    00C0 DFDA      RCALL	_delaynms
(0050) 	write(0,0x0c); //显示打开,光标关,反白关
    00C1 E02C      LDI	R18,0xC
    00C2 2700      CLR	R16
    00C3 D00D      RCALL	_write
(0051) 		delaynms(10);
    00C4 E00A      LDI	R16,0xA
    00C5 E010      LDI	R17,0
    00C6 DFD4      RCALL	_delaynms
(0052)     write(0,0x01); //清屏
    00C7 E021      LDI	R18,1
    00C8 2700      CLR	R16
    00C9 D007      RCALL	_write
(0053) 		delaynms(10);
    00CA E00A      LDI	R16,0xA
    00CB E010      LDI	R17,0
    00CC DFCE      RCALL	_delaynms
(0054) 	write(0,0x60); 
    00CD E620      LDI	R18,0x60
    00CE 2700      CLR	R16
    00CF D001      RCALL	_write
    00D0 9508      RET
_write:
  Ldata                --> R20
  Hdata                --> R22
  start_data           --> R10
  ddata                --> R20
  start                --> R22
    00D1 940E01DE  CALL	push_gset3
    00D3 2F42      MOV	R20,R18
    00D4 2F60      MOV	R22,R16
(0055) }
(0056) 
(0057) void write(uchar start,uchar ddata) //写指令或数据
(0058) {
(0059)     uchar start_data,Hdata,Ldata;
(0060)     if(start==0)
    00D5 2366      TST	R22
    00D6 F419      BNE	0x00DA
(0061)         start_data = 0xf8; //写指令
    00D7 EF88      LDI	R24,0xF8
    00D8 2EA8      MOV	R10,R24
    00D9 C002      RJMP	0x00DC
(0062)     else 
(0063)         start_data = 0xfa; //写数据
    00DA EF8A      LDI	R24,0xFA
    00DB 2EA8      MOV	R10,R24
(0064)     Hdata = ddata&0xf0;  //取高4位
    00DC 2F64      MOV	R22,R20
    00DD 7F60      ANDI	R22,0xF0
(0065) 	Ldata = (ddata<<4)&0xf0; //取低4位
    00DE 2F84      MOV	R24,R20
    00DF 708F      ANDI	R24,0xF
    00E0 9582      SWAP	R24
    00E1 7F80      ANDI	R24,0xF0
    00E2 2F48      MOV	R20,R24
(0066) 	sendbyte(start_data);   //发送起始信号
    00E3 2D0A      MOV	R16,R10
    00E4 D010      RCALL	_sendbyte
(0067) 	delaynms(100);
    00E5 E604      LDI	R16,0x64
    00E6 E010      LDI	R17,0
    00E7 DFB3      RCALL	_delaynms
(0068) 	sendbyte(Hdata);  //发送高四位
    00E8 2F06      MOV	R16,R22
    00E9 D00B      RCALL	_sendbyte
(0069) 	delaynms(50);
    00EA E302      LDI	R16,0x32
    00EB E010      LDI	R17,0
    00EC DFAE      RCALL	_delaynms
(0070) 	sendbyte(Ldata);  //发送低四位
    00ED 2F04      MOV	R16,R20
    00EE D006      RCALL	_sendbyte
(0071) 	delaynms(50);
    00EF E302      LDI	R16,0x32
    00F0 E010      LDI	R17,0
    00F1 DFA9      RCALL	_delaynms
    00F2 940E01D7  CALL	pop_gset3
    00F4 9508      RET
_sendbyte:
  i                    --> R20
  bbyte                --> R22
    00F5 940E01E0  CALL	push_gset2
    00F7 2F60      MOV	R22,R16
(0072) }
(0073) 
(0074) void sendbyte(uchar bbyte) //发送一个字节
(0075) {
(0076)     unsigned char i;
(0077)     for(i=0;i<8;i++)
    00F8 2744      CLR	R20
    00F9 C011      RJMP	0x010B
(0078)     {    
(0079) 	
(0080)         if((bbyte&0x80)==1) //取出最高位
    00FA 2F86      MOV	R24,R22
    00FB 7880      ANDI	R24,0x80
    00FC 3081      CPI	R24,1
    00FD F411      BNE	0x0100
(0081)     		{ST_SID;}
    00FE 9ADE      SBI	0x1B,6
    00FF C001      RJMP	0x0101

⌨️ 快捷键说明

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