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

📄 cpld.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 P1_0=P1^0;
bit enter=0;
char keynum;                                       //按键号 
char ledcursor=7;                                  //保存光标当前位置
char distab[8]={0x13,0x13,0x10,0x10,0x10,0x10,0x10,0x10} ; // 要显示的内容 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 delay200ms()
 { 
   int i=8000,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
   {
  DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
	 
}
   
}

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

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;
		 //KeyprgEnter();
	     break;	 
		 default:
	     break;	 
		}
	 }
	 display(); //显示键值
}
//**************************************************************************************
void intt0() interrupt 0 
{ 
   char xdata *cpld;
   unchar j=0,a;
   cpld=0xA000;
   EX0=0;              //关键盘中断,禁止相应其他按键
   keynum=P1;          //从p1口读入键盘值
   keynum=keynum&0x0f; //取低四位;
 //keyprg(keynum);
      if(keynum==0x0f)
   {     
      a=*cpld;
      distab[0]=a&0x0f;
      distab[1]=(a&0xf0)/16;
      display();
   }
  else
 {
   *cpld=keynum;
 }

  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 main()
{ 

  EX0=1;
  EA=1;
  display();
  while(1);
    
 }

⌨️ 快捷键说明

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