test_lcd.lss
来自「在WinAVR下的ST7565圖形點陣的驅動程序」· LSS 代码 · 共 1,839 行 · 第 1/5 页
LSS
1,839 行
LCD_WriteCMD(0x40 | LineStart);
}
void LCD_SetPageAddress(uint8 Page)
{
8a4: 8f 70 andi r24, 0x0F ; 15
8a6: 80 6b ori r24, 0xB0 ; 176
8a8: 0e 94 2f 04 call 0x85e ; 0x85e <LCD_WriteCMD>
Page &= 0x0F;
LCD_WriteCMD(0xB0 | Page);
}
8ac: 08 95 ret
000008ae <LCD_SetStartLine>:
Power &= 0x07;
LCD_WriteCMD(0x28 | Power);
}
void LCD_SetStartLine(uint8 LineStart)
{
8ae: 8f 73 andi r24, 0x3F ; 63
8b0: 80 64 ori r24, 0x40 ; 64
8b2: 0e 94 2f 04 call 0x85e ; 0x85e <LCD_WriteCMD>
LineStart &= 0x3F;
LCD_WriteCMD(0x40 | LineStart);
}
8b6: 08 95 ret
000008b8 <LCD_PowerControl>:
On &= 0x01;
LCD_WriteCMD(0xAE | On);
}
void LCD_PowerControl(uint8 Power)
{
8b8: 87 70 andi r24, 0x07 ; 7
8ba: 88 62 ori r24, 0x28 ; 40
8bc: 0e 94 2f 04 call 0x85e ; 0x85e <LCD_WriteCMD>
Power &= 0x07;
LCD_WriteCMD(0x28 | Power);
}
8c0: 08 95 ret
000008c2 <LCD_DisplayOnOff>:
spi_write(CMD);
LCD_CS_OUT(1);
}
void LCD_DisplayOnOff(uint8 On)
{
8c2: 81 70 andi r24, 0x01 ; 1
8c4: 8e 6a ori r24, 0xAE ; 174
8c6: 0e 94 2f 04 call 0x85e ; 0x85e <LCD_WriteCMD>
On &= 0x01;
LCD_WriteCMD(0xAE | On);
}
8ca: 08 95 ret
000008cc <LCD_Init>:
LCD_WriteCMD(0x81);
LCD_WriteCMD(Volume);
}
void LCD_Init(void)
{
8cc: 1f 93 push r17
DDRB |= BIT(LCD_CS) | BIT(LCD_A0) | BIT(LCD_RST);
8ce: 87 b3 in r24, 0x17 ; 23
8d0: 80 67 ori r24, 0x70 ; 112
8d2: 87 bb out 0x17, r24 ; 23
LCD_RST_OUT(0);
8d4: c5 98 cbi 0x18, 5 ; 24
can be achieved.
*/
void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
8d6: 1a e7 ldi r17, 0x7A ; 122
8d8: 81 2f mov r24, r17
8da: 8a 95 dec r24
8dc: f1 f7 brne .-4 ; 0x8da <LCD_Init+0xe>
_delay_us(50);
LCD_RST_OUT(1);
8de: c5 9a sbi 0x18, 5 ; 24
milliseconds can be achieved.
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
8e0: 83 e3 ldi r24, 0x33 ; 51
8e2: 97 e0 ldi r25, 0x07 ; 7
8e4: 01 97 sbiw r24, 0x01 ; 1
8e6: f1 f7 brne .-4 ; 0x8e4 <LCD_Init+0x18>
_delay_us(1000);
LCD_BackLightOn();
8e8: df 9a sbi 0x1b, 7 ; 27
// LCD Bias Setting
LCD_WriteCMD(0xA2); // LCD Bias Set: 1/9 bias
8ea: 82 ea ldi r24, 0xA2 ; 162
8ec: 0e 94 2f 04 call 0x85e ; 0x85e <LCD_WriteCMD>
can be achieved.
*/
void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
8f0: 81 2f mov r24, r17
8f2: 8a 95 dec r24
8f4: f1 f7 brne .-4 ; 0x8f2 <LCD_Init+0x26>
//LCD_WriteCMD(0xA3); // LCD Bias Set: 1/7 bias
_delay_us(50);
// LCD ADC Setting
//LCD_WriteCMD(0xA0); // Set ADC 0: Noraml
LCD_WriteCMD(0xA1); // Set ADC 0: Reverse
8f6: 81 ea ldi r24, 0xA1 ; 161
8f8: 0e 94 2f 04 call 0x85e ; 0x85e <LCD_WriteCMD>
8fc: 81 2f mov r24, r17
8fe: 8a 95 dec r24
900: f1 f7 brne .-4 ; 0x8fe <LCD_Init+0x32>
_delay_us(50);
// Common Output Setting
LCD_WriteCMD(0xC0); // Normal : COM0~COM63
902: 80 ec ldi r24, 0xC0 ; 192
904: 0e 94 2f 04 call 0x85e ; 0x85e <LCD_WriteCMD>
908: 81 2f mov r24, r17
90a: 8a 95 dec r24
90c: f1 f7 brne .-4 ; 0x90a <LCD_Init+0x3e>
//LCD_WriteCMD(0xC8); // Reverse : COM63~COM0
_delay_us(50);
// V5 Output Voltage
LCD_SetV0_Voltage_Regulator(0x04);
90e: 84 e0 ldi r24, 0x04 ; 4
910: 0e 94 40 04 call 0x880 ; 0x880 <LCD_SetV0_Voltage_Regulator>
914: 81 2f mov r24, r17
916: 8a 95 dec r24
918: f1 f7 brne .-4 ; 0x916 <LCD_Init+0x4a>
_delay_us(50);
// Electronic volume control
LCD_SetElectronicVolume(0x20);
91a: 80 e2 ldi r24, 0x20 ; 32
91c: 0e 94 35 04 call 0x86a ; 0x86a <LCD_SetElectronicVolume>
920: 85 ef ldi r24, 0xF5 ; 245
922: 8a 95 dec r24
924: f1 f7 brne .-4 ; 0x922 <LCD_Init+0x56>
_delay_us(100);
LCD_WriteCMD(0xA4); // Display Normal
926: 84 ea ldi r24, 0xA4 ; 164
928: 0e 94 2f 04 call 0x85e ; 0x85e <LCD_WriteCMD>
92c: 81 2f mov r24, r17
92e: 8a 95 dec r24
930: f1 f7 brne .-4 ; 0x92e <LCD_Init+0x62>
//LCD_WriteCMD(0xA5); // All point On
_delay_us(50);
//LCD_WriteCMD(0xA6); // Display Normal
LCD_WriteCMD(0xA7); // Display Reverse
932: 87 ea ldi r24, 0xA7 ; 167
934: 0e 94 2f 04 call 0x85e ; 0x85e <LCD_WriteCMD>
938: 81 2f mov r24, r17
93a: 8a 95 dec r24
93c: f1 f7 brne .-4 ; 0x93a <LCD_Init+0x6e>
_delay_us(50);
LCD_WriteCMD(0xAC);
93e: 8c ea ldi r24, 0xAC ; 172
940: 0e 94 2f 04 call 0x85e ; 0x85e <LCD_WriteCMD>
LCD_WriteCMD(0x00);
944: 80 e0 ldi r24, 0x00 ; 0
946: 0e 94 2f 04 call 0x85e ; 0x85e <LCD_WriteCMD>
94a: 1a 95 dec r17
94c: f1 f7 brne .-4 ; 0x94a <LCD_Init+0x7e>
_delay_us(50);
LCD_PowerControl(0x07);
94e: 87 e0 ldi r24, 0x07 ; 7
950: 0e 94 5c 04 call 0x8b8 ; 0x8b8 <LCD_PowerControl>
LCD_DisplayOnOff(1);
954: 81 e0 ldi r24, 0x01 ; 1
956: 0e 94 61 04 call 0x8c2 ; 0x8c2 <LCD_DisplayOnOff>
LCD_SetStartLine(0x00);
95a: 80 e0 ldi r24, 0x00 ; 0
95c: 0e 94 57 04 call 0x8ae ; 0x8ae <LCD_SetStartLine>
}
960: 1f 91 pop r17
962: 08 95 ret
00000964 <LCD_WriteData>:
//包含所需头文件
#include "config.h"
#include "LCD_Font.h"
void LCD_WriteData(uint8 Data)
{
964: c6 98 cbi 0x18, 6 ; 24
LCD_CS_OUT(0);
LCD_A0_OUT(1);
966: c4 9a sbi 0x18, 4 ; 24
spi_write(Data);
968: 0e 94 ba 06 call 0xd74 ; 0xd74 <spi_write>
LCD_CS_OUT(1);
96c: c6 9a sbi 0x18, 6 ; 24
}
96e: 08 95 ret
00000970 <LCD_DisplayPicture>:
// LCD_DisplayPicture
// Picture Size: Hight*Weight
//-----------------------------------------------------------------------
uint8 LCD_DisplayPicture(char *Picture, uint8 adrPage, uint8 adrColumn,
uint8 Weight, uint8 Hight)
{
970: bf 92 push r11
972: cf 92 push r12
974: df 92 push r13
976: ef 92 push r14
978: ff 92 push r15
97a: 0f 93 push r16
97c: 1f 93 push r17
97e: fc 01 movw r30, r24
980: b6 2e mov r11, r22
982: c4 2e mov r12, r20
984: d2 2e mov r13, r18
986: e0 2e mov r14, r16
uint8 *dptr; // dptr_adderss for Dig code.
uint8 i, j;
if((adrPage+Hight)>MAX_PAGE) return FALSE;
988: 86 2f mov r24, r22
98a: 90 e0 ldi r25, 0x00 ; 0
98c: 80 0f add r24, r16
98e: 91 1d adc r25, r1
990: 09 97 sbiw r24, 0x09 ; 9
992: f4 f4 brge .+60 ; 0x9d0 <LCD_DisplayPicture+0x60>
if((adrColumn+Weight)>MAX_COLUMN) return FALSE;
994: 84 2f mov r24, r20
996: 90 e0 ldi r25, 0x00 ; 0
998: 82 0f add r24, r18
99a: 91 1d adc r25, r1
99c: 81 38 cpi r24, 0x81 ; 129
99e: 91 05 cpc r25, r1
9a0: bc f4 brge .+46 ; 0x9d0 <LCD_DisplayPicture+0x60>
9a2: 00 e0 ldi r16, 0x00 ; 0
{
LCD_SetPageAddress(adrPage+i);
LCD_SetColumnAddress(adrColumn);
for(j=0; j<Weight; j++)
{
LCD_WriteData(pgm_read_byte(dptr));
9a4: f4 90 lpm r15, Z+
9a6: 10 c0 rjmp .+32 ; 0x9c8 <LCD_DisplayPicture+0x58>
dptr = (uint8 *)Picture;
for(i=0; i<Hight; i++)
{
LCD_SetPageAddress(adrPage+i);
9a8: 80 2f mov r24, r16
9aa: 8b 0d add r24, r11
9ac: 0e 94 52 04 call 0x8a4 ; 0x8a4 <LCD_SetPageAddress>
LCD_SetColumnAddress(adrColumn);
9b0: 8c 2d mov r24, r12
9b2: 0e 94 45 04 call 0x88a ; 0x88a <LCD_SetColumnAddress>
9b6: 10 e0 ldi r17, 0x00 ; 0
9b8: 04 c0 rjmp .+8 ; 0x9c2 <LCD_DisplayPicture+0x52>
for(j=0; j<Weight; j++)
{
LCD_WriteData(pgm_read_byte(dptr));
9ba: 8f 2d mov r24, r15
9bc: 0e 94 b2 04 call 0x964 ; 0x964 <LCD_WriteData>
for(i=0; i<Hight; i++)
{
LCD_SetPageAddress(adrPage+i);
LCD_SetColumnAddress(adrColumn);
for(j=0; j<Weight; j++)
9c0: 1f 5f subi r17, 0xFF ; 255
9c2: 1d 15 cp r17, r13
9c4: d0 f3 brcs .-12 ; 0x9ba <LCD_DisplayPicture+0x4a>
if((adrPage+Hight)>MAX_PAGE) return FALSE;
if((adrColumn+Weight)>MAX_COLUMN) return FALSE;
dptr = (uint8 *)Picture;
for(i=0; i<Hight; i++)
9c6: 0f 5f subi r16, 0xFF ; 255
9c8: 0e 15 cp r16, r14
9ca: 70 f3 brcs .-36 ; 0x9a8 <LCD_DisplayPicture+0x38>
9cc: 81 e0 ldi r24, 0x01 ; 1
9ce: 01 c0 rjmp .+2 ; 0x9d2 <LCD_DisplayPicture+0x62>
9d0: 80 e0 ldi r24, 0x00 ; 0
LCD_WriteData(pgm_read_byte(dptr));
}
}
return TRUE;
}
9d2: 1f 91 pop r17
9d4: 0f 91 pop r16
9d6: ff 90 pop r15
9d8: ef 90 pop r14
9da: df 90 pop r13
9dc: cf 90 pop r12
9de: bf 90 pop r11
9e0: 08 95 ret
000009e2 <LCD_DisplayASCII>:
//-----------------------------------------------------------------------------
// LCD : lcd Display ASCII.
// Size : 8X16
//-----------------------------------------------------------------------------
void LCD_DisplayASCII(uint8 XH_Dig, uint8 adrPage, uint8 adrColumn)
{
9e2: ef 92 push r14
9e4: ff 92 push r15
9e6: 0f 93 push r16
9e8: 1f 93 push r17
9ea: cf 93 push r28
9ec: df 93 push r29
9ee: f6 2e mov r15, r22
9f0: e4 2e mov r14, r20
uint8 *dptr; // dptr_adderss for Dig code.
uint8 i;
if(XH_Dig < 0x20) XH_Dig = 0x20;
9f2: 80 32 cpi r24, 0x20 ; 32
9f4: 08 f4 brcc .+2 ; 0x9f8 <LCD_DisplayASCII+0x16>
9f6: 80 e2 ldi r24, 0x20 ; 32
dptr = &ASCII[(XH_Dig-0x20)*16];
9f8: 08 2f mov r16, r24
9fa: 10 e0 ldi r17, 0x00 ; 0
9fc: 84 e0 ldi r24, 0x04 ; 4
9fe: 00 0f add r16, r16
a00: 11 1f adc r17, r17
a02: 8a 95 dec r24
a04: e1 f7 brne .-8 ; 0x9fe <LCD_DisplayASCII+0x1c>
a06: 04 57 subi r16, 0x74 ; 116
a08: 11 40 sbci r17, 0x01 ; 1
LCD_SetPageAddress(adrPage);
a0a: 8f 2d mov r24, r15
a0c: 0e 94 52 04 call 0x8a4 ; 0x8a4 <LCD_SetPageAddress>
LCD_SetColumnAddress(adrColumn);
a10: 8e 2d mov r24, r14
a12: 0e 94 45 04 call 0x88a ; 0x88a <LCD_SetColumnAddress>
a16: c0 e0 ldi r28, 0x00 ; 0
a18: d0 e0 ldi r29, 0x00 ; 0
for(i=0; i< 8; i++)
{
LCD_WriteData(pgm_read_byte(dptr));
a1a: f8 01 movw r30, r16
a1c: ec 0f add r30, r28
a1e: fd 1f adc r31, r29
a20: e4 91 lpm r30, Z+
a22: 8e 2f mov r24, r30
a24: 0e 94 b2 04 call 0x964 ; 0x964 <LCD_WriteData>
a28: 21 96 adiw r28, 0x01 ; 1
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?