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

📄 ad119read.c

📁 单片机与cpld总线方式通信
💻 C
字号:
/*7218在硬件译码的时候,低四位数据进行译码,最高位控制小数点,其余三位无效*/
// distab保存要显示的8位数据(每一位为一个字节)
// ledtab为7218软件译码字型表
#include<reg52.h>
#include<absacc.h>
#define DisCmd XBYTE [0xC100]                     //7218控制字地址
#define DisData XBYTE [0xC000]                    //7218数据口地址
#define scode 0xb0                                //7218软件译码方式命令字
#define bcode 0x90                                //B码译码方式命令字
#define hexcode 0xd0                              //软件译码方式命令字
#define unchar  unsigned char 
sbit P3_0=P3^0;
sbit P3_1=P3^1;
sbit P1_0=P1^0;
bit enter=0;
char keynum;                                       //按键号 
char ledcursor=7;                                  //保存光标当前位置
char distab[8]={0x13,0x13,0x14,0x00,0x12,0x12,0x0e,0x11} ; // 要显示的内容 hello-pp
char code ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
               //0,   1,    2,   3,   4,   5,   6,   7 
                0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,
               //8    ,9   ,a   ,b   ,c    ,d  ,e    ,f  
                0x80,0xbe,0x8b,0xee,0x84 };
               //熄灭 H    L    P    -
void cpld();
void delay200ms()
 { 
   int i=10000,j=10000;
   for(j;j>0;j--)
   for(i;i>0;i--);
  }           
void display()
{
   unchar i;      
   DisCmd=scode;            //采用软件译码
   for(i=0;i<8;i++)      //将distab中的数据送如7218
   {
   if(i==3)
   DisData=ledtab[distab[i]]+0x80;
   else
   DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
 }
  for(i=10000;i>0;i--); 
}

//**************************************************************************************

void keyprg(unchar key)  //键盘键值执行的程序
{  
  unchar i;
  if((key<=9)&enter)
   {   
      distab[ledcursor]=keynum;        //键值送入distab最低位保存
	   if(ledcursor>0)                //光标移位
           ledcursor--;
       else 
           ledcursor=7;
   	}
  
  else 
   {
    switch(key)
	   {
	     case 0x0D:  //加
		 if(distab[ledcursor]<0x09)
		 distab[ledcursor]++;
		 else
         distab[ledcursor]=0;
	     break;	
 		 case 0x0E:    //减
		  if(distab[ledcursor]>0)
		 distab[ledcursor]--;
		 else
         distab[ledcursor]=9;
	     break;	 
		 case 0x0A:
		 //KeyprgF1();
         for(i=0;i<8;i++)      //将distab中的数据送如7218
         {
          distab[i]=0;
          }
		  ledcursor=7;
	     break;	 
		 case 0x0B:            //功能键F2
		//KeyprgF2();
	     break;	 
		 case 0x0C:
		 //KeyprgClear();
         if(ledcursor<7)                //光标移位
           ledcursor++;
       else 
           ledcursor=0;
	     break;	 
		 case 0x0F:
		 enter=!enter;
		 distab[7]=enter;
		 //while(enter)
		
		 //KeyprgEnter();
	     break;	 
		 default:
	     break;	 
		}
	 }
	 display(); //显示键值
}
//**************************************************************************************
void intt0() interrupt 0 
{ 
 
 EX0=0;              //关键盘中断,禁止相应其他按键
 keynum=P1;          //从p1口读入键盘值
 keynum=keynum&0x0f; //取低四位;
 //keyprg(keynum);
 if(keynum==0x00)
  P3_0=0;
 if(keynum==0x01)
  P3_1=0;
  EX0=1;
}

//**************************************************************************************
void flink()
{
  unchar  i;
  while(enter)           //光标位置闪烁
   {
    DisCmd=scode;         //采用软件译码
    for(i=0;i<8;i++)      //将distab中的数据送如7218       
      {
        if(i==ledcursor)
	        DisData=0x80; //查表转化并将字型送入7218 
	    else
            DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
      }
	  delay200ms();
	 DisCmd=scode;            
	 display();
     delay200ms();
   }
}
//***************************************************************************************
void cpld()
{
 
  unchar  xdata *cpld;
  unchar ah,al;
  unsigned int  d;
  //EX0=1;
  //if(enter)
  //flink();
 
  while(enter)
    {
	  cpld=0xA000;
      al=*cpld++;
	  ah=(*cpld)&0x0f;
	  d=ah*0x100+al;
      //distab[0]=adin&0x0f;
	  //distab[1]=(adin&0xf0)/16;
	  //d=(adin*4930)/255;    //实际电压值为4.935v;左边参考电压如为2.375,就换成2375
      //voltage=d;
      distab[3]=d/1000;
      d=d%1000;
      distab[2]=d/100;
     d=d%100;
     distab[1]=d/10;
     d=d%10;
     distab[0]=d;
    // distab[7]=0x10;
      distab[6]=0x10;
      distab[5]=0x10;
      distab[4]=0x10;
      display();
      delay200ms();
    }
}
void main()
{ 
   EX0=1;
  EA=1;
  display();
  while(1);
// while(1)
//  while(enter)
//  cpld();
  
  
 }

⌨️ 快捷键说明

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