?? 12864串口顯示.lst
字號:
__text_start:
__start:
00EB E5CF LDI R28,0x5F
00EC E0D4 LDI R29,4
00ED BFCD OUT 0x3D,R28
00EE BFDE OUT 0x3E,R29
00EF 51C0 SUBI R28,0x10
00F0 40D0 SBCI R29,0
00F1 EA0A LDI R16,0xAA
00F2 8308 STD Y+0,R16
00F3 2400 CLR R0
00F4 EFE5 LDI R30,0xF5
00F5 E0F1 LDI R31,1
00F6 E011 LDI R17,1
00F7 3FE6 CPI R30,0xF6
00F8 07F1 CPC R31,R17
00F9 F011 BEQ 0x00FC
00FA 9201 ST R0,Z+
00FB CFFB RJMP 0x00F7
00FC 8300 STD Z+0,R16
00FD E4E0 LDI R30,0x40
00FE E0F0 LDI R31,0
00FF E6A0 LDI R26,0x60
0100 E0B0 LDI R27,0
0101 E011 LDI R17,1
0102 3DE5 CPI R30,0xD5
0103 07F1 CPC R31,R17
0104 F021 BEQ 0x0109
0105 95C8 LPM
0106 9631 ADIW R30,1
0107 920D ST R0,X+
0108 CFF9 RJMP 0x0102
0109 D615 RCALL _main
_exit:
010A CFFF RJMP _exit
FILE: C:\DOCUME~1\Administrator\桌面\16實驗\串口顯示0\12864_chuankou_drive.h
(0001) #include<iom8v.h>
(0002) #include<macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) #define CS_0 PORTD&=~(1<<PDD4) //片選RS
(0006) #define CS_1 PORTD|=(1<<PD4)
(0007) #define SID_0 PORTD&=~(1<<PD5) //數據 RW
(0008) #define SID_1 PORTD|=(1<<PD5)
(0009) #define SCLK_0 PORTD&=~(1<<PD6) //時鐘 E
(0010) #define SCLK_1 PORTD|=(1<<PD6)
(0011) #define RST_0 PORTD&=~(1<<PD7) //復位 RST
(0012) #define RST_1 PORTD|=(1<<PD7)
(0013) /**********************函數聲明***************************************/
(0014) void delay_us(int t);
(0015) void delay_ms(unsigned int t);
(0016) void send_byte(uchar bbyte);
(0017) void lcd_wcmd(uchar cmd);
(0018) void lcd_wdat(uchar dat);
(0019) //*******************延時 us 8****************************************
(0020) void delay_us(int t)
(0021) {
(0022) do
(0023) t--;
_delay_us:
t --> R16
010B 5001 SUBI R16,1
010C 4010 SBCI R17,0
(0024) while(t>1);
010D E081 LDI R24,1
010E E090 LDI R25,0
010F 1780 CP R24,R16
0110 0791 CPC R25,R17
0111 F3CC BLT 0x010B
0112 9508 RET
_delay_ms:
t --> R20
0113 D6FD RCALL push_gset1
0114 01A8 MOVW R20,R16
(0025) }
(0026) //*******************延時 ms *****************************************
(0027) void delay_ms(unsigned int t)
(0028) {
0115 C005 RJMP 0x011B
(0029) while(t!=0)
(0030) {
(0031) delay_us(1142);
0116 E706 LDI R16,0x76
0117 E014 LDI R17,4
0118 DFF2 RCALL _delay_us
(0032) t--;}
0119 5041 SUBI R20,1
011A 4050 SBCI R21,0
011B 3040 CPI R20,0
011C 0745 CPC R20,R21
011D F7C1 BNE 0x0116
011E D6F5 RCALL pop_gset1
011F 9508 RET
_send_byte:
i --> R20
bbyte --> R16
0120 D6F0 RCALL push_gset1
(0033) }
(0034) /*********************發送1字節函數****************************/
(0035) void send_byte(uchar bbyte)
(0036) {
(0037) uchar i;
(0038) for(i=0;i<8;i++)
0121 2744 CLR R20
0122 C009 RJMP 0x012C
(0039) {
(0040) if(bbyte&0X80)
0123 FF07 SBRS R16,7
0124 C002 RJMP 0x0127
(0041) {SID_1;}
0125 9A95 SBI 0x12,5
0126 C001 RJMP 0x0128
(0042) else
(0043) {SID_0;}
0127 9895 CBI 0x12,5
(0044) SCLK_1;
0128 9A96 SBI 0x12,6
(0045) SCLK_0;
0129 9896 CBI 0x12,6
(0046) bbyte<<=1;
012A 0F00 LSL R16
012B 9543 INC R20
012C 3048 CPI R20,0x8
012D F3A8 BCS 0x0123
012E D6E5 RCALL pop_gset1
012F 9508 RET
_lcd_wcmd:
Ldata --> R20
Hdata --> R22
star_data --> R10
cmd --> R20
0130 D6FA RCALL push_gset3
0131 2F40 MOV R20,R16
(0047) }
(0048) }
(0049) /************************寫命令函數**********************************/
(0050) void lcd_wcmd(uchar cmd)
(0051) {
(0052) uchar star_data,Hdata,Ldata;
(0053) star_data=0XF8;
0132 EF88 LDI R24,0xF8
0133 2EA8 MOV R10,R24
(0054) Hdata=cmd&0XF0;
0134 2F64 MOV R22,R20
0135 7F60 ANDI R22,0xF0
(0055) Ldata=(cmd<<4)&0XF0;
0136 2F84 MOV R24,R20
0137 708F ANDI R24,0xF
0138 9582 SWAP R24
0139 7F80 ANDI R24,0xF0
013A 2F48 MOV R20,R24
(0056) send_byte(star_data);
013B 2D0A MOV R16,R10
013C DFE3 RCALL _send_byte
(0057) delay_us(1);
013D E001 LDI R16,1
013E E010 LDI R17,0
013F DFCB RCALL _delay_us
(0058) send_byte(Hdata);
0140 2F06 MOV R16,R22
0141 DFDE RCALL _send_byte
(0059) delay_us(1);
0142 E001 LDI R16,1
0143 E010 LDI R17,0
0144 DFC6 RCALL _delay_us
(0060) send_byte(Ldata);
0145 2F04 MOV R16,R20
0146 DFD9 RCALL _send_byte
(0061) delay_us(1);
0147 E001 LDI R16,1
0148 E010 LDI R17,0
0149 DFC1 RCALL _delay_us
014A D6C0 RCALL pop_gset3
014B 9508 RET
_lcd_wdat:
Ldata --> R20
Hdata --> R22
star_data --> R10
dat --> R20
014C D6DE RCALL push_gset3
014D 2F40 MOV R20,R16
(0062) }
(0063) /**************************寫數據函數***************************************/
(0064) void lcd_wdat(uchar dat)
(0065) {
(0066) uchar star_data,Hdata,Ldata;
(0067) star_data=0XFA;
014E EF8A LDI R24,0xFA
014F 2EA8 MOV R10,R24
(0068) Hdata=dat&0XF0;
0150 2F64 MOV R22,R20
0151 7F60 ANDI R22,0xF0
(0069) Ldata=(dat<<4)&0XF0;
0152 2F84 MOV R24,R20
0153 708F ANDI R24,0xF
0154 9582 SWAP R24
0155 7F80 ANDI R24,0xF0
0156 2F48 MOV R20,R24
(0070) send_byte(star_data);
0157 2D0A MOV R16,R10
0158 DFC7 RCALL _send_byte
(0071) delay_us(1);
0159 E001 LDI R16,1
015A E010 LDI R17,0
015B DFAF RCALL _delay_us
(0072) send_byte(Hdata);
015C 2F06 MOV R16,R22
015D DFC2 RCALL _send_byte
(0073) delay_us(1);
015E E001 LDI R16,1
015F E010 LDI R17,0
0160 DFAA RCALL _delay_us
(0074) send_byte(Ldata);
0161 2F04 MOV R16,R20
0162 DFBD RCALL _send_byte
(0075) delay_us(1);
0163 E001 LDI R16,1
0164 E010 LDI R17,0
0165 DFA5 RCALL _delay_us
0166 D6A4 RCALL pop_gset3
0167 9508 RET
(0076)
(0077) }
(0078) /**************************初始化函數*************************************/
(0079) void lcd_init(void)
(0080) {
(0081) //PSB_0;
(0082) RST_0;
_lcd_init:
0168 9897 CBI 0x12,7
(0083) delay_ms(3);
0169 E003 LDI R16,3
016A E010 LDI R17,0
016B DFA7 RCALL _delay_ms
(0084) RST_1;
016C 9A97 SBI 0x12,7
(0085) delay_ms(3);
016D E003 LDI R16,3
016E E010 LDI R17,0
016F DFA3 RCALL _delay_ms
(0086) CS_1;
0170 9A94 SBI 0x12,4
(0087) lcd_wcmd(0X34);
0171 E304 LDI R16,0x34
0172 DFBD RCALL _lcd_wcmd
(0088) delay_ms(5);
0173 E005 LDI R16,5
0174 E010 LDI R17,0
0175 DF9D RCALL _delay_ms
(0089) lcd_wcmd(0X30);
0176 E300 LDI R16,0x30
0177 DFB8 RCALL _lcd_wcmd
(0090) delay_ms(5);
0178 E005 LDI R16,5
0179 E010 LDI R17,0
017A DF98 RCALL _delay_ms
(0091) lcd_wcmd(0X0C);
017B E00C LDI R16,0xC
017C DFB3 RCALL _lcd_wcmd
(0092) delay_ms(5);
017D E005 LDI R16,5
017E E010 LDI R17,0
017F DF93 RCALL _delay_ms
(0093) lcd_wcmd(0X01);
0180 E001 LDI R16,1
0181 DFAE RCALL _lcd_wcmd
(0094) delay_ms(5);
0182 E005 LDI R16,5
0183 E010 LDI R17,0
0184 DF8E RCALL _delay_ms
0185 9508 RET
(0095)
(0096) }
(0097) /********************清屏*********************/
(0098) void lcd_clr(void)
(0099) {
(0100) lcd_wcmd(0X01);
_lcd_clr:
0186 E001 LDI R16,1
0187 DFA8 RCALL _lcd_wcmd
(0101) delay_ms(5);
0188 E005 LDI R16,5
0189 E010 LDI R17,0
018A DF88 RCALL _delay_ms
018B 9508 RET
_locatexy:
y --> R22
x --> R20
018C D69B RCALL push_gset2
018D 2F62 MOV R22,R18
018E 2F40 MOV R20,R16
(0102) }
(0103) /********************位置定義***********************/
(0104) void locatexy(uchar x,uchar y)
(0105) {
(0106) if(y==0){lcd_wcmd(0X80+x);}
018F 2366 TST R22
0190 F421 BNE 0x0195
0191 2F04 MOV R16,R20
0192 5800 SUBI R16,0x80
0193 DF9C RCALL _lcd_wcmd
0194 C011 RJMP 0x01A6
(0107) else if(y==1){lcd_wcmd(0X90+x);}
0195 3061 CPI R22,1
0196 F421 BNE 0x019B
0197 2F04 MOV R16,R20
0198 5700 SUBI R16,0x70
0199 DF96 RCALL _lcd_wcmd
019A C00B RJMP 0x01A6
(0108) else if(y==2){lcd_wcmd(0X88+x);}
019B 3062 CPI R22,2
019C F421 BNE 0x01A1
019D 2F04 MOV R16,R20
019E 5708 SUBI R16,0x78
019F DF90 RCALL _lcd_wcmd
01A0 C005 RJMP 0x01A6
(0109) else if(y==3){lcd_wcmd(0X98+x);}
01A1 3063 CPI R22,3
01A2 F419 BNE 0x01A6
01A3 2F04 MOV R16,R20
01A4 5608 SUBI R16,0x68
01A5 DF8A RCALL _lcd_wcmd
01A6 D662 RCALL pop_gset2
01A7 9508 RET
_lcd_write_str:
s --> R20
y --> R10
x --> R22
01A8 D682 RCALL push_gset3
01A9 2EA2 MOV R10,R18
01AA 2F60 MOV R22,R16
01AB 814E LDD R20,Y+6
01AC 815F LDD R21,Y+7
(0110) }
(0111) /********************顯示內容***********************/
(0112) void lcd_write_str(uchar x,uchar y,uchar *s)
(0113) {
(0114) locatexy(x,y);
01AD 2D2A MOV R18,R10
01AE 2F06 MOV R16,R22
01AF DFDC RCALL _locatexy
01B0 C005 RJMP 0x01B6
(0115) while(*s)
(0116) {
(0117) lcd_wdat(*s);
01B1 01FA MOVW R30,R20
01B2 8100 LDD R16,Z+0
01B3 DF98 RCALL _lcd_wdat
(0118) s++;
01B4 5F4F SUBI R20,0xFF
01B5 4F5F SBCI R21,0xFF
01B6 01FA MOVW R30,R20
01B7 8020 LDD R2,Z+0
01B8 2022 TST R2
01B9 F7B9 BNE 0x01B1
01BA D650 RCALL pop_gset3
01BB 9508 RET
FILE: C:\DOCUME~1\Administrator\桌面\16實驗\串口顯示0\DS18B20_drive.h
(0001) /*********************************************************************
(0002) 返回三個值dis_buf_18b20[0]小數dis_buf_18b20[1]個位dis_buf_18b20[2]十位
(0003) 調用Read_1820_temperature();
(0004) **********************************************************************/
(0005) #include <iom8v.h>
(0006) #include <macros.h>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -