📄 lcmdisp.lis
字号:
0000 .dbline 49
0000 ; /****************************************************************************************
0000 ; * 文件名:LCMDISP.C
0000 ; * 功能:GUI测试及演示程序。
0000 ; * 作者:黄绍斌
0000 ; * 日期:2003.09.09
0000 ; ****************************************************************************************/
0000 ; #include "config.h"
0000 ;
0000 ;
0000 ; // 一个单色图标的数据,宽度x高度=40x40
0000 ; uint8 const ICO1[] =
0000 ; {
0000 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0000 ; 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x07,0x00,0xE0,0x00,0x00,0x18,
0000 ; 0x00,0x18,0x00,0x00,0x30,0x00,0x0C,0x00,0x00,0x40,0x00,0x02,0x00,0x00,0x80,0x00,
0000 ; 0x01,0x00,0x01,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0xC0,0x02,0x01,0x81,0x80,
0000 ; 0x40,0x04,0x03,0xC3,0xC0,0x20,0x04,0x03,0xC3,0xC0,0x20,0x04,0x03,0xC3,0xC0,0x20,
0000 ; 0x08,0x03,0xC3,0xC0,0x10,0x08,0x03,0xC3,0xC0,0x10,0x08,0x01,0x81,0x80,0x10,0x08,
0000 ; 0x08,0x00,0x10,0x10,0x08,0x08,0x00,0x10,0x10,0x08,0x10,0x00,0x08,0x10,0x08,0xF0,
0000 ; 0x00,0x0F,0x10,0x08,0x08,0x00,0x10,0x10,0x04,0x04,0x00,0x20,0x20,0x04,0x06,0x00,
0000 ; 0x60,0x20,0x04,0x03,0x81,0xC0,0x20,0x02,0x01,0x7E,0x80,0x40,0x03,0x00,0x81,0x00,
0000 ; 0xC0,0x01,0x00,0x42,0x00,0x80,0x00,0x80,0x3C,0x01,0x00,0x00,0x40,0x00,0x02,0x00,
0000 ; 0x00,0x30,0x00,0x0C,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x07,0x00,0xE0,0x00,0x00,
0000 ; 0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0000 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0000 ; };
0000 ; unsigned char KeyNew,KeyDown;
0000 ; char* p;
0000 ; // 样条曲线的4个端点
0000 ; PointXY log_pin[] = { {40, 30},
0000 ; {60, 60},
0000 ; {80, 30},
0000 ; {100, 60}
0000 ; };
0000 ;
0000 ; // 封闭多边形的各个顶点
0000 ; uint32 const poly6[] = {750,55, 85,40, 90,45, 100,42, 115,55, 75,55};
0000 ; unsigned char hz0[]= //韩
0000 ;
0000 ; {
0000 ; 0x10, 0x20, 0x10, 0x20, 0xfd, 0xfe, 0x10, 0x20, 0x7c, 0x20, 0x44, 0xfc, 0x7c, 0x20, 0x44, 0x20,
0000 ; 0x7d, 0xfe, 0x10, 0x22, 0xfe, 0x22, 0x10, 0x22, 0x10, 0x2a, 0x10, 0x24, 0x10, 0x20, 0x10, 0x20
0000 ;
0000 ; };
0000 ;
0000 ; WINDOWS *first_win;
0000 ;
0000 ; void Port_Init()
0000 ; {
0000 .dbline 50
0000 ; PORTD = 0XFF;
0000 8FEF ldi R24,255
0002 82BB out 0x12,R24
0004 .dbline 51
0004 ; DDRD = 0XFF;
0004 81BB out 0x11,R24
0006 .dbline 52
0006 ; PORTB = 0XFF;
0006 88BB out 0x18,R24
0008 .dbline 53
0008 ; DDRB = 0X00;
0008 2224 clr R2
000A 27BA out 0x17,R2
000C .dbline 54
000C ; PORTF = 0x00;
000C 20926200 sts 98,R2
0010 .dbline 55
0010 ; DDRF = 0x1F;
0010 8FE1 ldi R24,31
0012 80936100 sts 97,R24
0016 .dbline 56
0016 ; PORTE = 0x0F;
0016 8FE0 ldi R24,15
0018 83B9 out 0x3,R24
001A .dbline 57
001A ; DDRE = 0x00;
001A 22B8 out 0x2,R2
001C .dbline -2
001C L7:
001C .dbline 0 ; func end
001C 0895 ret
001E .dbend
001E .dbfunc e init_devices _init_devices fV
.even
001E _init_devices::
001E .dbline -1
001E .dbline 61
001E ; }
001E ; //call this routine to initialize all peripherals
001E ; void init_devices(void)
001E ; {
001E .dbline 63
001E ; //stop errant interrupts until set up
001E ; CLI(); //disable all interrupts
001E F894 cli
0020 .dbline 64
0020 ; XDIV = 0x00; //xtal divider
0020 2224 clr R2
0022 2CBE out 0x3c,R2
0024 .dbline 65
0024 ; XMCRA = 0x00; //external memory
0024 20926D00 sts 109,R2
0028 .dbline 66
0028 ; Port_Init();
0028 EBDF xcall _Port_Init
002A .dbline 68
002A ;
002A ; MCUCR = 0x00;
002A 2224 clr R2
002C 25BE out 0x35,R2
002E .dbline 69
002E ; EICRA = 0x00; //extended ext ints
002E 20926A00 sts 106,R2
0032 .dbline 70
0032 ; EICRB = 0x00; //extended ext ints
0032 2ABE out 0x3a,R2
0034 .dbline 71
0034 ; EIMSK = 0x00;
0034 29BE out 0x39,R2
0036 .dbline 72
0036 ; TIMSK = 0x00; //timer interrupt sources
0036 27BE out 0x37,R2
0038 .dbline 73
0038 ; ETIMSK = 0x00; //extended timer interrupt sources
0038 20927D00 sts 125,R2
003C .dbline 74
003C ; SEI(); //re-enable interrupts
003C 7894 sei
003E .dbline -2
003E L8:
003E .dbline 0 ; func end
003E 0895 ret
0040 .dbend
0040 .dbfunc e key_scan _key_scan fV
0040 ; shift -> <dead>
0040 ; j -> <dead>
0040 ; i -> R20
.even
0040 _key_scan::
0040 0E940000 xcall push_gset1
0044 .dbline -1
0044 .dbline 78
0044 ; //all peripherals are now initialized
0044 ; }
0044 ; void key_scan(void)
0044 ; {
0044 .dbline 83
0044 ; unsigned char i,j,shift;
0044 ;
0044 ; //if (key_scan_begin==0) return;
0044 ; //key_scan_begin=0;
0044 ; PORTE|=0X0f;//UP PULL
0044 83B1 in R24,0x3
0046 8F60 ori R24,15
0048 83B9 out 0x3,R24
004A .dbline 84
004A ; PORTF|=0x1f;//OUT
004A 80916200 lds R24,98
004E 8F61 ori R24,31
0050 80936200 sts 98,R24
0054 .dbline 85
0054 ; for (i=0;i<5;i++)
0054 4427 clr R20
0056 20C0 xjmp L13
0058 L10:
0058 .dbline 86
0058 ; {
0058 .dbline 87
0058 ; PORTF&=~(1<<i); //键盘线扫描
0058 01E0 ldi R16,1
005A 142F mov R17,R20
005C 0E940000 xcall lsl8
0060 202E mov R2,R16
0062 2094 com R2
0064 30906200 lds R3,98
0068 3220 and R3,R2
006A 30926200 sts 98,R3
006E .dbline 89
006E ; //delay_us(1);
006E ; KeyNew=PINE&0x0f;//读取键盘扫描信号,屏蔽高四位PC0~3
006E 81B1 in R24,0x1
0070 8F70 andi R24,15
0072 80930500 sts _KeyNew,R24
0076 .dbline 90
0076 ; if (KeyNew!=0x0f)//如果有键按下,延时10ms消抖
0076 8F30 cpi R24,15
0078 71F0 breq L14
007A .dbline 91
007A ; {
007A .dbline 93
007A ; //key_up=0;
007A ; KeyDown = 1;
007A 81E0 ldi R24,1
007C 80930400 sts _KeyDown,R24
0080 .dbline 94
0080 ; KeyNew=KeyNew<<4;
0080 80910500 lds R24,_KeyNew
0084 8F70 andi R24,#0x0F
0086 8295 swap R24
0088 80930500 sts _KeyNew,R24
008C .dbline 95
008C ; KeyNew=KeyNew|i;//get key scan code
008C 282E mov R2,R24
008E 242A or R2,R20
0090 20920500 sts _KeyNew,R2
0094 .dbline 96
0094 ; return;
0094 03C0 xjmp L9
0096 L14:
0096 .dbline 100
0096 L11:
0096 .dbline 85
0096 4395 inc R20
0098 L13:
0098 .dbline 85
0098 4530 cpi R20,5
009A F0F2 brlo L10
009C .dbline -2
009C L9:
009C 0E940000 xcall pop_gset1
00A0 .dbline 0 ; func end
00A0 0895 ret
00A2 .dbsym l shift 1 c
00A2 .dbsym l j 1 c
00A2 .dbsym r i 20 c
00A2 .dbend
00A2 .dbfunc e Hex2Ascii _Hex2Ascii fI
00A2 ; ascii -> y+0
00A2 ; temp -> R20
00A2 ; h -> R16
.even
00A2 _Hex2Ascii::
00A2 0E940000 xcall push_gset1
00A6 2297 sbiw R28,2
00A8 .dbline -1
00A8 .dbline 103
00A8 ; //putchar(KeyNew);
00A8 ; }
00A8 ; //memmove(&key_buf[0],&key_buf[1],KEY_BUF_LEN-1);
00A8 ; }//for (i=0;i<5;i++)
00A8 ; }
00A8 ; Hex2Ascii(unsigned char h)
00A8 ; {
00A8 .dbline 107
00A8 ; unsigned char ascii[2];
00A8 ; unsigned char temp;
00A8 ;
00A8 ; temp = (h&0xf0)>>4;
00A8 402F mov R20,R16
00AA 407F andi R20,240
00AC 4295 swap R20
00AE 4F70 andi R20,#0x0F
00B0 .dbline 108
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -