📄 93c46.c
字号:
/********************************************************************
k1 = 位选数码管
k2 = 加
k3 = 擦除
k4 = 保存
********************************************************************/
#include <reg51.h>
#include <intrins.h>
//define OP code
#define OP_EWEN_H 0x00 // 00 write enable
#define OP_EWEN_L 0x60 // 11X XXXX write enable
#define OP_EWDS_H 0x00 // 00 disable
#define OP_EWDS_L 0x00 // 00X XXXX disable
#define OP_WRITE_H 0x40 // 01 A6-A0 write data
#define OP_READ_H 0x80 // 10 A6-A0 read data
#define OP_ERASE_H 0xc0 // 11 A6-A0 erase a word
#define OP_ERAL_H 0x00 // 00 erase all
#define OP_ERAL_L 0x40 // 10X XXXX erase all
#define OP_WRAL_H 0x00 // 00 write all
#define OP_WRAL_L 0x20 // 01X XXXX write all
//define pin
sbit CS = P1^6;
sbit SK = P1^4;
sbit DI = P1^5;
sbit DO = P1^7;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit disp_bit0=P2^0;
sbit disp_bit1=P2^1;
sbit disp_bit2=P2^2;
sbit disp_bit3=P2^3;
sbit disp_bit4=P2^4;
sbit disp_bit5=P2^5;
sbit disp_bit6=P2^6;
sbit disp_bit7=P2^7;
void start();
void ewen();// 使能写入操作
void ewds();// 禁止写入操作
void erase();// 擦除全部内容
void write(unsigned char addr, unsigned char indata);
unsigned char read(unsigned char addr);
void inop(unsigned char op_h, unsigned char op_l);
void shin(unsigned char indata);
unsigned char shout();
unsigned char key_scan();
void delay_1ms(unsigned char ms);
bit flash_bit,flash_cpl;
unsigned char eeprom_data[8],flash_number_bit,flash_500ms,disp_bit;
unsigned char disp_code[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, //0,1,2,3,4,5,6
0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF};//7,8,9,A,B,C,D,E,F,-
main()
{
unsigned char i,key_s,key_v,key_number;
TMOD&=0xf0;
TMOD|=0x01;
TH0=0xec;
TL0=0x78;
ET0=1;
flash_bit=1;
flash_cpl=1;
flash_500ms=0x00;
disp_bit=0x00;
EA=1;
TR0=1;
CS = 0; //初始化端口
SK = 0;
DI = 1;
DO = 1;
for(i=0;i<8;i++)
eeprom_data[i]=read(i);
for(i=0;i<8;i++)
{
if(eeprom_data[i]==0xff)
eeprom_data[i]=0x0f;
}
for(;;)
{
key_s=key_scan();
if(key_s^key_v)
{
delay_1ms(10);
key_s=key_scan();
if(key_s^key_v)
{
key_v=key_s;
if((key_s&0x08)==0x00)
{
flash_bit=0;
key_number=0x01;
flash_number_bit=0x01;
ewen();
//处理第1位数码管
do
{
key_s=key_scan();
if(key_s^key_v)
{
delay_1ms(10);
key_s=key_scan();
if(key_s^key_v)
{
key_v=key_s;
if((key_s&0x08)==0x00)
{
key_number=0x02;
flash_number_bit=0x02;
}
else if((key_s&0x04)==0x00)
{
if(++eeprom_data[0]==0x10)
eeprom_data[0]=0x00;
while(k2==0)
{
delay_1ms(200);
if(k2==0)
{
delay_1ms(100);
if(++eeprom_data[0]==0x10)
eeprom_data[0]=0x00;
}
}
}
else if((key_s&0x02)==0x00)
{
erase();
for(i=0;i<10;i++)
eeprom_data[i]=0x0f;
}
else if((key_s&0x01)==0x00)
{
erase();
for(i=0;i<8;i++)
write(i, eeprom_data[i]);
ewds();
flash_bit=1;
key_number=0x00;
}
}
}
}while(key_number==0x01);
//处理第2位数码管
do
{
key_s=key_scan();
if(key_s^key_v)
{
delay_1ms(10);
key_s=key_scan();
if(key_s^key_v)
{
key_v=key_s;
if((key_s&0x08)==0x00)
{
key_number=0x03;
flash_number_bit=0x03;
ewen();
}
else if((key_s&0x04)==0x00)
{
if(++eeprom_data[1]==0x10)
eeprom_data[1]=0x00;
while(k2==0)
{
delay_1ms(200);
if(k2==0)
{
delay_1ms(100);
if(++eeprom_data[1]==0x10)
eeprom_data[1]=0x00;
}
}
}
else if((key_s&0x02)==0x00)
{
erase();
for(i=0;i<10;i++)
eeprom_data[i]=0x0f;
}
else if((key_s&0x01)==0x00)
{ for(i=0;i<8;i++)
write(i, eeprom_data[i]);
ewds();
flash_bit=1;
key_number=0x00;
}
}
}
}while(key_number==0x02);
//处理第3位数码管
do
{
key_s=key_scan();
if(key_s^key_v)
{
delay_1ms(10);
key_s=key_scan();
if(key_s^key_v)
{
key_v=key_s;
if((key_s&0x08)==0x00)
{
key_number=0x04;
ewen();
flash_number_bit=0x04;
}
else if((key_s&0x04)==0x00)
{
if(++eeprom_data[2]==0x10)
eeprom_data[2]=0x00;
while(k2==0)
{
delay_1ms(200);
if(k2==0)
{
delay_1ms(100);
if(++eeprom_data[2]==0x10)
eeprom_data[2]=0x00;
}
}
}
else if((key_s&0x02)==0x00)
{
erase();
for(i=0;i<10;i++)
eeprom_data[i]=0x0f;
}
else if((key_s&0x01)==0x00)
{
for(i=0;i<8;i++)
write(i, eeprom_data[i]);
ewds();
flash_bit=1;
key_number=0x00;
}
}
}
}while(key_number==0x03);
//处理第4位数码管
do
{
key_s=key_scan();
if(key_s^key_v)
{
delay_1ms(10);
key_s=key_scan();
if(key_s^key_v)
{
key_v=key_s;
if((key_s&0x08)==0x00)
{
key_number=0x05;
ewen();
flash_number_bit=0x05;
}
else if((key_s&0x04)==0x00)
{
if(++eeprom_data[3]==0x10)
eeprom_data[3]=0x00;
while(k2==0)
{
delay_1ms(200);
if(k2==0)
{
delay_1ms(100);
if(++eeprom_data[3]==0x10)
eeprom_data[3]=0x00;
}
}
}
else if((key_s&0x02)==0x00)
{
erase();
for(i=0;i<10;i++)
eeprom_data[i]=0x0f;
}
else if((key_s&0x01)==0x00)
{
for(i=0;i<8;i++)
write(i, eeprom_data[i]);
ewds();
flash_bit=1;
key_number=0x00;
}
}
}
}while(key_number==0x04);
//处理第5位数码管
do
{
key_s=key_scan();
if(key_s^key_v)
{
delay_1ms(10);
key_s=key_scan();
if(key_s^key_v)
{
key_v=key_s;
if((key_s&0x08)==0x00)
{
key_number=0x06;
ewen();
flash_number_bit=0x06;
}
else if((key_s&0x04)==0x00)
{
if(++eeprom_data[4]==0x10)
eeprom_data[4]=0x00;
while(k2==0)
{
delay_1ms(200);
if(k2==0)
{
delay_1ms(100);
if(++eeprom_data[4]==0x10)
eeprom_data[4]=0x00;
}
}
}
else if((key_s&0x02)==0x00)
{
erase();
for(i=0;i<10;i++)
eeprom_data[i]=0x0f;
}
else if((key_s&0x01)==0x00)
{
for(i=0;i<8;i++)
write(i, eeprom_data[i]);
ewds();
flash_bit=1;
key_number=0x00;
}
}
}
}while(key_number==0x05);
//处理第6位数码管
do
{
key_s=key_scan();
if(key_s^key_v)
{
delay_1ms(10);
key_s=key_scan();
if(key_s^key_v)
{
key_v=key_s;
if((key_s&0x08)==0x00)
{
key_number=0x07;
ewen();
flash_number_bit=0x07;
}
else if((key_s&0x04)==0x00)
{
if(++eeprom_data[5]==0x10)
eeprom_data[5]=0x00;
while(k2==0)
{
delay_1ms(200);
if(k2==0)
{
delay_1ms(100);
if(++eeprom_data[5]==0x10)
eeprom_data[5]=0x00;
}
}
}
else if((key_s&0x02)==0x00)
{
erase();
for(i=0;i<10;i++)
eeprom_data[i]=0x0f;
}
else if((key_s&0x01)==0x00)
{
for(i=0;i<8;i++)
write(i, eeprom_data[i]);
ewds();
flash_bit=1;
key_number=0x00;
}
}
}
}while(key_number==0x06);
do
{
key_s=key_scan();
if(key_s^key_v)
{
delay_1ms(10);
key_s=key_scan();
if(key_s^key_v)
{
key_v=key_s;
if((key_s&0x08)==0x00)
{
key_number=0x08;
ewen();
flash_number_bit=0x08;
}
else if((key_s&0x04)==0x00)
{
if(++eeprom_data[6]==0x10)
eeprom_data[6]=0x00;
while(k2==0)
{
delay_1ms(200);
if(k2==0)
{
delay_1ms(100);
if(++eeprom_data[6]==0x10)
eeprom_data[6]=0x00;
}
}
}
else if((key_s&0x02)==0x00)
{
erase();
for(i=0;i<10;i++)
eeprom_data[i]=0x0f;
}
else if((key_s&0x01)==0x00)
{
for(i=0;i<8;i++)
write(i, eeprom_data[i]);
ewds();
flash_bit=1;
key_number=0x00;
}
}
}
}while(key_number==0x07);
//
do
{
key_s=key_scan();
if(key_s^key_v)
{
delay_1ms(10);
key_s=key_scan();
if(key_s^key_v)
{
key_v=key_s;
if((key_s&0x08)==0x00)
{
key_number=0x00;
ewen();
flash_number_bit=0x00;
}
else if((key_s&0x04)==0x00)
{
if(++eeprom_data[7]==0x10)
eeprom_data[7]=0x00;
while(k2==0)
{
delay_1ms(200);
if(k2==0)
{
delay_1ms(100);
if(++eeprom_data[7]==0x10)
eeprom_data[7]=0x00;
}
}
}
else if((key_s&0x02)==0x00)
{
erase();
for(i=0;i<10;i++)
eeprom_data[i]=0x0f;
}
else if((key_s&0x01)==0x00)
{
for(i=0;i<8;i++)
write(i, eeprom_data[i]);
ewds();
flash_bit=1;
key_number=0x00;
}
}
}
}while(key_number==0x08);
flash_bit=1;
}
}
}
}
}
void write(unsigned char addr, unsigned char indata)
// 写入数据indata到addr
{
inop(OP_WRITE_H, addr); // 写入指令和地址
shin(indata);
CS = 0;
delay_1ms(10); // Twp
}
unsigned char read(unsigned char addr)
// 读取addr处的数据
{
unsigned char out_data;
inop(OP_READ_H, addr); // 写入指令和地址
out_data = shout();
CS = 0;
return out_data;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -