📄 lcd.lst
字号:
##############################################################################
# #
# IAR 8051 C/C++ Compiler V7.20H/W32 16/Jan/2007 15:30:18 #
# Copyright 2004-2006 IAR Systems. All rights reserved. #
# #
# Core = plain #
# Code model = banked #
# Data model = large #
# Calling convention = xdata reentrant #
# Constant location = data #
# Dptr setup = 1,16 #
# Source file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\lib\hal\CC2430\lcd.c #
# Command line = -I "C:\Program Files\IAR Systems\Embedded #
# Workbench 4.05 Evaluation version\8051\INC\" -I #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.05 Evaluation version\8051\SRC\LIB\" -I #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.05 Evaluation version\8051\INC\CLIB\" -I #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\..\..\..\include\ -I #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\..\..\..\include\mac\cc2430\ #
# -I E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_E #
# ngine\Test\mac\mac_loc\..\..\..\include\hal\cc243 #
# 0\ -I E:\公司产品资料\Zigbee\cc2431\cc2431定位\LO #
# C_Engine\Test\mac\mac_loc\..\..\..\apps\ -D #
# CC2430EB -D USE_LED -lCN #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\List\ -lA #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\List\ -o #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\Obj\ -e -s9 --debug #
# --core=plain --dptr=16,1 --data_model=large #
# --code_model=banked --calling_convention=xdata_re #
# entrant --place_constants=data --nr_virtual_regs #
# 8 E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_En #
# gine\lib\hal\CC2430\lcd.c #
# List file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\List\lcd.lst #
# Object file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\Obj\lcd.r51 #
# #
# #
##############################################################################
E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engine\lib\hal\CC2430\lcd.c
1 /******************************************************************************
2 * *
3 * ********** *
4 * ************ *
5 * *** *** *
6 * *** ++ *** *
7 * *** + + *** CHIPCON *
8 * *** + *
9 * *** + + *** *
10 * *** ++ *** *
11 * *** *** *
12 * ************ *
13 * ********** *
14 * *
15 *******************************************************************************
16
17 Filename: lcd.c
18 Target: cc2430
19 Author: KJA
20 Revised: 16/1-2006
21 Revision: x.x
22
23 Description:
24 Function implementations for common LCD functions for use with the SmartRF04EB.
25
26 ******************************************************************************/
27
28 #include "lcd.h"
\ In segment SFR_AN, at 0xf4
\ unsigned char volatile __sfr P1SEL
\ P1SEL:
\ 000000 DS 1
\ In segment SFR_AN, at 0xf5
\ unsigned char volatile __sfr P2SEL
\ P2SEL:
\ 000000 DS 1
\ In segment SFR_AN, at 0xf6
\ unsigned char volatile __sfr P1INP
\ P1INP:
\ 000000 DS 1
\ In segment SFR_AN, at 0xf7
\ unsigned char volatile __sfr P2INP
\ P2INP:
\ 000000 DS 1
\ In segment SFR_AN, at 0xfe
\ unsigned char volatile __sfr P1DIR
\ P1DIR:
\ 000000 DS 1
\ In segment SFR_AN, at 0xff
\ unsigned char volatile __sfr P2DIR
\ P2DIR:
\ 000000 DS 1
29 #include "RF04EB.h"
30 #include "hal.h"
31 #include "string.h"
32
33 // SM-Bus address of the LCD controller
34 #define LCD_ADDR 0x76
35
36 // RS selects the register to be accessed for read and write
37 // RS = 0 => selects instruction register for write and busy flag
38 // RS = 1 => selects the data register for both read and write
39 #define RS_0 0x00
40 #define RS_1 0x40
41
42 #define CHAR1_ADDRESS 0x08
43
44 // protos
45 BYTE lcdConvertChar(BYTE c);
46 void smbSend( BYTE *buffer, const UINT8 n );
47 BOOL smbSendByte( BYTE b );
48 void smbReceive( BYTE address, int length, BYTE *buffer );
49 BYTE smbReceiveByte( BOOL lastByte );
50 void smbStart( void );
51 void smbStop( void );
52 void smbWrite( BOOL value );
53 void smbClock( BOOL value );
54 void waitLCD( void );
55
56 #define DATA_HIGH() do{IO_DIR_PORT_PIN(1, 2, IO_IN); } while(0)
57 #define DATA_LOW() do{IO_DIR_PORT_PIN(1, 2, IO_OUT); LCD_SDA = 0; }while(0)
58
59
60
61 /******************************************************************************
62 * See lcd.h for a description of this function.
63 ******************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
64 void initNewSymbol(char* symbol, BYTE address){
\ initNewSymbol:
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 10
\ 000005 74F6 MOV A,#-0xa
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A EA MOV A,R2
\ 00000B FE MOV R6,A
\ 00000C EB MOV A,R3
\ 00000D FF MOV R7,A
65 BYTE sendBuffer[10];
66
67 //send control data
68 sendBuffer[0] = LCD_ADDR;
\ 00000E 7476 MOV A,#0x76
\ 000010 85..82 MOV DPL,?XSP + 0
\ 000013 85..83 MOV DPH,?XSP + 1
\ 000016 F0 MOVX @DPTR,A
69 sendBuffer[1] = RS_0;
\ 000017 7401 MOV A,#0x1
\ 000019 12.... LCALL ?XSTACK_DISP0_8
\ 00001C E4 CLR A
\ 00001D F0 MOVX @DPTR,A
70
71 if (address < 0x40)
\ 00001E E9 MOV A,R1
\ 00001F C3 CLR C
\ 000020 9440 SUBB A,#0x40
\ 000022 7402 MOV A,#0x2
\ 000024 5007 JNC ??initNewSymbol_0
72 sendBuffer[2] = 0x80;
\ 000026 12.... LCALL ?XSTACK_DISP0_8
\ 000029 7480 MOV A,#-0x80
\ 00002B 8005 SJMP ??initNewSymbol_1
73 else
74 sendBuffer[2] = 0xC0;
\ ??initNewSymbol_0:
\ 00002D 12.... LCALL ?XSTACK_DISP0_8
\ 000030 74C0 MOV A,#-0x40
\ ??initNewSymbol_1:
\ 000032 F0 MOVX @DPTR,A
75
76 sendBuffer[3] = 0x40 | (address & 0x3F);
\ 000033 743F MOV A,#0x3f
\ 000035 59 ANL A,R1
\ 000036 4440 ORL A,#0x40
\ 000038 C0E0 PUSH A
\ 00003A 7403 MOV A,#0x3
\ 00003C 12.... LCALL ?XSTACK_DISP0_8
\ 00003F D0E0 POP A
\ 000041 F0 MOVX @DPTR,A
77 smbSend(sendBuffer, 4);
\ 000042 ; Setup parameters for call to function smbSend
\ 000042 7904 MOV R1,#0x4
\ 000044 85..82 MOV DPL,?XSP + 0
\ 000047 85..83 MOV DPH,?XSP + 1
\ 00004A AA82 MOV R2,DPL
\ 00004C AB83 MOV R3,DPH
\ 00004E 90.... MOV DPTR,#(smbSend & 0xffff)
\ 000051 74.. MOV A,#((smbSend >> 16) & 0xff)
\ 000053 12.... LCALL ?BCALL ; Banked call to: DPTR()
78
79 //send data
80 sendBuffer[0] = LCD_ADDR;
81 sendBuffer[1] = RS_1;
\ 000056 7401 MOV A,#0x1
\ 000058 12.... LCALL ?XSTACK_DISP0_8
\ 00005B 7440 MOV A,#0x40
\ 00005D F0 MOVX @DPTR,A
82
83 sendBuffer[2] = symbol[0];
\ 00005E 8E82 MOV DPL,R6
\ 000060 8F83 MOV DPH,R7
\ 000062 E0 MOVX A,@DPTR
\ 000063 C0E0 PUSH A
\ 000065 7402 MOV A,#0x2
\ 000067 12.... LCALL ?XSTACK_DISP0_8
\ 00006A D0E0 POP A
\ 00006C F0 MOVX @DPTR,A
84 sendBuffer[3] = symbol[1];
\ 00006D 8E82 MOV DPL,R6
\ 00006F 8F83 MOV DPH,R7
\ 000071 A3 INC DPTR
\ 000072 E0 MOVX A,@DPTR
\ 000073 C0E0 PUSH A
\ 000075 7403 MOV A,#0x3
\ 000077 12.... LCALL ?XSTACK_DISP0_8
\ 00007A D0E0 POP A
\ 00007C F0 MOVX @DPTR,A
85 sendBuffer[4] = symbol[2];
\ 00007D 8E82 MOV DPL,R6
\ 00007F 8F83 MOV DPH,R7
\ 000081 A3 INC DPTR
\ 000082 A3 INC DPTR
\ 000083 E0 MOVX A,@DPTR
\ 000084 C0E0 PUSH A
\ 000086 7404 MOV A,#0x4
\ 000088 12.... LCALL ?XSTACK_DISP0_8
\ 00008B D0E0 POP A
\ 00008D F0 MOVX @DPTR,A
86 sendBuffer[5] = symbol[3];
\ 00008E 8E82 MOV DPL,R6
\ 000090 8F83 MOV DPH,R7
\ 000092 A3 INC DPTR
\ 000093 A3 INC DPTR
\ 000094 A3 INC DPTR
\ 000095 E0 MOVX A,@DPTR
\ 000096 C0E0 PUSH A
\ 000098 7405 MOV A,#0x5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -