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

📄 editor.c

📁 NXP LPC系列AMR7的开发程序源码(LCD
💻 C
字号:
// -------------------------------------------------------------------
// -----------------------LPC2106 memory editor-----------------------
// -------------------------------------------------------------------
// Written for TinyARM MB40 development board by PASAT
// -------------------------------------------------------------------
// THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
// -------------------------------------------------------------------

#include "ma_uart0.h"    /* UART0 Module driver header file */
#include "ma_gpio.h"     /* GPIO  Module driver header file */
#include "ma_spi.h"      /* SPI   Module driver header file */
#include "ma_i2c.h"      /* I2C   Module driver header file */

#include "string.h"
#include "stdio.h"
#include "ctype.h"
#include "mainmb40.h"
#include "my_files.h"
#include "editor.h"
#include "key_api.h"
#include "lcd_api.h"

extern unsigned char RamBuffer[];

unsigned short CurrAdr=0;

void Exec_EditRAM(void)
{
	char *EndPtr;
	char AdrBuffer[10],DataBuffer[10];
	char *AdrPtr,*DataPtr;
	U8 Position,Result,Data8,CurrData;

	DataPtr=&DataBuffer[0];
	AdrPtr=&AdrBuffer[0];
	sprintf(AdrPtr,"%04hX",CurrAdr);

	My_PutChar(0xD);
	My_PutChar(0xA);
	My_PutString(">Editor");
	My_PutChar(0xD);
	My_PutChar(0xA);
	My_PutString(" Address=");
	My_PutString(AdrPtr);
    My_Put_Some(KEY_LEFT,4);
	Position=1;

	do
	{	//entering start address - 4 hex digits,Space,Backspace
		Result=My_WaitForChar(&Data8);
		if (Result) Data8=0;

		if (Data8==KEY_LEFT)
		{
			if (Position>1)
			{
				Position--;
				My_Put_Some(KEY_LEFT,1);
			}
			else
			{
				sprintf(AdrPtr,"%04hX",CurrAdr);
				My_PutString(AdrPtr);
				My_Put_Some(KEY_LEFT,1);
				Position=4;
			}
		}

		if (Data8==0x20)
		{
			Data8=AdrBuffer[Position-1];
			My_PutChar(Data8);
			Data8=0x20;

			if (Position<4)
				Position++;
			else
			{
				My_Put_Some(KEY_LEFT,4);
				Position=1;
			}
		}

		if (isxdigit(Data8))
		{
			// Limit address to 0x7FFF !
			if (isdigit(Data8)==0) toupper(Data8);
			if ((Position!=1) | (Data8<'8'))
			{
				My_PutChar(Data8);
				AdrBuffer[Position-1]=Data8;
				CurrAdr=(unsigned short)strtoul(AdrPtr,&EndPtr,16);
				if (Position<4) Position++;
				else
				{
					My_Put_Some(KEY_LEFT,4);
					Position=1;
				}
			}
		}
	}
	while ((Data8 != KEY_ENTER) & (Data8 != KEY_ESC));

	if (Data8 == KEY_ESC) return;

	do
	{
		My_PutChar(0xD);
		My_PutChar(0xA);
		//My_PutString(" (xxxx) =");
		//My_PutString(" Adr=");
		My_PutString(" (");
		sprintf(AdrPtr,"%04hX",CurrAdr);
		My_PutString(AdrPtr);
		My_PutString(") ");

		// RamBuffer[0] reserved for I2C stuff
		CurrData = RamBuffer[CurrAdr+1];
		My_PutString("= ");
		sprintf(DataPtr,"%02hX",CurrData);
		My_PutString(DataPtr);
	    My_Put_Some(KEY_LEFT,2);
		
		Position=1;

		do
		{	//entering data byte - 2 hex digits,Space,Backspace
			Result=My_WaitForChar(&Data8);
			if (Result) Data8=0;

			if (Data8==KEY_LEFT)
			{
				if (Position>1)
				{
					Position--;
					My_Put_Some(KEY_LEFT,1);
				}
				else
				{
					sprintf(DataPtr,"%02hX",CurrData);
					My_PutString(DataPtr);
					My_Put_Some(KEY_LEFT,1);
					Position=2;
				}
			}

			if (Data8==0x20)
			{
				Data8=DataBuffer[Position-1];
				My_PutChar(Data8);
				Data8=0x20;

				if (Position<2) Position++;
				else
				{
					My_Put_Some(KEY_LEFT,2);
					Position=1;
				}
			}

			if (isxdigit(Data8))
			{
				My_PutChar(Data8);
				DataBuffer[Position-1]=Data8;
				CurrData=(unsigned short)strtoul(DataPtr,&EndPtr,16);
				if (Position<2) Position++;
				else
				{
					My_Put_Some(KEY_LEFT,2);
					Position=1;
				}
			}

		}
		while ((Data8 != KEY_ENTER) & (Data8 != KEY_ESC));

		if (Data8 == KEY_ENTER)
		{
			RamBuffer[CurrAdr+1]=CurrData;
			CurrAdr++;
			CurrAdr &= 0x7FFF;
		}
	}
	while (Data8 != KEY_ESC);
	My_PutChar(0xD);
	My_PutChar(0xA);

}


//----------------------------------------------------------------
// Exec_Lcd_Editor
//----------------------------------------------------------------
// Simple LCD editor
// Exited when ESC is pressed on PS/2 keyboard
//----------------------------------------------------------------
void Exec_Lcd_Editor(void)
{
	U8	Val8;
	//S8 Result8;

	Lcd_Erase_CharScreen();

	for (;;)
	{
		while (Test_Char_Keyboard()==0)
		{
			// blinking cursor here
		}

		Val8 = Get_Char_Keyboard();
		if (Val8== KEY_ESC) return;

		// Handling extended keys
		if ((Val8==0xE0) | (Val8==0x00))
		{
			Val8 = Get_Char_Keyboard();
			Lcd_Put_Ctrl(Val8);
		}
		else
			Lcd_Putchar(Val8);
		// if <ENTER> add LF after CR
		if (Val8==0xD) Lcd_Putchar(0xA);

	}

};

⌨️ 快捷键说明

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