📄 mnj_1335.lst
字号:
__text_start:
__start:
0CF4 E5CF LDI R28,0x5F
0CF5 E0D4 LDI R29,4
0CF6 BFCD OUT 0x3D,R28
0CF7 BFDE OUT 0x3E,R29
0CF8 52C0 SUBI R28,0x20
0CF9 40D0 SBCI R29,0
0CFA EA0A LDI R16,0xAA
0CFB 8308 STD Y+0,R16
0CFC 2400 CLR R0
0CFD E9E3 LDI R30,0x93
0CFE E0F1 LDI R31,1
0CFF E011 LDI R17,1
0D00 39E5 CPI R30,0x95
0D01 07F1 CPC R31,R17
0D02 F011 BEQ 0x0D05
0D03 9201 ST R0,Z+
0D04 CFFB RJMP 0x0D00
0D05 8300 STD Z+0,R16
0D06 EBE4 LDI R30,0xB4
0D07 E1F8 LDI R31,0x18
0D08 E6A0 LDI R26,0x60
0D09 E0B0 LDI R27,0
0D0A E119 LDI R17,0x19
0D0B 3EE7 CPI R30,0xE7
0D0C 07F1 CPC R31,R17
0D0D F021 BEQ 0x0D12
0D0E 95C8 LPM
0D0F 9631 ADIW R30,1
0D10 920D ST R0,X+
0D11 CFF9 RJMP 0x0D0B
0D12 940E119B CALL _main
_exit:
0D14 CFFF RJMP _exit
FILE: MNJ_1335.c
(0001) /*-------------------------------------------------------
(0002) MD-500Ⅱ模拟定位机(ICCAVR)显示程序 2.0
(0003) 作者:cyk8 2004.12.3
(0004) 1、应包含头文件slavr.h
(0005) 2、在工程选项中的Additional Lib中填入slavr
(0006) 使编译器使用附加库文件libslavr.a
(0007) 3、数据线D0~D7接PORTC
(0008) WR------>用PD4代替
(0009) RD------>用PD3代替
(0010) A0------>用PD6代替
(0011) RESET接RESET
(0012) CS接地
(0013) 4, 通讯协议:
(0014) 主机发送的控制指令采用6个字符组成的字符串格式“(X/Y/S/C/G/T)”+数据1,数据2,数据3,数据4+“#”,
(0015) 主机共发7B,7C,7D,7E,7F,
(0016) a.第一个发的是X,Y,SAD,C,G,TH的ASCⅡ
(0017) X--->58H(X)
(0018) Y--->59H(Y)
(0019) SAD->53H(S)
(0020) C--->43H(C)
(0021) G--->47H(G)
(0022) TH-->54H(T)
(0023) b.7B,7C,7D,7E四个数据
(0024) c.最后一个7F=#23H(ASCⅡ="#"表示结束符号)
(0025)
(0026) ---------------------------------------------------------*/
(0027) #include<ioM16V.h>
(0028) #include <stdlib.h>
(0029) #include <macros.h>
(0030) #include <slavr.h>
(0031)
(0032) //宏定义//
(0033) #define Uchar unsigned char
(0034) #define Uint unsigned int
(0035) #define paraP9 0x28 // 相对于320 X 240
(0036) #define BasePart1 0x00
(0037) #define BasePart2 0x40
(0038) #define BasePart3 0x80
(0039) #define BasePart4 0x00
(0040) #define SystemSet 0x40
(0041) #define Scroll 0x44
(0042) #define DispOn 0x59
(0043) #define DispOff 0x58
(0044) #define Ovlay 0x5b
(0045) #define HdotScr 0x5a
(0046) #define CsrForm 0x5d
(0047) #define CgramAdr 0x5c
(0048) #define CsrDirR 0x4c
(0049) #define CsrDirL 0x4d
(0050) #define CsrDirU 0x4e
(0051) #define CsrDirD 0x4f
(0052) #define CsrW 0x46
(0053) #define CsrR 0x47
(0054) #define mWrite 0x42
(0055) #define mRead 0x43
(0056) #define A0_H PORTD |=0x40
(0057) #define A0_L PORTD &=0xbf
(0058) #define RD_H PORTD |=0x08
(0059) #define WR_H PORTD |=0x10
(0060) #define WR_L PORTD &=0xef
(0061) #define LcmRdataPort A0_H
(0062) #define LcmStatusPort A0_L
(0063)
(0064) unsigned char RX_data[4]={0}; //串口接收的数据
(0065) unsigned char RX_counter=0; //串口接收到的字节数计数器
(0066)
(0067) void UART_init (void);
(0068) void putchar (unsigned char c);
(0069) void puts (unsigned char *s);
(0070) void UART_rx (void);
(0071) void delay_nms (unsigned int n);
(0072)
(0073) const Uchar *ptr; //液晶字符指针变量
(0074)
(0075) Uchar ParaSysTable8[]= {
(0076) 0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00 // P1-P8参数
(0077) };
(0078) Uchar ParaScrTableA[]= {
(0079) 0x00,BasePart1,0xF0,0x00,BasePart2,0xF0,0x00,BasePart3,0x00,BasePart4
(0080) };
(0081)
(0082) void PutCdotInAlpha( Uchar Ox, Uchar Oy, Uchar Cnumber );
(0083) void PutWordInAlpha(void);
(0084) void TextDisp( Uchar Ox,Uchar Oy, const Uchar *ptr );
(0085) void LcmInition( void );
(0086) void LcmClear( void );
(0087) void SelfInit( void );
(0088) void delay(Uint t);
(0089) void RollLaft( void );
(0090) void Rollright( void );
(0091) void RollDown( void );
(0092) void RollUp( void );
(0093) void BuildCgram( Uchar Base, Uchar EndlCode );
(0094) void PutWordInAlpha(void);
(0095) void PutWordInGraph( void );
(0096) void PutWord24InGraph( void );
(0097) void Linexy(Uint x0,Uchar y0,Uint xt,Uchar yt,Uchar att);
(0098) void Sample3( void );
(0099) void Point(Uint Px, Uchar Py, Uchar attr );
(0100)
(0101)
(0102)
(0103)
(0104) /* 微秒级延时函数(mS) 本延时函数实际为delay_us(int time)中的int time=1->实际等于2us */
(0105) void delay_us(int time)
(0106) {
(0107) do
(0108) {
(0109) time--;
_delay_us:
time --> R16
0D15 5001 SUBI R16,1
0D16 4010 SBCI R17,0
(0110) }
(0111) while (time>1);
0D17 E081 LDI R24,1
0D18 E090 LDI R25,0
0D19 1780 CP R24,R16
0D1A 0791 CPC R25,R17
0D1B F3CC BLT 0x0D15
(0112) }
0D1C 9508 RET
_delay_ms:
time --> R20
0D1D 940E11D0 CALL push_gset1
0D1F 01A8 MOVW R20,R16
(0113)
(0114) /* 毫秒级延时函数 */
(0115) void delay_ms(unsigned int time)
(0116) {
0D20 C005 RJMP 0x0D26
(0117) while(time!=0)
(0118) {
(0119) delay_us(500);
0D21 EF04 LDI R16,0xF4
0D22 E011 LDI R17,1
0D23 DFF1 RCALL _delay_us
(0120) time--;
0D24 5041 SUBI R20,1
0D25 4050 SBCI R21,0
0D26 3040 CPI R20,0
0D27 0745 CPC R20,R21
0D28 F7C1 BNE 0x0D21
(0121) }
(0122) }
0D29 940E11D3 CALL pop_gset1
0D2B 9508 RET
(0123) void sed1335_write_command(Uchar commandcode)
(0124) {
(0125) PORTC=commandcode;
_sed1335_write_command:
commandcode --> R16
0D2C BB05 OUT 0x15,R16
(0126) A0_H;
0D2D 9A96 SBI 0x12,6
(0127) RD_H;
0D2E 9A93 SBI 0x12,3
(0128) WR_L;
0D2F B382 IN R24,0x12
0D30 7E8F ANDI R24,0xEF
0D31 BB82 OUT 0x12,R24
(0129) WR_H;
0D32 9A94 SBI 0x12,4
(0130) }
0D33 9508 RET
(0131)
(0132) void sed1335_write_data(Uchar data)
(0133) {
(0134) PORTC=data;
_sed1335_write_data:
data --> R16
0D34 BB05 OUT 0x15,R16
(0135) A0_L;
0D35 B382 IN R24,0x12
0D36 7B8F ANDI R24,0xBF
0D37 BB82 OUT 0x12,R24
(0136) RD_H;
0D38 9A93 SBI 0x12,3
(0137) WR_L;
0D39 B382 IN R24,0x12
0D3A 7E8F ANDI R24,0xEF
0D3B BB82 OUT 0x12,R24
(0138) WR_H;
0D3C 9A94 SBI 0x12,4
(0139) }
0D3D 9508 RET
(0140) //CPU初始化//
(0141) void SelfInit( void )
(0142) {
(0143) DDRA =0xff;
_SelfInit:
0D3E EF8F LDI R24,0xFF
0D3F BB8A OUT 0x1A,R24
(0144) PORTA = 0x00;
0D40 2422 CLR R2
0D41 BA2B OUT 0x1B,R2
(0145) DDRB =0xff;
0D42 BB87 OUT 0x17,R24
(0146) PORTB = 0x00;
0D43 BA28 OUT 0x18,R2
(0147) DDRC = 0xff;
0D44 BB84 OUT 0x14,R24
(0148) PORTC = 0x00;
0D45 BA25 OUT 0x15,R2
(0149) DDRD = 0xff;
0D46 BB81 OUT 0x11,R24
(0150) PORTD = 0xff;
0D47 BB82 OUT 0x12,R24
(0151)
(0152) }
0D48 9508 RET
_LcmInition:
i1 --> R20
0D49 940E11D0 CALL push_gset1
(0153) //液晶初始化//
(0154) void LcmInition( void )
(0155) {
(0156) Uint i1;
(0157) delay_ms(50);
0D4B E302 LDI R16,0x32
0D4C E010 LDI R17,0
0D4D DFCF RCALL _delay_ms
(0158) delay_ms(50);
0D4E E302 LDI R16,0x32
0D4F E010 LDI R17,0
0D50 DFCC RCALL _delay_ms
(0159) sed1335_write_command(SystemSet);
0D51 E400 LDI R16,0x40
0D52 DFD9 RCALL _sed1335_write_command
(0160) sed1335_write_data(0x30);
0D53 E300 LDI R16,0x30
0D54 DFDF RCALL _sed1335_write_data
(0161) sed1335_write_data(0x87);
0D55 E807 LDI R16,0x87
0D56 DFDD RCALL _sed1335_write_data
(0162) sed1335_write_data(0x07);
0D57 E007 LDI R16,7
0D58 DFDB RCALL _sed1335_write_data
(0163) sed1335_write_data(0x27);
0D59 E207 LDI R16,0x27
0D5A DFD9 RCALL _sed1335_write_data
(0164) sed1335_write_data(0x42);
0D5B E402 LDI R16,0x42
0D5C DFD7 RCALL _sed1335_write_data
(0165) sed1335_write_data(0xf0);
0D5D EF00 LDI R16,0xF0
0D5E DFD5 RCALL _sed1335_write_data
(0166) sed1335_write_data(0x28);
0D5F E208 LDI R16,0x28
0D60 DFD3 RCALL _sed1335_write_data
(0167) sed1335_write_data(0x00);
0D61 2700 CLR R16
0D62 DFD1 RCALL _sed1335_write_data
(0168) sed1335_write_command(Scroll);
0D63 E404 LDI R16,0x44
0D64 DFC7 RCALL _sed1335_write_command
(0169) sed1335_write_data(0x00);
0D65 2700 CLR R16
0D66 DFCD RCALL _sed1335_write_data
(0170) sed1335_write_data(0x00);
0D67 2700 CLR R16
0D68 DFCB RCALL _sed1335_write_data
(0171) sed1335_write_data(0xf0);
0D69 EF00 LDI R16,0xF0
0D6A DFC9 RCALL _sed1335_write_data
(0172) sed1335_write_data(0x00);
0D6B 2700 CLR R16
0D6C DFC7 RCALL _sed1335_write_data
(0173) sed1335_write_data(0x40);
0D6D E400 LDI R16,0x40
0D6E DFC5 RCALL _sed1335_write_data
(0174) sed1335_write_data(0xf0);
0D6F EF00 LDI R16,0xF0
0D70 DFC3 RCALL _sed1335_write_data
(0175) sed1335_write_data(0x00);
0D71 2700 CLR R16
0D72 DFC1 RCALL _sed1335_write_data
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -