📄 flash-save.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 + -