📄 max197.c
字号:
//#include<choose_cs.c>
#define data_bus_out PORTC
#define data_bus_in PINC
#define data_bus_en DDRC
#define WR PORTA.1
#define RD PORTA.0
#define WR_en DDRA.1
#define RD_en DDRA.0
#define IRQ PINA.4
#define IRQ_en DDRA.4
//A0=0的时候写入和读出的均为数据,A0=1的时候写命令,读状态
#define A0 PORTA.2
#define CS_8279 6 //PORTD.1
#define A0_en DDRA.2
#define fangshi_8279 10 //定义显示的方式,以10进制显示还是16进制显示
flash unsigned char biao_8279[2][16]={
0x0C,0x9F,0x4A,0x0B,0x99,0x29,0x28,0x8F, // 0,1,2,3,4,5,6,7
0x08,0x09,0x88,0x38,0x6C,0x1A,0x68,0xE8, // 8,9,A,b,C,d,E,F
0x04,0x97,0x42,0x03,0x91,0x21,0x20,0x87, // 0,1,2,3,4,5,6,7
0x00,0x01,0x80,0x30,0x64,0x12,0x60,0xE0 // 8,9,A,b,C,d,E,F
};
flash unsigned char keybord[]={
193,200,201,208,216,224,194,202,209,217,//0,1,2,3,4,5,6,7,8,9
218,195,203,210,211,219,//A,B,C,D,E,F
227,226,225//最右边的三个按键,右边从上面往下面分别
};
bit key_flag=0; //是作为输入一串数字的标志
//unsigned char key=0;
unsigned long int key1=0; //是作为输入几个按键的合成的数字
unsigned long int key2=0;
unsigned char kind;
bit auto_flag,artefact_flag;//定义自动测量和手工测量标志位
void send_8279_data(unsigned char w)//送数据,此时的C/D=0;表示送的是数据
{
data_bus_en=0xff;
//choose_cs(CS_8279);//选择上芯片
//start_cs();
//choose_cs(CS_8279);//选择上芯片
A0=0;//表示送数据
WR=0; //写入指令
data_bus_out=w;
WR=1;
// choose_cs(7);
//close_cs(); //关闭片选
data_bus_en=0x00;
data_bus_out=0xff;
}
/***************************/
void send_8279_com(unsigned char w)//送指令,此时的C/D=1;表示送的是指令
{
data_bus_en=0xff;
//choose_cs(CS_8279);//选择上芯片
// start_cs();
// choose_cs(CS_8279);//选择上芯片
A0=1; //表示送指令
WR=0; //写入指令
data_bus_out=w;
WR=1;
// choose_cs(7);
//close_cs(); //CS_8279=1; 关闭片选
data_bus_en=0x00;
data_bus_out=0xff;
}
/***************************/
/***************************/
unsigned char read_8279_data() // 读数据
{
unsigned char k;
unsigned char key3;
send_8279_com(0x40); //读键盘的0地址里面的键值
data_bus_en=0x00;
data_bus_out=0x00;
// choose_cs(CS_8279);//选择上芯片
// start_cs();
// choose_cs(CS_8279);//选择上芯片
A0=0;//表示接收数据
RD=0; //读取数据
RD=1;
key3=data_bus_in;
// choose_cs(7);
// close_cs(); //关闭片选
data_bus_en=0xff;
data_bus_out=0xff;
for(k=0;k<19;k++)if(key3==keybord[k])break;
return k;
}
/*************在8279上显示数字********************************/
/*************************************************************/
void xianshi_8279(long w,unsigned char k)//k 为,w为要显示的数字
{
unsigned char i;
unsigned char flag=0;
// choose_cs(CS_8279);
start_cs();
choose_cs(CS_8279);
k=0x87-k;
if(w<0) {flag=1; w=-w; }
for(i=0x87;i>=0x80;i--)
{
if(w||(k<=i))
{
send_8279_com(i); //写显示RAM的命令字
if(k==i) send_8279_data(biao_8279[1][w%fangshi_8279]);
else send_8279_data(biao_8279[0][w%fangshi_8279]);
w=w/fangshi_8279;
}
else
{
send_8279_com(i);
if(flag) {send_8279_data(0xfb);flag=0;}
else send_8279_data(0xff);
}
}
choose_cs(7);
close_cs();
}
void add_init() //使用追加显示之前要初始化
{send_8279_com(0x90);}
void add_8279(unsigned char w)//追加显示
{send_8279_data(biao_8279[0][w]);}
//**************初始化**********************//
/*******************************************/
void init_8279()
{
DDRA=0Xef;
PORTA=0xef;
PINA=0x10;
DDRC=0xff;
PORTC=0xff;
// choose_cs(CS_8279);
start_cs();
choose_cs(CS_8279);
send_8279_com(0x18); //选择从右边输入16位字符显示,000***** ;注:初始化为16位的时候就会减少功耗60mA
send_8279_com(0xdc); //插除显示RAM
delay_us(500); //擦除了RAM之后要等待至少190us
send_8279_com(0x21); //8279对输入的频率进行13分频,得到100KHz,001*****
choose_cs(7);
close_cs();
}
//*********查询数据*************//
//******************************//
void read_8279()
{
unsigned char key=0;
DDRA=0Xef;
PORTA=0xef;
PINA=0x10;
DDRD=0xe0;
DDRC=0xff;
PORTC=0xff;
// choose_cs(CS_8279);
start_cs();
choose_cs(CS_8279);
if(IRQ) //当有健按下, 进行读数
{
key=read_8279_data();
/*
switch (key)
{
case 16 :{ if(key_flag) {key2=key1; key_flag=0;} } break;
case 17 : break;// { if(key_flag) { key1=0; key_flag=0;} }
case 18 : { key1=0; key_flag=1; } break;
default : { if(key_flag)
{ key1=key1*10; key1+=key; if(key1>100000000)key1=0;}
}break;
} */
switch (key)
{
case 1: { kind=1; break;}
case 2: { kind=2; break;}
case 3: { kind=3; break;}
case 4: { kind=4; break;}
case 5: { kind=5; break;}
case 17: { artefact_flag=1; auto_flag=0; break;}
case 18:{ auto_flag=1; artefact_flag=0; break;}
default: break;
}
}
choose_cs(7); //作为没有用的片选信号 ,关掉8279的片选信号
close_cs();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -