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

📄 max197.c

📁 12位ADmax197的读写程序
💻 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 + -