📄 main.lst
字号:
CCS PCM C Compiler, Version 4.057, 28721 30-九月-08 14:19
Filename: main.lst
ROM used: 1698 words (41%)
Largest free fragment is 2048
RAM used: 28 (15%) at main() level
35 (18%) worst case
Stack: 5 worst case (3 in main + 2 for interrupts)
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 685
0003: NOP
0004: MOVWF 7F
0005: SWAPF 03,W
0006: CLRF 03
0007: MOVWF 26
0008: MOVF 7F,W
0009: MOVWF 25
000A: MOVF 0A,W
000B: MOVWF 2D
000C: CLRF 0A
000D: SWAPF 25,F
000E: MOVF 04,W
000F: MOVWF 27
0010: MOVF 20,W
0011: MOVWF 28
0012: MOVF 21,W
0013: MOVWF 29
0014: MOVF 22,W
0015: MOVWF 2A
0016: MOVF 23,W
0017: MOVWF 2B
0018: MOVF 24,W
0019: MOVWF 2C
001A: BCF 03.7
001B: BCF 03.5
001C: BTFSS 0B.5
001D: GOTO 020
001E: BTFSC 0B.2
001F: GOTO 033
0020: MOVF 27,W
0021: MOVWF 04
0022: MOVF 28,W
0023: MOVWF 20
0024: MOVF 29,W
0025: MOVWF 21
0026: MOVF 2A,W
0027: MOVWF 22
0028: MOVF 2B,W
0029: MOVWF 23
002A: MOVF 2C,W
002B: MOVWF 24
002C: MOVF 2D,W
002D: MOVWF 0A
002E: SWAPF 26,W
002F: MOVWF 03
0030: SWAPF 7F,F
0031: SWAPF 7F,W
0032: RETFIE
0033: BCF 0A.3
0034: GOTO 460
.................... #include "keyscan.h"
....................
.................... #include "cpu.h"
.................... #ifndef _MYCPU_
.................... #define _MYCPU_
.................... #include "16F873A.h"
.................... //////// Standard Header file for the PIC16F873A device ////////////////
.................... #device PIC16F873A
.................... #list
....................
.................... // 1. device define
.................... #device adc=10
.................... //#device *=16
.................... #fuses XT //RC,RC_IO,INTRC,INTRC_IO,EC_IO,LP,XT,HS
.................... #fuses NOWDT //NOWDT,WDT
.................... #fuses PUT //NOPUT,PUT
.................... //#fuses NOMCLR //MCLR,NOMCLR
.................... #fuses NOBROWNOUT //NOBROWNOUT,BROWNOUT
.................... //#fuses BORV40 //BORV40,BORV21
.................... //#fuses CCP2C1 //CCP2C1,CCP2B3
.................... #fuses PROTECT //PROTECT,NOPROTECT
.................... //#fuses BORSEN //BORSEN,NOBORSEN BOR Software
.................... //#fuses IESO //IESO,NOIESO Internal External Switch Over
.................... //#fuses FCMEN //FCMEN,NOFCMEN Fail-Safe Clock Monitor
.................... //#fuses DEBUG //DEBUG,NODEBUG
.................... #use fast_io(A)
.................... //#use fast_io(B)
.................... #use fast_io(C)
.................... #use fast_io(b)
.................... #use delay(clock=4000000) //延时函数时钟
*
04D4: MOVLW 3B
04D5: MOVWF 04
04D6: MOVF 00,W
04D7: BTFSC 03.2
04D8: GOTO 4E7
04D9: MOVLW 01
04DA: MOVWF 21
04DB: CLRF 20
04DC: DECFSZ 20,F
04DD: GOTO 4DC
04DE: DECFSZ 21,F
04DF: GOTO 4DB
04E0: MOVLW 4A
04E1: MOVWF 20
04E2: DECFSZ 20,F
04E3: GOTO 4E2
04E4: GOTO 4E5
04E5: DECFSZ 00,F
04E6: GOTO 4D9
04E7: RETLW 00
....................
.................... #byte LCD_DATA=8
.................... #use rs232(baud=19200,xmit=PIN_B7)
*
05F1: BCF 06.7
05F2: MOVLW 08
05F3: MOVWF 21
05F4: GOTO 5F5
05F5: NOP
05F6: BSF 21.7
05F7: GOTO 606
05F8: BCF 21.7
05F9: RRF 3B,F
05FA: BTFSC 03.0
05FB: BSF 06.7
05FC: BTFSS 03.0
05FD: BCF 06.7
05FE: BSF 21.6
05FF: GOTO 606
0600: BCF 21.6
0601: DECFSZ 21,F
0602: GOTO 5F9
0603: GOTO 604
0604: NOP
0605: BSF 06.7
0606: MOVLW 0B
0607: MOVWF 04
0608: DECFSZ 04,F
0609: GOTO 608
060A: NOP
060B: BTFSC 21.7
060C: GOTO 5F8
060D: BTFSC 21.6
060E: GOTO 600
060F: BCF 0A.3
0610: GOTO 69E (RETURN)
.................... #endif
....................
.................... #define SCANTIME 217 //3ms 236 //5ms 217 //10ms 4M
....................
.................... #define P2 (*(0x05))
.................... //#define MATRIX //若定义为MATRIX则为4X4键盘的扫描,否则为单个端口的扫描。
....................
.................... #define KeyScan() P2&0x03 //单个端口扫描语句
....................
.................... #define KEYCOUNT1 1 //按键按下时间计数
....................
.................... #define KEYINIT 0xff //这里是高四位作为按键,可根据具体情况定义。
....................
....................
....................
.................... //KeyDown 按下的键(不会自动清除,若用完后应把相应位清除)
.................... //KeyUp 弹起的键(不会自动清除,若用完后应把相应位清除)
.................... //KeyLast 上次键的状态
.................... //KerPress 反应实时键的情况。
.................... int8 KeyDown,KeyUp,KeyLast,KeyPress;
.................... int8 KeyCount; //按键时间计数
.................... int8 KeyCurrent,KeyOld;
....................
....................
.................... /********************************************************************
.................... 函数功能:定时器0初始化,用来做键盘扫描,定时时间大约为10ms。
.................... 入口参数:无。
.................... 返 回:无。
.................... 备 注:无。
.................... ********************************************************************/
.................... void InitTimer0(void)
.................... {
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
*
04C3: MOVF 01,W
04C4: ANDLW C0
04C5: IORLW 07
04C6: MOVWF 01
.................... clear_interrupt(INT_RTCC);
04C7: BCF 03.5
04C8: BCF 0B.2
.................... enable_interrupts(INT_RTCC);
04C9: BSF 0B.5
.................... SET_TIMER0(SCANTIME);
04CA: MOVLW D9
04CB: MOVWF 01
.................... }
....................
....................
.................... void Key_Init()
.................... {
....................
.................... KeyOld=KEYINIT;
04CC: MOVLW FF
04CD: MOVWF 35
.................... KeyLast=KEYINIT;
04CE: MOVWF 31
.................... KeyCount=0;
04CF: CLRF 33
.................... KeyDown=0;
04D0: CLRF 2F
.................... KeyUp=0;
04D1: CLRF 30
.................... }
....................
.................... void GetKey()
.................... {
.................... KeyCurrent=KeyScan(); //获取当前键值
*
0462: MOVF 05,W
0463: ANDLW 03
0464: MOVWF 34
.................... if(KeyCurrent!=KeyOld) //与上一次键值不等,说明发生了改变。
0465: MOVF 35,W
0466: SUBWF 34,W
0467: BTFSC 03.2
0468: GOTO 46E
.................... {
.................... KeyOld=KeyCurrent; //保存新键值。
0469: MOVF 34,W
046A: MOVWF 35
.................... KeyCount=0;
046B: CLRF 33
.................... return;
046C: GOTO 481
.................... }
.................... else
046D: GOTO 481
.................... {
.................... KeyCount++;
046E: INCF 33,F
.................... if(KeyCount>=KEYCOUNT1) //确认为有效按键(包括空键).
046F: MOVF 33,W
0470: SUBLW 00
0471: BTFSC 03.0
0472: GOTO 481
.................... {
.................... KeyCount=KEYCOUNT1; //停止计数
0473: MOVLW 01
0474: MOVWF 33
....................
.................... KeyPress=KeyOld; //保存当前按键
0475: MOVF 35,W
0476: MOVWF 32
....................
.................... KeyDown|=((~KeyPress)&KeyLast); //按下的键(不会自动清除,若用完后应把相应位清除)
0477: MOVF 32,W
0478: XORLW FF
0479: ANDWF 31,W
047A: IORWF 2F,F
.................... KeyUp|=(KeyPress&(~KeyLast)); //弹起的键(不会自动清除,若用完后应把相应位清除)
047B: MOVF 31,W
047C: XORLW FF
047D: ANDWF 32,W
047E: IORWF 30,F
.................... KeyLast=KeyPress;
047F: MOVF 32,W
0480: MOVWF 31
.................... }
.................... }
.................... }
....................
....................
.................... #include "pig.h"
.................... /////////////////////////////////////////////////////////////////////////
.................... // Bitmap点阵数据表 //
.................... // 图片: C:\..件\想买车.bmp,纵向取模下高位,数据排列:从左到右从上到下 //
.................... // 图片尺寸: 128 * 64 //
.................... /////////////////////////////////////////////////////////////////////////
.................... int8 const nBitmapDot1[] = // 数据表
.................... {
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0xFC,0xFE,0x0E,0x1C,
.................... 0x18,0x1C,0x0E,0xFE,0xFC,0x00,0x7C,0xFC,
.................... 0x80,0xFC,0xFC,0x00,0x00,0x00,0x7C,0xFE,
.................... 0xC6,0xC6,0xC6,0x00,0x40,0xE8,0xA8,0xF8,
.................... 0xF0,0x00,0xF8,0xF8,0x10,0x18,0x00,0x00,
.................... 0xC0,0xC0,0x00,0xC0,0xC0,0x00,0xC0,0xC0,
.................... 0x00,0x00,0x06,0x09,0x12,0x09,0x06,0x00,
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,
.................... 0x12,0x22,0x44,0x22,0x12,0x0C,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0xC0,
.................... 0x40,0x40,0x40,0xC0,0x00,0x00,0x00,0x40,
.................... 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
.................... 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0x81,0x41,0x40,0x80,
.................... 0x40,0x40,0x80,0x01,0x01,0x00,0x04,0x05,
.................... 0x05,0x07,0x03,0xC0,0x20,0x40,0x20,0xC1,
.................... 0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,
.................... 0x81,0x80,0x81,0xC1,0xC0,0x40,0xC0,0xC0,
.................... 0xE1,0xE1,0xE0,0xE1,0xE1,0xE0,0xE1,0xE1,
.................... 0xE0,0xE0,0xE0,0x60,0x60,0x40,0x40,0xC0,
.................... 0xE0,0xE0,0xA0,0x90,0x8C,0x02,0x01,0x00,
.................... 0x00,0x00,0x00,0x00,0x10,0x28,0x50,0x28,
.................... 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x09,0xC5,0x1F,0xC5,0x09,0x5F,
.................... 0x95,0x15,0x95,0x5F,0x80,0x00,0x10,0x10,
.................... 0x14,0x99,0x92,0x50,0x3F,0x50,0x50,0x91,
.................... 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... }; //256
....................
.................... int8 const nBitmapDot2[] = {
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0x01,0x02,0x44,0x08,
.................... 0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0x01,0xC2,0xE1,0xF0,
.................... 0x30,0x18,0x08,0x3C,0xF6,0xFE,0xFB,0x1D,
.................... 0x0D,0x02,0xC2,0xCB,0x09,0x09,0x09,0x09,
.................... 0x08,0x08,0x08,0x08,0x08,0x08,0x00,0xC0,
.................... 0xFF,0xFC,0xFC,0xF9,0xE1,0xC1,0x11,0x12,
.................... 0x02,0xC6,0xC5,0xC9,0xD9,0xF3,0xE3,0xC6,
.................... 0x0E,0x0C,0x1C,0x38,0x38,0xF0,0xE0,0xC0,
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x12,
.................... 0x24,0x12,0x0C,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x09,0x88,0xC8,0xB9,0x8D,0xE9,
.................... 0x89,0x89,0x89,0x88,0x08,0x00,0x01,0x31,
.................... 0x39,0x08,0x88,0xC8,0x78,0x30,0x00,0x00,
.................... 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0x80,0x40,0x70,0xF0,
.................... 0x38,0x18,0x0C,0x0C,0x0E,0x0E,0x0E,0x86,
.................... 0x8E,0x0B,0x0B,0x0B,0x03,0x13,0x31,0x36,
.................... 0x57,0xE7,0x87,0x07,0x07,0x07,0x07,0x07,
.................... 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
.................... 0x03,0x03,0x03,0x03,0x03,0x03,0x33,0x3B,
.................... 0x33,0x33,0xF3,0x03,0x03,0x03,0x03,0x03,
.................... 0x03,0x83,0x83,0xC3,0x63,0x33,0x91,0x91,
.................... 0x89,0x08,0x00,0x84,0x84,0x84,0x85,0x87,
.................... 0x07,0x07,0x06,0x1E,0x38,0x78,0xE0,0xC0,
.................... 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x1F,
.................... 0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,
.................... 0x00,0x00,0x0D,0x0D,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... }; //256
.................... int8 const nBitmapDot3[] =
.................... {
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x78,0xFC,0xEF,0xFF,0x7B,0x1B,0x08,
.................... 0xF0,0xF8,0xFC,0xFE,0xFF,0xEF,0x0F,0x1F,
.................... 0x1F,0x0F,0xFF,0xFF,0xFE,0xFC,0xF9,0xF2,
.................... 0x04,0x00,0x03,0xFE,0x80,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
.................... 0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -