📄 main.lst
字号:
756 /* function put_char size 15 (12) */
758 .Lscope10:
760 .global get_char
762 get_char:
31:usart.h ****
32:usart.h **** //标准I/O输入函数
33:usart.h **** int get_char(void)
34:usart.h **** {
764 .LM93:
765 /* prologue: frame size=0 */
766 /* prologue end (size=0) */
767 .L80:
35:usart.h **** while(!(UCSRA &(1<<RXC)));
769 .LM94:
770 01b2 5F9B sbis 43-0x20,7
771 01b4 FECF rjmp .L80
36:usart.h **** return UDR;
773 .LM95:
774 01b6 8CB1 in r24,44-0x20
37:usart.h ****
38:usart.h **** }
776 .LM96:
777 01b8 9927 clr r25
778 /* epilogue: frame size=0 */
779 01ba 0895 ret
780 /* epilogue end (size=1) */
781 /* function get_char size 5 (4) */
783 .Lscope11:
787 .global send_nbyte
789 send_nbyte:
39:usart.h ****
40:usart.h ****
41:usart.h **** //发送指定长度的字符串
42:usart.h **** void send_nbyte(unsigned char *p,unsigned char L)
43:usart.h **** {
791 .LM97:
792 /* prologue: frame size=0 */
793 01bc 0F93 push r16
794 01be 1F93 push r17
795 01c0 CF93 push r28
796 /* prologue end (size=3) */
44:usart.h **** unsigned char w;
45:usart.h **** for(w=0;w<L;w++)
798 .LM98:
799 01c2 6623 tst r22
800 01c4 49F0 breq .L89
801 01c6 8C01 movw r16,r24
802 01c8 C62F mov r28,r22
803 .L87:
46:usart.h **** {
47:usart.h **** // UDR = *(p+w);
48:usart.h **** // while(!(UCSRA &(1<<UDRE)));
49:usart.h **** //UCSRA |= (1<<UDRE);
50:usart.h **** put_char(*(p+w));
805 .LM99:
806 01ca F801 movw r30,r16
807 01cc 8191 ld r24,Z+
808 01ce 8F01 movw r16,r30
809 01d0 0E94 0000 call put_char
811 .LM100:
812 01d4 C150 subi r28,lo8(-(-1))
813 01d6 C9F7 brne .L87
814 .L89:
815 /* epilogue: frame size=0 */
816 01d8 CF91 pop r28
817 01da 1F91 pop r17
818 01dc 0F91 pop r16
819 01de 0895 ret
820 /* epilogue end (size=4) */
821 /* function send_nbyte size 19 (12) */
826 .Lscope12:
829 .global put_str
831 put_str:
51:usart.h **** }
52:usart.h ****
53:usart.h **** }
54:usart.h **** //发送字符串
55:usart.h **** void put_str(unsigned char *Str)
56:usart.h **** {
833 .LM101:
834 /* prologue: frame size=0 */
835 01e0 CF93 push r28
836 01e2 DF93 push r29
837 /* prologue end (size=2) */
838 01e4 EC01 movw r28,r24
57:usart.h **** while(*Str != '\0')
58:usart.h **** {
59:usart.h **** put_char(*Str);
60:usart.h **** Str++;
840 .LM102:
841 01e6 8881 ld r24,Y
842 01e8 8823 tst r24
843 01ea 31F0 breq .L95
844 .L93:
846 .LM103:
847 01ec 8991 ld r24,Y+
848 01ee 0E94 0000 call put_char
850 .LM104:
851 01f2 8881 ld r24,Y
852 01f4 8823 tst r24
853 01f6 D1F7 brne .L93
854 .L95:
855 /* epilogue: frame size=0 */
856 01f8 DF91 pop r29
857 01fa CF91 pop r28
858 01fc 0895 ret
859 /* epilogue end (size=3) */
860 /* function put_str size 15 (10) */
862 .Lscope13:
865 .global LCD_Write_half_char
867 LCD_Write_half_char:
869 .Ltext22:
1:lcd1602.h **** /***********************************************************************
2:lcd1602.h **** *GCC-AVR application builder : 20050214(VERSION) *
3:lcd1602.h **** *Target : M16 *
4:lcd1602.h **** *Crystal: 8.0000Mhz *
5:lcd1602.h **** ************************************************************************
6:lcd1602.h **** *Copyright (C), 2000-3000, Jianfeng Tech. Co., Ltd. *
7:lcd1602.h **** *FileName: 1602.c *
8:lcd1602.h **** *Author: Jeff Zhang *
9:lcd1602.h **** *Version : 0.0 *
10:lcd1602.h **** *Date: 2006/04/13 *
11:lcd1602.h **** *Description: display on 1602 *
12:lcd1602.h **** ************************************************************************
13:lcd1602.h **** *Function List: *
14:lcd1602.h **** *void LCD_init (void);
15:lcd1602.h **** *void LCD_INIT(void);
16:lcd1602.h **** *void LCD_write_char (unsigned command,unsigned data);
17:lcd1602.h **** *void LCD_Write_half_char (unsigned data_in);
18:lcd1602.h **** *void LCD_set_xy (unsigned char x, unsigned char y);
19:lcd1602.h **** *X为起始位置,0就是从左第一个位置开始。Y是起使行的位置,0为第一行,1为第2行。
20:lcd1602.h **** *void LCD_write_string (unsigned char X,unsigned char Y,unsigned char *s);
21:lcd1602.h **** *void DELAY_nus (unsigned int n);
22:lcd1602.h **** *void DELAY_nms (unsigned int n);
23:lcd1602.h **** ************************************************************************
24:lcd1602.h **** *History: none *
25:lcd1602.h **** *<author> <time> <version > <desc> *
26:lcd1602.h **** *--- --- --- --- *
27:lcd1602.h **** ***********************************************************************/
28:lcd1602.h **** //#include <macros.h>
29:lcd1602.h **** #include <avr/io.h>
30:lcd1602.h **** //定义MCU与LCD的接口
31:lcd1602.h **** #define LCD_EN_PORT PORTA
32:lcd1602.h **** #define LCD_RS_PORT PORTA
33:lcd1602.h **** #define LCD_EN_RS_DDR DDRA
34:lcd1602.h **** #define LCD_DATA_PORT PORTB
35:lcd1602.h **** #define LCD_DATA_DDR DDRB
36:lcd1602.h **** #define LCD_DATA_PIN PINB
37:lcd1602.h ****
38:lcd1602.h **** #define LCD_EN 0x20 //porta5 out
39:lcd1602.h **** #define LCD_RS 0x10 //porta4 out
40:lcd1602.h **** #define LCD_DATA 0xf0 //portb4/5/6/7 out
41:lcd1602.h ****
42:lcd1602.h **** //unsigned char data_temp=0x00;
43:lcd1602.h ****
44:lcd1602.h **** /*-------------------------------------------------------------------------------------------------
45:lcd1602.h **** Public function prototypes
46:lcd1602.h **** --------------------------------------------------------------------------------------------------*
47:lcd1602.h **** void LCD_init(void);
48:lcd1602.h **** void LCD_clr(void);
49:lcd1602.h **** void LCD_write_char (unsigned command,unsigned data);
50:lcd1602.h **** void LCD_Write_half_char (unsigned data_in);
51:lcd1602.h **** void LCD_set_xy (unsigned char x, unsigned char y);
52:lcd1602.h **** //X为起始位置,0就是从左第一个位置开始。Y是起使行的位置,0为第一行,1为第2行。
53:lcd1602.h **** void LCD_write_string (unsigned char X,unsigned char Y,unsigned char *s);
54:lcd1602.h **** /**********************************************************
55:lcd1602.h **** 光标命令
56:lcd1602.h **** LCD_write_char(0x0e,0); //光标开
57:lcd1602.h **** LCD_write_char(0x0d,0); //光标所在字符闪烁
58:lcd1602.h **** LCD_write_char(0x0c,0); //光标关
59:lcd1602.h **** **********************************************************/
60:lcd1602.h **** /**********************************************************
61:lcd1602.h **** TC1602B LCD DISPLAY
62:lcd1602.h **** 建立时间:2003年11月9号
63:lcd1602.h **** 修改日期:2003年11月14号
64:lcd1602.h **** LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
65:lcd1602.h **** 入命令
66:lcd1602.h **** LCD第一行显示寄存器地址:0X80-0X8F
67:lcd1602.h **** LCD第二行显示寄存器地址:0XC0-0XCF
68:lcd1602.h **** **********************************************************/
69:lcd1602.h ****
70:lcd1602.h **** void LCD_init(void)
71:lcd1602.h **** {
72:lcd1602.h **** LCD_DATA_DDR |= LCD_DATA;
73:lcd1602.h **** LCD_EN_RS_DDR |= LCD_RS | LCD_EN;
74:lcd1602.h **** LCD_DATA_PORT = 0x20;//不知道什么意思
75:lcd1602.h **** LCD_EN_PORT |= LCD_EN; // Write data to LCD
76:lcd1602.h **** DELAY_nus(1);
77:lcd1602.h **** LCD_EN_PORT &= ~LCD_EN;// Disable LCD
78:lcd1602.h **** DELAY_nus(40);
79:lcd1602.h **** LCD_write_char(0,0x28); //4bit test写命令//0X38为8位数据
80:lcd1602.h **** LCD_write_char(0,0x0c); //显示开
81:lcd1602.h **** LCD_write_char(0,0x01); //显示清屏
82:lcd1602.h **** LCD_write_char(0,0x06); //显示光标移动设置
83:lcd1602.h **** }
84:lcd1602.h **** /************************************************************************/
85:lcd1602.h **** /* LCD1602清屏 */
86:lcd1602.h **** /************************************************************************/
87:lcd1602.h **** void LCD_clr(void)
88:lcd1602.h **** {
89:lcd1602.h **** LCD_write_char(0,0x01);
90:lcd1602.h **** }
91:lcd1602.h **** /*-----------------------------------------------------------------------
92:lcd1602.h **** LCD_write_char : 英文字符串显示函数
93:lcd1602.h ****
94:lcd1602.h **** 输入参数:*s :英文字符串指针;
95:lcd1602.h **** X、Y : 显示字符串的位置,X:0-15,Y:0-1
96:lcd1602.h **** LCD第一行显示寄存器地址:0X80-0X8F
97:lcd1602.h **** LCD第一行显示寄存器地址:0XC0-0XCF
98:lcd1602.h ****
99:lcd1602.h **** 编写日期 :2003-11-19
100:lcd1602.h **** 最后修改日期 :2004-8-19
101:lcd1602.h **** -----------------------------------------------------------------------*/
102:lcd1602.h **** void LCD_write_char(unsigned command,unsigned data)
103:lcd1602.h **** { unsigned char data_temp;
104:lcd1602.h **** data_temp =0x00;
105:lcd1602.h **** if (command == 0)
106:lcd1602.h **** LCD_RS_PORT &= ~LCD_RS; // RS=0 写命令模式
107:lcd1602.h **** else
108:lcd1602.h **** LCD_RS_PORT |= LCD_RS; // RS=1 写数据模式
109:lcd1602.h ****
110:lcd1602.h **** data_temp = data;
111:lcd1602.h **** LCD_Write_half_char(data_temp); // 先写高四位
112:lcd1602.h **** data_temp = data;
113:lcd1602.h **** data_temp=data_temp << 4; // 再写低四位
114:lcd1602.h **** LCD_Write_half_char(data_temp);
115:lcd1602.h **** //DELAY_nus(1);
116:lcd1602.h **** }
117:lcd1602.h **** /*---------写高4bit到LCD,4到7位连接----*/
118:lcd1602.h **** void LCD_Write_half_char(unsigned data_in)
119:lcd1602.h **** {
871 .LM105:
872 /* prologue: frame size=0 */
873 /* prologue end (size=0) */
120:lcd1602.h **** LCD_DATA_PORT &= 0X0f; //portd4~7=0
875 .LM106:
876 01fe 98B3 in r25,56-0x20
877 0200 9F70 andi r25,lo8(15)
878 0202 98BB out 56-0x20,r25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -