📄 mrv.c
字号:
/************************************************/
/* 格力商用空调之中央空调程序 */
/* */
/* 型号: MRV */
/* 版本: 1.0 */
/* */
/* CPU: Toshiba 8-bit TMP86C829 */
/* 时钟: 8MHz,32.768KHz */
/* */
/* 作者: 王黔 日期: 01/12/2002 */
/************************************************/
/**** 程序的结构资源及分配 ****/
/*** 8位单片微控器TLCS-870/C系列(编程有132种共731条基本指令) ***/
/*** 19个中断源(外部中断有5个,内部中断有14个) ***/
/*** 18位的计时/计数器1个,可用于:Timer,事件计数,脉冲宽度测量,频率测量模式 ***/
/*** 8位的计时/计数器4个,可用于:Timer,事件计数,PWM输出,PDO(可编程分频输出),PPG输出模式 ***/
/*** 基本时钟中断 ***/
/*** 看门狗:中断/复位输出(可编程) ***/
/*** 总共39个I/O口,其中24个口也可用于LCD显示的SEG口 ***/
/*** 串行界面输出:8位的UART/SIO1个 ***/
/*** 10位的A/D转换输入8个通道 ***/
/*** 四个按键可唤醒管脚 ***/
/*** LCD驱动/控制:显示内存区,32SEG*4COM,可通过编程选1/4,1/3,1/2duties或静态驱动,可调控LCD显示亮度 ***/
/*** 双时钟运作:可选单/双时钟控制 ***/
/*** 9种节电模式:STOP;STOP1,2;IDLE0,1,2;SLEEP0,1,2 ***/
/*** 电压运行范围宽:1.8~5.5V,4.2M/32.768K;2.7~5.5,8M/32.768K;4.5~5.5,16M/32.768K ***/
/*** CPU:0x0000 ~ 0xFFFF ***/
/*** SFR:包括I/O口,资源控制,资源状态,系统控制,中断控制,程序状态字 ***/
/*** RAM:包括MEMORY及堆栈 ***/
/*** DBR:资源控制,资源状态,LCD显示内存 ***/
/*** ROM:包括程序区及向量表 ***/
/**** 系统所用到的资源 ****/
/*** 程序包括一个主流程,一个中断 ***/
/*** 基本中断用于计时及基本时间单位 ***/
/**** 程序里各种写法的定义 ****/
/*** 每种分块是三行,块中的第一个一行,块中不同的两个二行 ***/
/*** 程序起始地址名:用startup ***/
/*** 程序的中断:未用的中断INT_Dummy,已用的则前面为INT_,后面加中断名,字母全部大写 ***/
/*** 程序的函数名:一律用小写字母,并且都不用下划线,除非很多是同一类的程序 ***/
/*** 程序的常量:全部大写 ***/
/*** 表格名字:表格前面加TBL_,后面所跟的每个单词也是第一个字母大写其它字母小写 ***/
/*** 管脚定义:前面加PIN_,后面的每个单词的第一个字母大写,如果定义一组键盘则PIN后没有短横 ***/
/*** 标志定义:前面加F_,后面每个单词的第一个字母大写 ***/
/*** RAM定义:前面加R_,后面每个单词的第一个字母大写 ***/
/*** 大括号的用法:对只有一层,左括号可不另起一行,甚至右括号也可在同一行,但一层以上一定另起 ***/
/*** if如果只是一两句语句,可写同一行,else也是一样 ***/
/************************************************/
/* 预包含文件的定义 */
/* 两种写法:""是当前目录,<>是预设目录 */
/************************************************/
#include "IOSFR86.h" // 系统输入/输出口的定义,具体管脚具体定义,系统的特别控制寄存器定义
#include "RAM86.h" // 此处用于RAM的定义
/************************************************/
/* 软件更改记录及清单 */
/************************************************/
/************************************************/
/* 具体程序中管脚分配及定义 */
/************************************************/
//
//
// QFP64
// P P P P P P P P P
// P P 7 7 7 7 7 7 5 5 5
// 7 7 5 4 3 2 1 0 7 6 5
// 7 6 / / / / / / / / /
// / / S S S S S S S S S
// S S S S S S S E E E E E E E E E
// E E E E E E E G G G G G G G G G
// G G G G G G G 1 1 1 1 1 1 1 1 1
// 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8
// _________________________________________________
// / 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 \
// / \
// SEG2 <---> |49 32| <---> P54(SEG19)
// SEG1 <---> |50 31| <---> P53(SEG20)
// SEG0 <---> |51 30| <---> P52(SEG21)
// COM3 <---> |52 29| <---> P51(SEG22)
// COM2 <---> |53 28| <---> P50(SEG23)
// COM1 <---> |54 27| <---> P17(SEG24//SCK)
// COM0 <---> |55 26| <---> P16(SEG25/TXD/SO)
// V3 <---> |56 25| <---> P15(SEG26/RXD/SI)
// V2 <---> |57 24| <---> P14(SEG27/INT3)
// V1 <---> |58 23| <---> P13(SEG28/INT2)
// C1 <---> |59 22| <---> P12(SEG29/INT1)
// C0 <---> |60 21| <---> P11(SEG30)
// (/DVO)P30 <---> |61 20| <---> P10(SEG31)
// (/PWM3//PDO3/TC3)P31 <---> |62 19| <---> AVDD
// (/PWM4//PDO4//PPG4/TC4)P32 <---> |63 18| <---> VAREF
// (/PWM6//PDO6//PPG6/TC6)P33 <---> |64 17| <---> P67(AIN7/STOP5)
// \ o /
// \ 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 /
// -------------------------------------------------
// V X X T V P P R P P P P P P P P
// S I O E D 2 2 E 2 6 6 6 6 6 6 6
// S N U X D 1 2 S 0 0 1 2 3 4 5 6
// T T / / E / / / / / / / /
// X X T / A A A A A A A
// T T S I I I I I I I
// I O T N N N N N N N
// N U O 0 1 2 3 4 5 6
// T P / / / / / /
// / E E I S S S
// / C C N T T T
// I I N T O O O
// N N T 0 P P P
// T 2 3 4
// 5
/**** 这里用来具体定义管脚分配 ****/
/*** 这些在RAM.H文件里其实已经定义,但具体用什么表示要在这里定义 ***/
#define PIN_Test OP20 // P20口作为软件测试口,用于测试时不停的将管脚反向
#define PIN_KBOP0 OP21 // 键盘输出口,平时输出高电平,低电平按键有效
#define PIN_KBOP1 OP22 // 键盘输出口,平时输出高电平,低电平按键有效
#define PIN_Buz OP30 // 此管脚用于蜂鸣器发音
#define PIN_HIFANRL OP50 // 两个继电器用于控制风速的选择,可以选择无风,高风,低风三种状态
#define PIN_LOWFANRL OP51 // 用一个存储单元表示状态,0为关,1为高,2为低
#define PIN_LOHILIGHTRL OP52 // 两个继电器用于控制亮度的选择,可以选择不开,高亮,低亮三种状态
#define PIN_HILIGHTRL OP53 // 用一个存储单元表示状态,0为关,1为高,2为低
#define PIN_VPCRL OP54 // 用于微波控制,低电平为打开微波输出
#define PIN_TURNRL OP55 // 用于转盘控制,低电平为转动
#define PIN_MAINRL OP56 // MAIN继电器
#define PIN_DOOR IP57 // 输入门的状态,L表示关门
#define PIN_HTCS P60 // I/O OP HT IC 片选
#define PIN_HTCLK P61 // I/O OP HT IC VFT驱动CLK
#define PIN_HTDI P62 // I/O OP HT IC 输入(即此MCU输出)
#define PIN_ROTA P63 // I/O IP
#define PIN_ROTB P64 // I/O IP
#define PINKYIN IP7 // 7口为键盘输入口
#define PIN_KBIP0 IP70 // IP 用于键盘的输入口#0
#define PIN_KBIP1 IP71 // IP 用于键盘的输入口#1
#define PIN_KBIP2 IP72 // IP 用于键盘的输入口#2
#define PIN_KBIP3 IP73 // IP 用于键盘的输入口#3
#define PIN_KBIP4 IP74 // IP 用于键盘的输入口#4
#define PIN_KBIP5 IP75 // IP 用于键盘的输入口#5
#define PIN_KBIP6 IP76 // IP 用于键盘的输入口#6
#define PIN_KBIP7 IP77 // IP 用于键盘的输入口#7
/************************************************/
/* 具体程序中所用到的常量的定义 */
/************************************************/
/**** 键盘构造及键定义 ****/
/*** 键盘的输入口用7口,输出口用2口,可在输入口上加上拉电阻,输出口则不必 ***/
/*** 按照相应的位置进行定义 ***/
// =============
//
// --------------------------------------------------------------------------------
// |输入/出| P77 P76 P75 P74 P73 P72 P71 P70 |
// --------------------------------------------------------------------------------
// | P21 | K07 K06 K05 K04 K03 K02 K01 K00 |
// | P22 | K15 K14 K13 K12 K11 K10 K09 K08 |
// --------------------------------------------------------------------------------
/*** 按键的情况下,高位是为1的,以此区别NOKEY和K00 ***/
/*** 在此,客户需要根据其键盘相应的位址,确定键盘的定义 ***/
#define NOKEY 0x00 // 没有按键
#define KY_K00 0x01 // " K00 "
#define KY_K01 0x02 // " K01 "
#define KY_K02 0x03 // " K02 "
#define KY_K03 0x04 // " K03 "
#define KY_K04 0x05 // " K04 "
#define KY_K05 0x06 // " K05 "
#define KY_K06 0x07 // " K06 "
#define KY_K07 0x08 // " K07 "
#define KY_K08 0x09 // " K08 "
#define KY_K09 0x10 // " K09 "
#define KY_K10 0x11 // " K10 "
#define KY_K11 0x12 // " K11 "
#define KY_K12 0x13 // " K12 "
#define KY_K13 0x14 // " K13 "
#define KY_K14 0x15 // " K14 "
#define KY_K15 0x16 // " K15 "
#define KY_COMBIN 0x80 // " K11 & K12 "
#define KY_TEMP1 0x01 //
#define KY_TEMP2 0x02 //
#define KY_TEMP3 0x03 //
#define KY_TEMP4 0x04 //
#define KY_LIGHTHILO 0x12 // " LIGHTHILO "
#define KY_TURNTABLEONOFF 0x13 // " TURNTABLEONOFF "
#define KY_POWERLEVEL 0x15 // " POWERLEVVEL "
#define KY_COMPUCOOK 0x21 // " COMPUCOOK "
#define KY_7 0x31 // " 7 "
#define KY_FANHILO 0x23 // " FANHILO "
#define KY_STARTTOUCHON 0x24 // " STARTTOUCHON "
#define KY_STOPCLEAR 0x26 // " STOPCLEAR "
#define KY_KITCHENTIMERCLOCK 0x32 // " KITCHENTIMERCLOCK "
#define KY_4 0x42 // " 4 "
#define KY_MINUTEPLUS 0x34 // " MINUTEPLUS "
#define KY_COMPUDEFROST 0x35 // " COMPUDEFROST "
#define KY_0 0x37 // " 0 "
#define KY_8 0x43 // " 8 "
#define KY_1 0x53 // " 1 "
#define KY_9 0x45 // " 9 "
#define KY_6 0x46 // " 6 "
#define KY_5 0x48 // " 5 "
#define KY_2 0x54 // " 2 "
#define KY_GROUNDMEAT 0x64 // " GROUNDMEAT "
#define KY_3 0x56 // " 3 "
#define KY_CUSTOMHELP 0x57 // " CUSTOMHELP "
#define KY_RICE 0x59 // " RICE "
#define KY_FROZENENTREES 0x65 // " FROZENENTREES "
#define KY_FRESHVEGETABLES 0x75 // " FRESHVEGETABLES "
#define KY_FISHSEAFOOD 0x67 // " FISHSEAFOOD "
#define KY_FROZENVEGETABLES 0x68 // " FROZENVEGETABLES "
#define KY_REHEAT 0x6A // " REHEAT "
#define KY_BAKEDPOTATO 0x76 // " BAKEDPOTATO "
#define KY_POPCORN 0x86 // " POPCORN "
/**** 显示屏构造及定义 ****/
// =============
//SEGL EQU 09H ; 这个数也包含在显示里面的
//
// ------------------------------------------------------------
// | 管脚 | S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 |
// ------------------------------------------------------------
// | COM0 | |
// | COM1 | |
// | COM2 | |
// | COM3 | |
// ------------------------------------------------------------
// NOTE:
/**** 显示的接口示意图 ****/
//
// a
// ---------
// |\ | /|
// f| \ |j / |b
// | h\ | /k |
// | \|/ |
// -------g-
// | /|\ |
// e| r/ | \n |c
// | / p| \ |
// |/ | \|
// ---------
// d
//
// ******** GAL_9928 VFD SEUQENCE
// ----- ----- ----- ----- ----- ----- -----
// |\ | /| |\ | /| |\ | /| |\ | /| |\ | /| |\ | /| |\ | /|
// | \|/ | | \|/ | | \|/ | | \|/ | | \|/ | | \|/ | | \|/ |
// ----- ----- ----- ----- ----- ----- -----
// | /|\ | | /|\ | | /|\ | | /|\ | | /|\ | | /|\ | | /|\ |
// |/ | \| |/ | \| |/ | \| |/ | \| |/ | \| |/ | \| |/ | \|
// ----- ----- ----- ----- ----- ----- -----
// VFD7G VFD6G VFD5G VFD4G VFD3G VFD2G VFD1G VFD0G
//
// P50 P51 P52 P53 P54 P55 P56 P57 (DATABOOK)
// G15 G14 G13 G12 G11 G10 G09 G08 (DATABOOK)
// 0F9E,9F 0F9C,9D 0F9A,9B 0F98,99 0F96,97 0F94,95 0F92,93 0F90,91 (DATABOOK)
//
//9928:
// 7G 6G 5G 4G 3G 2G 1G
//
//
// DISPBUFFER --> DBR
//
// DBUF+0,DBUF+1 --> 0F9E,0F9F 7G
// DBUF+2,DBUF+3 --> 0F9C,0F9D 6G
// DBUF+4,DBUF+5 --> 0F9A,0F9B 5G
// DBUF+6,DBUF+7 --> 0F98,0F99 4G
// DBUF+8,DBUF+9 --> 0F96,0F97 3G
// DBUF+A,DBUF+B --> 0F94,0F95 2G
// DBUF+C,DBUF+D --> 0F92,0F93 1G
// DBUF+E,DBUF+F --> NO USE
//
// ******** DBUF0,1 DBUF2,3 DBUF4,5 DBUF6,7 DBUF8,9 DBUFA,B DBUFC,D
// P50 P51 P52 P53 P54 P55 P56 P57(NO USE)
// 7G 6G 5G 4G 3G 2G 1G
//P77 P8 SENSOR col2 COOK LOCK TIMER DEF HELP
//P76 P9 col1 DOT
//P75 P10 d d d d d d d
//P74 P11 p p p p p p p
//P73 P12 n n n n n n n
//P72 P15 e e e e e e e
//P71 P14 c c c c c c c
//P70 P13 r r r r r r r
//
//P87(NO USE)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -