📄 main.#1
字号:
#include "c8051f020.h"
#include "variable.h"
Uchar code StrForMixed[]={"08/08/12 16:11"}; //测试字符串
Uchar code StrForSample1[]={"Let our to look program in Graphics\n"};
extern void LcmInition( void ); //LCDRA8835初始化函数
extern void LcmClear( void ); //清屏函数
extern Uchar dprintf(Uchar x,Uchar y, char code *ptr, Uchar att) ;//图形方式下中英文混合显示函数
extern Uchar hprintf(Uchar x,Uchar y, char code *ptr, Uchar att) ;//图形方式下中英文混合显示函数
extern void LcmRest( void );
extern void LcmTest( void );
extern Uchar hprintf(Uchar x,Uchar y, char code *ptr, Uchar att);
extern void printfUpDown(Uchar x,Uchar y, Uchar flag, Uchar att) ;
extern void printfLeftRight(Uchar x,Uchar y, Uchar flag, Uchar att);
extern void printlcd_single(void);
extern void printlcd_car_show(Uchar x,Uchar y, Uchar * pcar, Uchar att);
extern void printlcd_char(Uchar ascii);
extern void lcd_CSR(Uchar flag);
extern void Locatexy(Uchar x,Uchar y, Uchar attribs);
/*
extern void WriteCommand( Uchar CommandByte );
extern void WriteData( Uchar dataW );
extern char code ASC_MSK[96*16];
extern struct typFNT_GB16 code Cdotlib[];
*/
/*=====================================
** 函数名称: Delay
** 功能描述: 延时函数
** 输入参数: 延时的时间
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
**---------------------------------------
** 作 者: wjf
** 日 期: 2008/07/31
======================================*/
void Delay( Uint tt ) {
while( tt-- );
}
/*=========================================================
** 函数名称: init_cpu
** 功能描述: C8051F020初始化函数 具体初始化内容参考行注释
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
**--------------------------------------------------------
** 作 者: wjf
** 日 期: 2008/07/31
==========================================================*/
void init_cpu(void) {
//晶振设置
Uint i;
OSCXCN = 0x67; // start external oscillator with 11.0592Mhz
for (i=0; i < 256; i++) ; // Wait for osc. to start up
while ((OSCXCN & 0x80)==0) ; // Wait for crystal osc. to settle
OSCICN = 0x88; // select external oscillator as SYSCLK
EA = 0;
WDTCN = 0xDE; // 屏蔽看门狗
// 写0XDE和写0XAD必须发生在4个时钟周期之内
WDTCN = 0xAD;
//复位源设置
RSTSRC= 0x00; // 复位源寄存器设置
//交叉开关配制:UART0- RX0、TX0
XBR0 = 0x04;
XBR1 = 0x00;
XBR2 = 0x84; // 交叉开关使能
//P0、P1、P2、P3、P4、P5、P6、P7端口设置
//通过设置输出方式为漏极开路并向端口数据寄存器中的相映位写1可将端口引脚配置为输入
P0MDOUT = 0x00; // P0口为漏极开路输出
// P1MDIN = 0xff; // P1口用作数字输入输出
P1MDOUT = 0xff; // P1.0-P1.7设置为推挽输出
P2MDOUT = 0x00; // P2口设置为漏极开路输出
// P2.0 - P2.4做输入
P3MDOUT = 0xff; // P3口为推挽输出
P74OUT = 0xff; // P4 - P7口为推挽输出
//UART0设置
SCON0 = 0x40; // 设置UART0工作在方式1,8位UART
T2CON = 0x34; // 用定时器2产生串口波特率 定时器2 16位自动重装 启动定时器2
RCAP2H = 0xff; // Timer 2 Capture Register High Byte
RCAP2L = 0xdc; // Timer 2 Capture Register Low Byte
TH2 = 0xff; // Timer 2 High Byte
TL2 = 0xdc; // Timer 2 Low Byte
// 使用11.0592MHz晶振,波特率设置为 9600 bps
/* SYSCLK
波特率=---------
32×(65536-[RCAP2H:RCAP2L])
*/
//UART1设置
SCON1 = 0x40; // 设置UART1工作在方式1,8位UART
T4CON = 0x34; // 用定时器4产生串口波特率 定时器2 16位自动重装
RCAP4H = 0xff; // Timer 4 Capture Register High Byte
RCAP4L = 0xdc; // Timer 4 Capture Register Low Byte
TH4 = 0xff; // Timer 4 High Byte
TL4 = 0xdc; // Timer 4 Low Byte
// 使用11.0592MHz晶振,波特率设置为 9600 bps
/* SYSCLK
波特率=---------
32×(65536-[RCAP2H:RCAP2L])
*/
//中断设置
// EA=0;
//-----------------------------------------------
}
/*=========================================================
** 函数名称: config
** 功能描述: C8051F020初始化函数 具体初始化内容参考行注释
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
**--------------------------------------------------------
** 作 者: FL
** 日 期:
==========================================================*/
void config (void) {
//Local Variable Definitions
int n = 0;
WDTCN = 0x07; // Watchdog Timer Control Register
WDTCN = 0xDE; // Disable WDT
WDTCN = 0xAD;
XBR0 = 0x05; // XBAR0: Initial Reset Value
XBR1 = 0x00; // XBAR1: Initial Reset Value
XBR2 = 0x44; // XBAR2: Initial Reset Value
P0MDOUT = 0x11; // Output configuration for P0
P1MDOUT = 0x00; // Output configuration for P1 //全部漏极开路
P1=0xff;
P2MDOUT = 0xc1; // Output configuration for P2 //除P2.7,6,0是其余漏极开路
P2=0xff;
P3MDOUT = 0x00; // Output configuration for P3
P3=0xff;
P74OUT = 0xf0; // Output configuration for P漏极开路
P4=0xff;
P5=0xff;
P1MDIN = 0xFF; // Input configuration for P1 //输入方式全部为数字
EMI0CF = 0x28; // External Memory Configuration Register
//----------------------------------------------------------------
// Oscillator Configuration
//----------------------------------------------------------------
OSCXCN = 0x67; // EXTERNAL Oscillator Control Register
for (n = 0; n < 255; n++) ; // wait for osc to start
while ( (OSCXCN & 0x80) == 0 ); // wait for xtal to stabilize
OSCICN = 0x0C; // Internal Oscillator Control Register
//----------------------------------------------------------------
// UART Configuration
//----------------------------------------------------------------
SCON0 = 0x50; // Serial Port Control Register
SCON0 &= 0xFC; //clear interrupt pending flags
PCON = 0x00; // Power Control Register
SCON1 = 0x50; // Serial Port 1 Control Register
//----------------------------------------------------------------
// SMBus Configuration
//----------------------------------------------------------------
SMB0CN = 0x40; // SMBus Control Register
SMB0ADR = 0x00; // SMBus Address Register
SMB0CR = 0xc9; // SMBus Clock Rate Register
//----------------------------------------------------------------
// Timer Configuration
//----------------------------------------------------------------
CKCON = 0x10; // Clock Control Register
TH0 = 0x00; // Timer 0 High Byte
TL0 = 0x00; // Timer 0 Low Byte
TH1 = 0xDc; // Timer 1 High Byte
TL1 = 0x00; // Timer 1 Low Byte
TMOD = 0x20; // Timer Mode Register
TCON = 0x40; // Timer Control Register
//----------------------------------------------------------------
// Reset Source Configuration
//
// Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0
//------------------------------------------------------------------
// R | R/W | R/W | R/W | R | R | R/W | R
//------------------------------------------------------------------
// JTAG |Convert | Comp.0 | S/W | WDT | Miss. | POR | HW
// Reset |Start | Reset/ | Reset | Reset | Clock | Force | Pin
// Flag |Reset/ | Enable | Force | Flag | Detect| & | Reset
// |Enable | Flag | & | | Flag | Flag | Flag
// |Flag | | Flag | | | |
//------------------------------------------------------------------
// NOTE! : Comparator 0 must be enabled before it is enabled as a
// reset source.
//
// NOTE! : External CNVSTR must be enalbed through the crossbar, and
// the crossbar enabled prior to enabling CNVSTR as a reset source
//------------------------------------------------------------------
RSTSRC = 0x00; // Reset Source Register
//----------------------------------------------------------------
// Interrupt Configuration
//----------------------------------------------------------------
IE = 0x00; //Interrupt Enable //总中断允许,UART0中断允许
IP = 0x00; //Interrupt Priority
EIE1 = 0x00; //Extended Interrupt Enable 1
EIE2 = 0x00; //Extended Interrupt Enable 2 //外部中断6允许
EIP1 = 0x00; //Extended Interrupt Priority 1
EIP2 = 0x00; //Extended Interrupt Priority 2
P3IF=0x00; //P3.6下降沿中断
EIP1=0x02;
// other initialization code here...
} //End of config
/*======================================================
** 函数名称: display_plane_menu
** 功能描述: 显示5Q设备的开机画面
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
**----------------------------------------------------
** 作 者: wjf
** 日 期: 2008/08/08
======================================================*/
void display_plane_menu(void) //开机菜单
{
LcmClear();
dprintf(4,0x10, "欢迎使用-5V型汽车排放气体分析仪",0);
dprintf(15,0x30, "版本:007",0);
hprintf(3,0x60, "天津圣威科技发展有限公司",0);
dprintf(12,0x85, "让世界更美丽,让空气更清新!",0);
dprintf(3,0xd0, "网址:www.shengweiscience.com",0);
}
/*======================================================
** 函数名称: display_main_menu
** 功能描述: 主菜单
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
**----------------------------------------------------
** 作 者: wjf
** 日 期: 2008/08/08
======================================================*/
void display_main_menu(void) //主菜单
{
LcmClear();
hprintf(14,0x15, "主菜单",0);
dprintf(11,0x25, "~ ~ ~ ~ ~ ~ ~ ~",0);
dprintf(13,0x30, "1.测量数据",0);
dprintf(13,0x45, "2.调 零",0);
dprintf(13,0x5A, "3.仪器校准",0);
dprintf(13,0x6f, "4.仪器设置",0);
dprintf(13,0x84, "5.泄漏检查",0);
dprintf(13,0x99, "6.版本信息",0);
dprintf(13,0xae, "7.查看记录",0);
dprintf(5,0xc5, "状态提示:",0);
dprintf(4,0xd5, "--------------------------------",0);
dprintf(6,0xe0, "OK 确定 NO 取消 选择功能",0);
printfUpDown(23,0xe0, 0, 0);
printfUpDown(24,0xe0, 1, 0);
}
/*======================================================
** 函数名称: display_input_plane
** 功能描述: 输入车牌画面
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
**----------------------------------------------------
** 作 者: wjf
** 日 期: 2008/08/09
注:缺少初始化信息×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
======================================================*/
void display_input_plane(void) //车牌输入菜单
{
Uchar i=0;
dprintf(8,0x30, "车牌号码:",0);
dprintf(5,0x9b, "状态提示:",0);
dprintf(4,0xab, "--------------------------------",0);
dprintf(8,0xb6, "OK 测量 NO 取消 选择",0);
printfUpDown(25,0xb6, 0, 0);
printfUpDown(26,0xb6, 1, 0);
dprintf(12,0xd6, "选字 确定",0);
printfLeftRight(9,0xd6,0,0);
printfLeftRight(21,0xd6,1,0);
byte_sel=position_sel=yuyan_sel=0;//初始化
printlcd_single();
for(i=0;i<7;i++)
{
car_number[i]=91;
}
}
/*======================================================
** 函数名称: display_shezhi_menu
** 功能描述: 设置菜单
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
**----------------------------------------------------
** 作 者: wjf
** 日 期: 2008/08/09
注:
======================================================*/
void display_shezhi_menu(void)//设置菜单
{
LcmClear();
hprintf(13,0x15, "仪器设置",0);
dprintf(11,0x25, "~ ~ ~ ~ ~ ~ ~ ~",0);
// dprintf(11,0x34, "~ ~ ~ ~ ~ ~ ~ ~",0);
dprintf(13,0x35, "1.亮度调节",0);
dprintf(13,0x4a, "2.串口设置",0);
dprintf(13,0x5f, "3.转速设置",0);
dprintf(13,0x74, "4.测量方式",0);
dprintf(13,0x89, "5.燃料选择",0);
dprintf(13,0x9e, "6.时间设置",0);
dprintf(5,0xc0, "状态提示:",0);
dprintf(4,0xd0, "--------------------------------",0);
dprintf(6,0xda, "OK 确定 NO 取消 选择功能",0);
printfUpDown(23,0xda, 0, 0);
printfUpDown(24,0xda, 1, 0);
}
/*======================================================
** 函数名称: display_set_time_menu
** 功能描述: 时间设置菜单
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
**----------------------------------------------------
** 作 者: wjf
** 日 期: 2008/08/09
注:
======================================================*/
void display_set_time_menu(void)//时间设置菜单
{
LcmClear();
hprintf(13,0x15, "时间设置",0);
dprintf(11,0x25, "~ ~ ~ ~ ~ ~ ~ ~",0);
dprintf(5,0xc0, "状态提示:",0);
dprintf(2,0xd0, "------------------------------------",0);
dprintf(2,0xda, "OK 确定 NO 取消 数值增减 位移",0);
printfUpDown(18,0xda, 0, 0);
printfUpDown(19,0xda, 1, 0);
printfLeftRight(30,0xda,0,0);
printfLeftRight(32,0xda,1,0);
}
/*======================================================
** 函数名称: display_bright_menu
** 功能描述: 亮度调节菜单
** 输入参数: 无
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -