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

📄 main.c

📁 用汇编和C编写的
💻 C
字号:
//===============================================================
//
//        The information contained herein is the exclusive property of
//      Sunplus Technology Co. And shall not be distributed, reproduced,
//      or disclosed in whole in part without prior written permission.
//
//            (C) COPYRIGHT 2001   SUNPLUS TECHNOLOGY CO.
//                           ALL RIGHTS RESERVED
//
//    The entire notice above must be reproduced on all authorized copies.
//
//==============================================================
//============================================================
//  工程名称: UART&LCD&SPR4096.spj
//  功能描述:  将UART通讯接收的数据在LCD上显示。
//  文件来源:《SPCE061A单片机实验指导书》,"实验三十七	UART控制液晶显示"  第132页
//  IDE环境:   SUNPLUS u'nSPTM  IDE 1.8.4
//
//  涉及的库:
//  组成文件:
//    	main.c hardware.asm 4096.asm isr.asm SPLC501DisplayTAB.asm SPLC501Hardware.asm Splc501sys.asm
//===============================================

//============================================================
// 文件名称:main.c 
// 实现功能: 将UART通讯接收的数据在LCD上显示
//============================================================

extern	void				SP_SIOInitial(void);
extern	void				SP_SIOMassErase(void);
extern	unsigned	int		SP_SIOReadAByte(unsigned long int g_ulAddr);
extern	void				Init_sys(void);	
extern	void				FG_InitGraphic(void);
void						SP_UARTInitial(void);

#define 	C_UARTBaudRate_9600_H     0x05
#define 	C_UARTBaudRate_9600_L     0x00

#define		M_SECTOR	10											//第几个扇区(0~255)
#include	"SPCE061V004.H"
#include	"unSPMACRO.h"
#include 	"lab_parameter.h"

unsigned	long	ulStartAddr,ulEndAddr,g_ulAddr;
unsigned	int		g_uiData,g_uiFlag,g_uiTimeOutCnt,g_uiHalfSecondCnt;

//============================================================= 
// 函数名称:    int main()   
// 功能描述:    将UART通讯接收的数据在LCD上显示
// 语法格式:    int main() 
//入口参数:     无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=============================================================

main()
{

	int 				X,Y;									//X:横坐标   Y:纵坐标
	unsigned	char	*ucStr1 = "UART Ready";
	unsigned	char	*ucStr2 = "Receiving...";
	unsigned	char	*ucStr3 = "Complete";
	unsigned	char	*ucCode;

	SP_SIOInitial();											//SIO初始化
	SP_UARTInitial();											//UART初始化
	Init_sys();													//LCD初始化
	FG_InitGraphic();

	*P_INT_Ctrl = C_IRQ5_2Hz;									//开2Hz中断,用来定时清看门狗
	INT_IRQ();
//	g_uiData = *P_IOB_Buffer;									//IOB11:低电平,选择SPR4096的FLASH
//	g_uiData &= 0xf7ff;
//	*P_IOB_Data = g_uiData;								

	ulStartAddr=0x800*(M_SECTOR);					
	g_ulAddr = ulStartAddr;
	
	SP_SIOMassErase();											//对SPR4096的所有扇区进行擦除

	ucCode = ucStr1;
	X = 120;
	Y = 40;
	FG_PutStr(ucCode,large,X,Y);								//LCD显示ucStr1的内容
 	
	g_uiFlag=0;
	while(g_uiFlag==0);											//等待接收到第一个数据

	FG_ClearScreen(0);											//LCD清屏
	ucCode = ucStr2;
	X = 120;
	Y = 40;
	FG_PutStr(ucCode,large,X,Y);								//LCD显示ucStr2的内容
	
	g_uiTimeOutCnt = 0;
	while(g_uiFlag==1)											//等待接收完毕
	{
		g_uiTimeOutCnt++;
		if(g_uiTimeOutCnt >= 0xfffe)	
			g_uiFlag = 2;
	}
	ulEndAddr = g_ulAddr;

	FG_ClearScreen(0);											//LCD清屏
	ucCode = ucStr3;
	X = 120;
	Y = 40;
	FG_PutStr(ucCode,large,X,Y);								//LCD显示ucStr3的内容

	FG_ClearScreen(0);											//LCD清屏
	g_ulAddr = ulStartAddr;
	for(X = 125,Y = 60;g_ulAddr < ulEndAddr;g_ulAddr++) 
	{
		g_uiData=SP_SIOReadAByte(g_ulAddr);						//从SPR4096读出一个Byte的数据
		FG_PutChar(g_uiData,large,X,Y);							//在LCD上显示该数据
		
		X -= FG_GetCharWidth(g_uiData,large);
		if(X < 10)												//换行
		{
			X = 125; 
			Y -= (2+FG_GetCharHeight(g_uiData,large)); 			
		}
		if(Y < FG_GetCharHeight(g_uiData,large))				//换屏
		{
			X = 125;
			Y = 60;
			
			g_uiHalfSecondCnt = 0;
			while(g_uiHalfSecondCnt < 6);						//延时
			
			FG_ClearScreen(0);									//LCD清屏
		}
	}

	while(1);
}

//============================================================= 
// 函数名称:    SP_UARTInitial()
// 功能描述:	UART初始化
// 语法格式:    void SP_UARTInitial(void);
// 入口参数:    无
// 出口参数:    无
// 注意事项:    无
//=============================================================
void SP_UARTInitial(void)
{
	*P_IOB_Dir |= 0x0400;								//bit10设为输出(Tx),bit7设为输入(Rx)				
	*P_IOB_Dir &= 0xff7f;					 		
	*P_IOB_Attrib |= 0x0480;					
	*P_IOB_Buffer &= 0xfb7f;
						
	*P_UART_Command1 = C_UART_Reset;					//UART复位
	
	*P_UART_BaudScalarHigh = C_UARTBaudRate_9600_H;		//波特率设为9600
	*P_UART_BaudScalarLow = C_UARTBaudRate_9600_L;

	*P_UART_Command1 = C_UART_Rx_IRQ_ENB;				//UART接收中断使能
	*P_UART_Command2 = C_UART_Rx_Pin_ENB;				//UART接收管脚使能
}


	
		
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -