📄 adclcd.lst
字号:
(0041) }
(0042) void LCD_set_xy( unsigned char x, unsigned char y ) //写地址函数
(0043) {
(0044) unsigned char address;
(0045) if (y == 0) address = 0x80 + x;
00D4 2344 TST R20
00D5 F419 BNE 0x00D9
00D6 2F46 MOV R20,R22
00D7 5840 SUBI R20,0x80
00D8 C002 RJMP 0x00DB
(0046) else
(0047) address = 0xc0 + x;
00D9 2F46 MOV R20,R22
00DA 5440 SUBI R20,0x40
(0048) LCD_write_char( address, 0 );
00DB 2722 CLR R18
00DC 2733 CLR R19
00DD 2F04 MOV R16,R20
00DE 2711 CLR R17
00DF D009 RCALL _LCD_write_char
00E0 940E0333 CALL pop_gset2
00E2 9508 RET
(0049) }
(0050) void LCD_en_write(void) //液晶使能
(0051) {
(0052) LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
00E3 9AAF SBI 0x15,7
(0053) delay_nus(1);
00E4 E001 LDI R16,1
00E5 E010 LDI R17,0
00E6 D056 RCALL _delay_nus
(0054) LCD_EN_PORT&=~LCD_EN;
00E7 98AF CBI 0x15,7
00E8 9508 RET
_LCD_write_char:
data_temp --> R22
command_temp --> R20
data --> R12
command --> R10
00E9 940E033E CALL push_gset4
00EB 0169 MOVW R12,R18
00EC 0158 MOVW R10,R16
(0055) }
(0056) void LCD_write_char(unsigned command,unsigned data) // 写数据
(0057) {
(0058) unsigned command_temp,data_temp;
(0059) command_temp=command;
00ED 01A5 MOVW R20,R10
(0060) data_temp=data;
00EE 01B6 MOVW R22,R12
(0061) delay_nus(16);
00EF E100 LDI R16,0x10
00F0 E010 LDI R17,0
00F1 D04B RCALL _delay_nus
(0062) if(command==0)
00F2 3040 CPI R20,0
00F3 0745 CPC R20,R21
00F4 F511 BNE 0x0117
(0063) {
(0064) LCD_RS_PORT|=LCD_RS; //RS=1
00F5 9AAE SBI 0x15,6
(0065) LCD_DATA_PORT&=0X0f;
00F6 B388 IN R24,0x18
00F7 708F ANDI R24,0xF
00F8 BB88 OUT 0x18,R24
(0066) LCD_DATA_PORT|=data_temp&0xf0; //写高四位
00F9 01CB MOVW R24,R22
00FA 7F80 ANDI R24,0xF0
00FB 7090 ANDI R25,0
00FC B228 IN R2,0x18
00FD 2433 CLR R3
00FE 2A28 OR R2,R24
00FF 2A39 OR R3,R25
0100 BA28 OUT 0x18,R2
(0067) LCD_en_write();
0101 DFE1 RCALL _LCD_en_write
(0068) data_temp=data_temp<<4;
0102 0F66 LSL R22
0103 1F77 ROL R23
0104 0F66 LSL R22
0105 1F77 ROL R23
0106 0F66 LSL R22
0107 1F77 ROL R23
0108 0F66 LSL R22
0109 1F77 ROL R23
(0069) LCD_DATA_PORT&=0X0f;
010A B388 IN R24,0x18
010B 708F ANDI R24,0xF
010C BB88 OUT 0x18,R24
(0070) LCD_DATA_PORT|=data_temp&0xf0; //写低四位
010D 01CB MOVW R24,R22
010E 7F80 ANDI R24,0xF0
010F 7090 ANDI R25,0
0110 B228 IN R2,0x18
0111 2433 CLR R3
0112 2A28 OR R2,R24
0113 2A39 OR R3,R25
0114 BA28 OUT 0x18,R2
(0071) LCD_en_write();
0115 DFCD RCALL _LCD_en_write
(0072) }
0116 C021 RJMP 0x0138
(0073) else
(0074) {
(0075) LCD_RS_PORT&=~LCD_RS; //RS=0
0117 98AE CBI 0x15,6
(0076) LCD_DATA_PORT&=0X0f;
0118 B388 IN R24,0x18
0119 708F ANDI R24,0xF
011A BB88 OUT 0x18,R24
(0077) LCD_DATA_PORT|=command_temp&0xf0; //写高四位
011B 01CA MOVW R24,R20
011C 7F80 ANDI R24,0xF0
011D 7090 ANDI R25,0
011E B228 IN R2,0x18
011F 2433 CLR R3
0120 2A28 OR R2,R24
0121 2A39 OR R3,R25
0122 BA28 OUT 0x18,R2
(0078) LCD_en_write();
0123 DFBF RCALL _LCD_en_write
(0079) command_temp=command_temp<<4;
0124 0F44 LSL R20
0125 1F55 ROL R21
0126 0F44 LSL R20
0127 1F55 ROL R21
0128 0F44 LSL R20
0129 1F55 ROL R21
012A 0F44 LSL R20
012B 1F55 ROL R21
(0080) LCD_DATA_PORT&=0x0f;
012C B388 IN R24,0x18
012D 708F ANDI R24,0xF
012E BB88 OUT 0x18,R24
(0081) LCD_DATA_PORT|=command_temp&0xf0; //写低四位
012F 01CA MOVW R24,R20
0130 7F80 ANDI R24,0xF0
0131 7090 ANDI R25,0
0132 B228 IN R2,0x18
0133 2433 CLR R3
0134 2A28 OR R2,R24
0135 2A39 OR R3,R25
0136 BA28 OUT 0x18,R2
(0082) LCD_en_write();
0137 DFAB RCALL _LCD_en_write
(0083) }
0138 940E0339 CALL pop_gset4
013A 9508 RET
(0084) }
(0085) /*void main(void)
(0086) {
(0087) DDRA|=LCD_DATA; // 数据为输出
(0088) DDRC|=LCD_RS|LCD_EN; //置位RS.EN
(0089) LCD_init();
(0090) for(;;) //for循环
(0091) {
(0092) LCD_write_char(0x01,0);
(0093) delay_nms(2);
(0094) LCD_write_string(0,0,"Wellcome");
(0095) LCD_write_string(0,1,"www.OURAVR.com!");
(0096) delay_nms(5000);
(0097) LCD_write_string(0,0,"happy new year!");
(0098) LCD_write_string(0,1,"amork:everfriend");
(0099) delay_nms(5000);
(0100) }
(0101) }*/
(0102) /*-----------------------------------------------------------------------
(0103) 延时函数
(0104) 系统时钟:8M
(0105) -----------------------------------------------------------------------*/
(0106) void delay_1us(void) //1us延时函数
(0107) {
(0108) asm("nop");
_delay_1us:
013B 0000 NOP
013C 9508 RET
_delay_nus:
i --> R20
n --> R22
013D 940E0342 CALL push_gset2
013F 01B8 MOVW R22,R16
(0109) }
(0110)
(0111) void delay_nus(unsigned int n) //N us延时函数
(0112) {
(0113) unsigned int i=0;
0140 2744 CLR R20
0141 2755 CLR R21
(0114) for (i=0;i<n;i++)
0142 C003 RJMP 0x0146
(0115) delay_1us();
0143 DFF7 RCALL _delay_1us
0144 5F4F SUBI R20,0xFF
0145 4F5F SBCI R21,0xFF
0146 1746 CP R20,R22
0147 0757 CPC R21,R23
0148 F3D0 BCS 0x0143
0149 940E0333 CALL pop_gset2
014B 9508 RET
(0116) }
(0117)
(0118) void delay_1ms(void) //1ms延时函数
(0119) {
(0120) unsigned int i;
(0121) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
014C 2700 CLR R16
014D 2711 CLR R17
014E C002 RJMP 0x0151
014F 5F0F SUBI R16,0xFF
0150 4F1F SBCI R17,0xFF
0151 3704 CPI R16,0x74
0152 E0E4 LDI R30,4
0153 071E CPC R17,R30
0154 F3D0 BCS 0x014F
0155 9508 RET
_delay_nms:
i --> R20
n --> R22
0156 940E0342 CALL push_gset2
0158 01B8 MOVW R22,R16
(0122) }
(0123)
(0124) void delay_nms(unsigned int n) //N ms延时函数
(0125) {
(0126) unsigned int i=0;
0159 2744 CLR R20
015A 2755 CLR R21
(0127) for (i=0;i<n;i++)
015B C003 RJMP 0x015F
(0128) delay_1ms();
015C DFEF RCALL _delay_1ms
015D 5F4F SUBI R20,0xFF
015E 4F5F SBCI R21,0xFF
015F 1746 CP R20,R22
0160 0757 CPC R21,R23
0161 F3D0 BCS 0x015C
0162 940E0333 CALL pop_gset2
0164 9508 RET
FILE: G:\AVRsource\adc\ADC.c
(0001) /*******************************************/
(0002) /* 广州天河双龙电子公司 */
(0003) /* http://www.sl.com.cn */
(0004) /* 多通道AD转换演示程序 */
(0005) /* 作者:ntzwq@wx88.net
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -