⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.#1

📁 C8051F020+RA8835 I/O口控制 中英文混合显示
💻 #1
📖 第 1 页 / 共 2 页
字号:
#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 + -