📄 jifeng_jieshou.lst
字号:
0242 98AB CBI 0x15,3
(0369) }
(0370) LCD_Delay(1);
0243 E001 LDI R16,1
0244 E010 LDI R17,0
0245 DFB2 RCALL _LCD_Delay
(0371) temp=temp<<1;
0246 0F66 LSL R22
0247 1F77 ROL R23
(0372) Hign_LCD_SCL;
0248 9AAC SBI 0x15,4
(0373) LCD_Delay(1);
0249 E001 LDI R16,1
024A E010 LDI R17,0
024B DFAC RCALL _LCD_Delay
(0374) Low_LCD_SCL;
024C 98AC CBI 0x15,4
024D 5F4F SUBI R20,0xFF
024E 4F5F SBCI R21,0xFF
024F 3048 CPI R20,0x8
0250 E0E0 LDI R30,0
0251 075E CPC R21,R30
0252 F354 BLT 0x023D
(0375) }
(0376) Low_LCD_RS;
0253 98AD CBI 0x15,5
(0377) Hign_LCD_CS; //先cs置0,然后把数据都送到口上准备好(产生上升沿),最后才置片选cs为1
0254 9AAF SBI 0x15,7
0255 D22F RCALL pop_gset2
0256 9508 RET
_Lcd_Write_command:
i --> R20
temp --> R22
COMMAND --> R20
0257 D239 RCALL push_gset2
0258 2F40 MOV R20,R16
(0378) }
(0379) //---------------------------------LCD写命令函数--------------------------------
(0380) void Lcd_Write_command(uchar COMMAND)
(0381) {
(0382) uchar i,temp;
(0383) temp = COMMAND;
0259 2F64 MOV R22,R20
(0384) Hign_LCD_RS;
025A 9AAD SBI 0x15,5
(0385) Hign_LCD_CS;
025B 9AAF SBI 0x15,7
(0386) Hign_LCD_SCL;
025C 9AAC SBI 0x15,4
(0387) LCD_Delay(1);
025D E001 LDI R16,1
025E E010 LDI R17,0
025F DF98 RCALL _LCD_Delay
(0388) Low_LCD_RS; //RS=0 为写命令
0260 98AD CBI 0x15,5
(0389) Low_LCD_CS;
0261 98AF CBI 0x15,7
(0390) Low_LCD_SCL;
0262 98AC CBI 0x15,4
(0391) LCD_Delay(1);
0263 E001 LDI R16,1
0264 E010 LDI R17,0
0265 DF92 RCALL _LCD_Delay
(0392) for(i=0;i<8;i++)
0266 2744 CLR R20
0267 C010 RJMP 0x0278
(0393) {
(0394) Low_LCD_SCL;
0268 98AC CBI 0x15,4
(0395) if(temp&0x80)
0269 FF67 SBRS R22,7
026A C002 RJMP 0x026D
(0396) {
(0397) Hign_LCD_SI;
026B 9AAB SBI 0x15,3
(0398) }
026C C001 RJMP 0x026E
(0399) else
(0400) {
(0401) Low_LCD_SI;
026D 98AB CBI 0x15,3
(0402) }
(0403) temp=temp<<1;
026E 0F66 LSL R22
(0404) LCD_Delay(1);
026F E001 LDI R16,1
0270 E010 LDI R17,0
0271 DF86 RCALL _LCD_Delay
(0405) Hign_LCD_SCL;
0272 9AAC SBI 0x15,4
(0406) LCD_Delay(1);
0273 E001 LDI R16,1
0274 E010 LDI R17,0
0275 DF82 RCALL _LCD_Delay
(0407) Low_LCD_SCL;
0276 98AC CBI 0x15,4
0277 9543 INC R20
0278 3048 CPI R20,0x8
0279 F370 BCS 0x0268
(0408) }
(0409) Hign_LCD_RS;
027A 9AAD SBI 0x15,5
(0410) Hign_LCD_CS; //用了temp后,原来的command的就不会变了
027B 9AAF SBI 0x15,7
027C D208 RCALL pop_gset2
027D 9508 RET
_Lcd_CURSOR:
add_col --> R20
add_page --> R22
027E D212 RCALL push_gset2
027F 2F42 MOV R20,R18
0280 2F60 MOV R22,R16
(0411) }
(0412) //-------------------------------LCD光标函数------------------------------------
(0413) void Lcd_CURSOR(uchar add_page,uchar add_col) //光标定位 //8页(<0fh), 且128列(>0fh)
(0414) { //每页8行
(0415) Lcd_Write_command(0xB0+(add_page&0x0f)); //+号为合成为一个字节(其实就是或)B0+0x
0281 2F06 MOV R16,R22
0282 700F ANDI R16,0xF
0283 5500 SUBI R16,0x50
0284 DFD2 RCALL _Lcd_Write_command
(0416) Lcd_Write_command(0x10|(add_col>>4)); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
0285 2F04 MOV R16,R20
0286 9502 SWAP R16
0287 700F ANDI R16,0xF
0288 6100 ORI R16,0x10
0289 DFCD RCALL _Lcd_Write_command
(0417) Lcd_Write_command(add_col&0x0f); //Set column address LSB(00+xx)即Y3 Y2 Y1 Y0
028A 2F04 MOV R16,R20
028B 700F ANDI R16,0xF
028C DFCA RCALL _Lcd_Write_command
028D D1F7 RCALL pop_gset2
028E 9508 RET
_Lcd_Clear:
i --> R20
j --> R22
028F D201 RCALL push_gset2
(0418) }
(0419) //-------------------------------LCD清屏函数------------------------------------
(0420) void Lcd_Clear(void) //128x64字节,实际中一般要多
(0421) {
(0422) uchar i,j;
(0423) for(i=0;i<9;i++) //>8页
0290 2744 CLR R20
0291 C00E RJMP 0x02A0
(0424) {
(0425) Lcd_CURSOR(i,0);
0292 2722 CLR R18
0293 2F04 MOV R16,R20
0294 DFE9 RCALL _Lcd_CURSOR
(0426) for(j=0;j<132;j++) //>128列
0295 2766 CLR R22
0296 C006 RJMP 0x029D
(0427) {
(0428) Lcd_CURSOR(i,j); //列在变,光标也在不停的换列
0297 2F26 MOV R18,R22
0298 2F04 MOV R16,R20
0299 DFE4 RCALL _Lcd_CURSOR
(0429) Lcd_Write_Data(0); //定好一页后,再一列一列的写00h,列在变
029A 2700 CLR R16
029B DF8F RCALL _Lcd_Write_Data
029C 9563 INC R22
029D 3864 CPI R22,0x84
029E F3C0 BCS 0x0297
029F 9543 INC R20
02A0 3049 CPI R20,0x9
02A1 F380 BCS 0x0292
02A2 D1E2 RCALL pop_gset2
02A3 9508 RET
_Test_LCD:
i --> R20
j --> R22
02A4 D1EC RCALL push_gset2
(0430) }
(0431) }
(0432) }
(0433) //--------------------------------LCD测试---------------------------------------
(0434) void Test_LCD(void)
(0435) {
(0436) uchar i,j;
(0437) for(i=0xB0;i<0xB8;i++) //B0-B8共8页
02A5 EB40 LDI R20,0xB0
02A6 C014 RJMP 0x02BB
(0438) {
(0439) Lcd_Write_command(i); //+号为合成为一个字节(其实就是或)B0+0x
02A7 2F04 MOV R16,R20
02A8 DFAE RCALL _Lcd_Write_command
(0440) Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
02A9 E100 LDI R16,0x10
02AA DFAC RCALL _Lcd_Write_command
(0441) Lcd_Write_command(0x01);
02AB E001 LDI R16,1
02AC DFAA RCALL _Lcd_Write_command
(0442) Lcd_CURSOR(i,0);
02AD 2722 CLR R18
02AE 2F04 MOV R16,R20
02AF DFCE RCALL _Lcd_CURSOR
(0443) for(j=0;j<132;j++)
02B0 2766 CLR R22
02B1 C006 RJMP 0x02B8
(0444) { //每读写一次,列会自动加1
(0445) Lcd_CURSOR(i,j); //列在变,光标也在不停的换列,重新进行定位
02B2 2F26 MOV R18,R22
02B3 2F04 MOV R16,R20
02B4 DFC9 RCALL _Lcd_CURSOR
(0446) Lcd_Write_Data(0x01); //检测写进f0h???4点亮4点暗
02B5 E001 LDI R16,1
02B6 DF74 RCALL _Lcd_Write_Data
02B7 9563 INC R22
02B8 3864 CPI R22,0x84
02B9 F3C0 BCS 0x02B2
02BA 9543 INC R20
02BB 3B48 CPI R20,0xB8
02BC F350 BCS 0x02A7
02BD D1C7 RCALL pop_gset2
02BE 9508 RET
_dis_1616hz:
i --> R20
j --> R14
hz --> R22
row --> R10
x2 --> R12
x1 --> R14
02BF D1CB RCALL push_gset5
02C0 2EC2 MOV R12,R18
02C1 2EE0 MOV R14,R16
02C2 84AA LDD R10,Y+10
02C3 856C LDD R22,Y+12
02C4 857D LDD R23,Y+13
(0447) }
(0448)
(0449) }
(0450) }
(0451) /*
(0452) //------------------------------------------------------------------------------
(0453) void dis_biankuang() //边框设计
(0454) {
(0455) uchar i,j,k;
(0456) for(i=0xB0;i<0xB8;i++) //2页16行
(0457) {
(0458) Lcd_Write_command(i); //+号为合成为一个字节(其实就是或)B0+0x
(0459) Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
(0460) Lcd_Write_command(0x01);
(0461) Lcd_CURSOR(i,0);
(0462) for(j=0;j<132;j++)
(0463) { //每读写一次,列会自动加1
(0464) Lcd_CURSOR(i,j); //改变列位置,列在变,光标也在不停的换列,重新进行定位
(0465) Lcd_Write_Data(0x03); //检测写进f0h???4点亮4点暗
(0466) }
(0467) for(k=0xB0;k<0xB7;k++)
(0468) {
(0469) for(j=2;j<6;j++)
(0470) {
(0471) Lcd_CURSOR(k,j); //改变列位置,列在变,光标也在不停的换列,重新进行定位
(0472) Lcd_Write_Data(0xff);
(0473) }
(0474) for(j=130;j<132;j++)
(0475) {
(0476) Lcd_CURSOR(k,j); //改变列位置,列在变,光标也在不停的换列,重新进行定位
(0477) Lcd_Write_Data(0xff);
(0478) }
(0479) }
(0480) i=i+7;
(0481) for(j=0;j<132;j++)
(0482) { //每读写一次,列会自动加1
(0483) Lcd_CURSOR(i,j); //列在变,光标也在不停的换列,重新进行定位
(0484) Lcd_Write_Data(0x03); //检测写进f0h???4点亮4点暗
(0485) }
(0486)
(0487)
(0488) }
(0489) }
(0490) */
(0491) //------------------------------16*16汉字显示-----------------------------------
(0492) void dis_1616hz(uchar x1,uchar x2,uchar row,const uchar hz[]) //16*16
(0493) {
(0494) uchar i,j;
(0495) for(i=x1;i<x2;i++) //2页16行
02C5 2D4E MOV R20,R14
02C6 C032 RJMP 0x02F9
(0496) {
(0497) Lcd_Write_command(i); //+号为合成为一个字节(其实就是或)B0+0x
02C7 2F04 MOV R16,R20
02C8 DF8E RCALL _Lcd_Write_command
(0498) Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
02C9 E100 LDI R16,0x10
02CA DF8C RCALL _Lcd_Write_command
(0499) Lcd_Write_command(0x01);
02CB E001 LDI R16,1
02CC DF8A RCALL _Lcd_Write_command
(0500) Lcd_CURSOR(i,0);
02CD 2722 CLR R18
02CE 2F04 MOV R16,R20
02CF DFAE RCALL _Lcd_CURSOR
(0501) for(j=0;j<16;j++)
02D0 24EE CLR R14
02D1 C00E RJMP 0x02E0
(0502) { //每读写一次,列会自动加1
(0503) Lcd_CURSOR(i,j+row); //改变列位置,列在变,光标也在不停的换列,重新进行定位
02D2 2D2E MOV R18,R14
02D3 0D2A ADD R18,R10
02D4 2F04 MOV R16,R20
02D5 DFA8 RCALL _Lcd_CURSOR
(0504) Lcd_Write_Data(hz[j]); //检测写进f0h???4点亮4点暗
02D6 2C2E MOV R2,R14
02D7 2433 CLR R3
02D8 0E26 ADD R2,R22
02D9 1E37 ADC R3,R23
02DA 2DE2 MOV R30,R2
02DB 2DF3 MOV R31,R3
02DC 95C8 LPM
02DD 2D00 MOV R16,R0
02DE DF4C RCALL _Lcd_Write_Data
02DF 94E3 INC R14
02E0 2D8E MOV R24,R14
02E1 3180 CPI R24,0x10
02E2 F378 BCS 0x02D2
(0505) }
(0506) i++;
02E3 9543 INC R20
(0507) for(j=0;j<16;j++)
02E4 24EE CLR R14
02E5 C00F RJMP 0x02F5
(0508) { //每读写一次,列会自动加1
(0509) Lcd_CURSOR(i,j+row); //列在变,光标也在不停的换列,重新进行定位
02E6 2D2E MOV R18,R14
02E7 0D2A ADD R18,R10
02E8 2F04 MOV R16,R20
02E9 DF94 RCALL _Lcd_CURSOR
(0510) Lcd_Write_Data(hz[j+16]); //检测写进f0h???4点亮4点暗
02EA 2D8E MOV R24,R14
02EB 2799 CLR R25
02EC 0F86 ADD R24,R22
02ED 1F97 ADC R25,R23
02EE 9640 ADIW R24,0x10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -