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

📄 flash-save.c

📁 在工程中数据的实时显示与读取程序
💻 C
字号:
#pragma DEBUG OBJECTEXTEND CODE // pragma lines can contain state C51

#include <aduc831.h>                             /* define 8051 registers */
#include <stdio.h>      
#include <absacc.h>
#include <math.h>

#define BOX_NUM 6//(0--0x0000;1--0x0002;2--0x0004;3--0x0006;4--0x0008;5--0x000a;6--0x000c;7--0x000e;8--0x0010;9--0x0012;10--0x0014)
#define AD_KKX 0x013b//0-0x0130
#define AD_KKY 0x012d//0-0x012e


sbit n1=P1^4;//esc
sbit n2=P1^5;//up
sbit n3=P1^6;//down
sbit n4=P1^7;//enter

sbit LCDBK=P2^7;
sbit Lcd_cs=P3^5;
sbit Lcd_dat=P3^6;
sbit Lcd_clk=P3^7;

void nop(void);
void Delay(unsigned int ppd);
void Lcd_initial(void);	 
void Lcd_set(unsigned char ss);
void Lcd_com_dat(unsigned char tt);
void read_flash(void);
void Lcd_num(unsigned char unit,unsigned char dd);

/***************************************************************************************************/
void main(void)
{

	CFG831 = 0x11;
	SP = 0x60;
	P1 = 0;
	Lcd_initial();
///*
//	ECON = 0x06; //erase all

	while(!(n1||n2));
	if(n1)
	{
		
		EADRH = 0x00;
		EADRL = 0x00;
		ECON = 0x01; //read page		
		EDATA1 = BOX_NUM;
				
		ECON = 0x05; //erase page
		ECON = 0x02; //write page
		ECON = 0x04; //check
		if(ECON == 0)//right
		{
			Lcd_num(0x80,0x88);
		}
		Delay(1000);

		EADRH = 0x00;
		EADRL = 0x01;		
		EDATA1 = (AD_KKX & 0xff00) >> 8;
		EDATA2 = (AD_KKX & 0xff);
		EDATA3 = (AD_KKY & 0xff00) >> 8;
		EDATA4 = (AD_KKY & 0xff);

		ECON = 0x05; //erase page
		ECON = 0x02; //write page
		ECON = 0x04; //check
		if(ECON == 0)//right
		{
			Lcd_num(0x90,0x88);
		}
		Delay(1000);

	
	}

	else
	{
		EADRH = 0x00;
		EADRL = 0x00;	
		ECON = 0x01;
		Lcd_num(0x80,EDATA1);
		Delay(1000);
		
		EADRH = 0x00;
		EADRL = 0x01;
        ECON = 0x01;           
		Lcd_num(0x80,EDATA1);
		Lcd_num(0x82,EDATA2);
		Lcd_num(0x90,EDATA3);
		Lcd_num(0x92,EDATA4);
		Delay(1000);
	}
	while(1);

}

//=============================================== LCD =============================================//
void nop(void)
{
	unsigned char data i;
	i=i;i=i;
}
void Delay(unsigned int ppd)//(1ms)
{
	unsigned char data j;
	while((ppd--)!=0)
		{
			for(j=0;j<125;j++)
				{;}
		}	
}
void Lcd_initial(void)

{
	LCDBK=0;
//	lcdbk_open(1);//开背光
	Delay(50);
	Lcd_set(0xf8);//指令
	Delay(1);
	Lcd_com_dat(0x30);//功能设定(8-bit;基本指令集)
	Delay(1);
	Lcd_com_dat(0x0c);//显示状态开/关(光标关)
	Delay(1);
	Lcd_com_dat(0x01);//清屏
	Delay(20);
	Lcd_com_dat(0x14);//光标和显示移位(光标右移显示不移)
	Delay(1);
	Lcd_com_dat(0x06);//进入点设定(光标右移,画面整体不移)    
}

void Lcd_set(unsigned char ss)//指令/数据?
{
	unsigned char data j=0;

	Lcd_cs=1;

	for(j=8; j>=1; j--)
 		{	
			Lcd_clk=0;
			Lcd_dat=(ss & 0x80)>>7;
			ss=ss<<1;
			nop();	
			Lcd_clk=1;
 			nop();
		}	
}

void Lcd_com_dat(unsigned char tt)
{
	unsigned char data i=0,j,t[2];

	t[0]=tt & 0xf0; 
	t[1]=(tt & 0x0f)<<4;

	Lcd_cs=1;
	while(i<2)
		{
			for(j=8; j>=1; j--)
		 		{	
					Lcd_clk=0;
					Lcd_dat=(t[i] & 0x80)>>7;
					t[i]=t[i]<<1;
					nop();	
					Lcd_clk=1;
		 			nop();
				}	
			i++;	
		}
}

void Lcd_num(unsigned char unit,unsigned char dd)
{
	unsigned char data dd1,dd2,mm;

	dd1=((dd&0xf0)>>4);
	dd2=(dd&0x0f);
	
	Lcd_set(0xf8);
	Lcd_com_dat(unit);		
	Lcd_set(0xfa);
	Lcd_com_dat(0xa3);
	if(dd1<0x0a)
	{
	mm=(0xb0+dd1);
	}
	else
	{
	mm=(dd1-0x09+0xe0);
	}
	Lcd_com_dat(mm);

	
	Lcd_set(0xf8);
	Lcd_com_dat(unit+1);		
	Lcd_set(0xfa);
	Lcd_com_dat(0xa3);
	if(dd2<0x0a)
	{
	mm=(0xb0+dd2);
	}
	else
	{
	mm=(dd2-0x09+0xe0);
	}
	Lcd_com_dat(mm);
}

⌨️ 快捷键说明

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