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

📄 ddfstest1.c

📁 51单片机控制FPGA
💻 C
字号:
/*mcu向cpld写一个字节,再读出来 
//*7218在硬件译码的时候,低四位数据进行译码,最高位控制小数点,其余三位无效*/
// distab保存要显示的8位数据(每一位为一个字节)
// ledtab为7218软件译码字型表
#include<reg52.h>
//#include<intrins.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]={0x12,0x13,0x14,0x00,0x12,0x12,0x0e,0x11} ; // 要显示的内容 hello-pp
char temp[8];
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,0xca,0xf6 };
               //熄灭 H    L    P    -   r     q
unsigned int phase=0;
unsigned int fre=0;
//***************************************************************************************    
 //void KeyprgF1(void){}
// void KeyprgF2(void ){}
 //void KeyprgClear(void){}
 //void KeyprgEnter(void){} 
 //***************************************************************************************  
        
void display()
{
   unchar i;   
   DisCmd=scode;            //采用软件译码
   for(i=0;i<8;i++)      //将distab中的数据送如7218
   {
     DisData =ledtab[distab[i]]; //查表转化并将字型送入7218
	
   }
   
}
//**************************************************************************************
void KeyprgF2()                  //在光标当前位置设置小数点
{
     unchar i;   
   DisCmd=scode;            //采用软件译码
   for(i=0;i<8;i++)      //将distab中的数据送如7218
   {
     if(i=ledcursor)
     temp[i]=ledtab[distab[i]]+0x80;
     temp[i]=ledtab[distab[i]]; //查表转化并将字型送入7218
	 DisData=temp[i];
   }
    

}
 //**************************************************************************************

void keyprg(unchar key)  //键盘键值执行的程序
{  
  unchar i;
  if((key<=9)&enter)
   {   
      distab[ledcursor]=keynum;        //键值送入distab最低位保存
	   if(ledcursor>0)                //光标移位
           ledcursor--;
       else 
           ledcursor=7;
    display(); //显示键值
   	}
  
  else 
   {
    switch(key)
	   {
	     case 0x0D:  //加
		 if(distab[ledcursor]<0x09)
		      distab[ledcursor]++;
          else
              distab[ledcursor]=0;
              display(); //显示键值
	     break;	
 		 case 0x0E:    //减
		  if(distab[ledcursor]>0)
		       distab[ledcursor]--;
              
		 else
               distab[ledcursor]=9;
			   display(); //显示键值
		    
	     break;	 
		 case 0x0A:             //KeyprgF1();
		 
         for(i=0;i<8;i++)      //将distab中的数据送如7218
            {
             distab[i]=0;
             }
		      ledcursor=7;
              display(); //显示键值
	     break;	 
		 case 0x0B:            //功能键F2
	        	KeyprgF2();
	     break;	 
		 case 0x0C:           //KeyprgBack();
		 if(ledcursor<7)                //光标移位
           ledcursor++;
       else 
           ledcursor=0;
         display(); //显示键值
	     break;	 
		 case 0x0F:       //KeyprgEnter();
		 enter=!enter;
		 display(); //显示键值
	     break;	 
		 default:
	     break;	 
		}
	 }

}
//**************************************************************************************
void intt0() interrupt 0 
{ 
 char xdata  *cpld;
 EX0=0;                //关键盘中断,禁止相应其他按键
 keynum=P1;           //从p1口读入键盘值
 keynum=keynum&0x0f;  //取低四位;
 // keyprg(keynum);
 if(keynum==0x0f)
    {
	  enter=!enter;
	  if(enter)
	    {
		  distab[7]=0x13;
		  distab[6]=0x11;
		  distab[5]=0x0a;
		  distab[4]=0x05;
		  distab[3]=0x0e;
		  distab[2]=0x10;
		  distab[1]=0x10;
		}
      else
	    {
		  distab[7]=0x0f;
		  distab[6]=0x15;
		  distab[5]=0x0e;
		  distab[4]=0x16;
		  distab[3]=0x10;
		  distab[2]=0x10;
		  distab[1]=0x10;
		}
       
    }
 if(keynum==0x0d)
 {
  if(enter)
    {
     phase++;
     cpld=0xA0ff;
     *cpld=phase;
     distab[0]=phase;
   }
   else
      {
	  fre++;
      cpld=0xA0fe;
      *cpld=fre;
      distab[0]=fre;
	  }
 }
  if(keynum==0x0e)
  {
     if(enter)
	 {
       phase--;
       cpld=0xA0ff;
       *cpld=phase;
       distab[0]=phase;
     }
	 else
     {
	   fre--;
	   cpld=0xA0fe;
	   *cpld=fre;
	   distab[0]=fre;
     }
   }
  display();
  EX0=1;
}

void main()
{ 
   EX0=1;
   EA=1;
   display();
  while(1);
 }

⌨️ 快捷键说明

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