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

📄 jianpanxs.c

📁 基于8279的键盘与显示
💻 C
字号:
/*********led子程序**********/



#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

void init8279();
void clear_led();
void display0( int k);
void display1( int k);
void display2( int k);
void msec(unsigned int x);
unsigned char keyin(void);
void chuli(unsigned char jianhao);
void displayf();

#include<absacc.h>
#define ctrl8279 XBYTE[0X4000]                     ///////////A001
#define data8279 XBYTE[0X0000]                        ////////////A000

sbit cflag=ACC^7;
sbit WR0832=0XB0;

unsigned char state0=0;
unsigned char state1=1;
int n00=0;
int n01=0;
unsigned int bvalue1=10;
unsigned int bvalue0=10;

bit bujin=0;

uchar code table[]={252,96,218,242,102,182,190,224,254,246};   //led 1 2 34
unsigned char jianma_[16]={193,206,201,203,199,192,194,207,200,202,198,195,197,205,196,204}; //jian ma

//***********1毫秒延时*********//
void msec(unsigned int x){
uchar j;
while(x--){
for(j=0;j<125;j++)
{;}
}
}

/**************************************/
/*
void wdat_8279(uchar d){
msec(1);
do
{ACC=ctrl8279;}
while (cflag==1);
data8279=d;
}


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

void wcom_8279(uchar c){
msec(1);
do
{ACC=ctrl8279;}
while (cflag==1);
ctrl8279=c;
}


/*************清显存*********************/


void clear_led(){
 wcom_8279(0xd0);
}
/***************************************/
void display0( int k)
{ 
    uint s=0,a=0,d=0, m=0,f=0,n=0;

	  
	
	 if(k>=0&&k<=2000)
     { 
     //	ctrl8279=0x00;
	   
     	s=k/1000;
         wcom_8279(0x80);      
         data8279=table[s];
        //
     	 a=k%1000;
     	 d=a/100;
     	 wcom_8279(0x81);      
          data8279=table[d];
          //
     	 m=a%100;
     	 f=m/10;
     	 wcom_8279(0x82);      
         data8279=table[f];
        //
     	 n=m%10;
     	 
     	wcom_8279(0x83);
       data8279=table[n];
       //
       }
	   else 
      displayf();
	   
 }  
void display1( int k)
{ 
    uint s=0,a=0,d=0, m=0,f=0,n=0;

	  
	
	 if(k>=0&&k<=500)
     { 
     //	ctrl8279=0x00;
	   
     	s=k/1000;
         wcom_8279(0x80);      
         data8279=table[s];
        //
     	 a=k%1000;
     	 d=a/100;
     	 wcom_8279(0x81);      
          data8279=table[d];
          //
     	 m=a%100;
     	 f=m/10;
     	 wcom_8279(0x82);      
         data8279=table[f];
        //
     	 n=m%10;
     	 
     	wcom_8279(0x83);
       data8279=table[n];
       //
       }
	   else
	   displayf();

	   
 }       


void display2( int k)
{ 
    uint s=0,a=0,d=0, m=0,f=0,n=0;

	
	 if(k>=0&&k<10000)
     { 
     //	ctrl8279=0x00;
	   
     	s=k/1000;
         wcom_8279(0x84);      
         data8279=table[s];

     	 a=k%1000;
     	 d=a/100;
     	 wcom_8279(0x85);      
          data8279=table[d];
          //
     	 m=a%100;
     	 f=m/10;
     	 wcom_8279(0x86);      
         data8279=table[f];
        //
     	 n=m%10;
     	 
     	wcom_8279(0x87);
       data8279=table[n];
       //
       }

	   
 }      
void displayf()
{unsigned char i;
 wcom_8279(0x90);
 for(i=0;i<16;i++)
    data8279=30;
}

/************************************************/
/*
uchar key_pressed(void) //判断FIFO有键按下函数
{uchar k;
k=ctrl8279;
return(k&0x0f); //非0,有键按下
}


uchar keyin(void)
{uchar i;
while(key_pressed()==0);
wcom_8279(0x40); //读FIFO RAM命令
i=data8279;
return(i);
}
*/
 
void init8279()
{unsigned char i;
 ctrl8279=0x34;            //biancheng minglin shizhong :ale 18 fenping 00110010
 ctrl8279=0x10;            //8zifuxianshi you ru kou ,bianma sao miao jianpan,shuang jian suo
 ctrl8279=0xd1;            //xianshi ram qing 0,quan zhi 1;
 i=ctrl8279;               //du zhuang tai zi
 i=i&0X80;                 //qu gao wei
 	while(i==0x80)
	{i=ctrl8279;
	 i=i&0x80; 
	}

 }	
 

 //***********翻译键码********************//
yijianma(unsigned char jianma)
{unsigned char jianhao;
 	if(jianma==jianma_[0]) jianhao=0;
	else if (jianma==jianma_[1]) jianhao=1;
	else if (jianma==jianma_[2]) jianhao=2;
	else if (jianma==jianma_[3]) jianhao=3;
	else if (jianma==jianma_[4]) jianhao=4;
	else if (jianma==jianma_[5]) jianhao=5;
	else if (jianma==jianma_[6]) jianhao=6;
	else if (jianma==jianma_[7]) jianhao=7;
	else if (jianma==jianma_[8]) jianhao=8;
	else if (jianma==jianma_[9]) jianhao=9;
	else if (jianma==jianma_[10]) jianhao=10;
	else if (jianma==jianma_[11]) jianhao=11;
    else if (jianma==jianma_[12]) jianhao=12;
	else if (jianma==jianma_[13]) jianhao=13;
	else if (jianma==jianma_[14]) jianhao=14;
	else if (jianma==jianma_[15]) jianhao=15;
	

return(jianhao);
}
 
main() {



init8279();
display0(0);
display2(5678);


 IT0=1;
 EA=1;
 EX0=1;
//clear_led();
 WR0832=1;

msec(500);
	while(1){
	//jianhao=yijianma(keyin());
	//display1(jianhao);
	//display1(ctrl8279);
	//display1(keyin());
	// msec(500);
	//clear_led();

	}
}

//**************键盘中断*************************//
void int0() interrupt 0              //键盘中断
{unsigned char jianma;
 wcom_8279(0x40); //读FIFO RAM命令
 jianma=data8279;
 chuli(yijianma(jianma));               //键码对应键号 (keyin())
}
//**********************************************//
//**************键号处理************************//
void chuli(unsigned char jianhao)
{unsigned char dianya;
 if(bujin==0)
 {
	switch(state0)
	{
		case 0:                         // 初始状态与CLR
		{
			if(jianhao<=9)
		    {n00=jianhao;
			 display0(n00);
			 state0=1;
			 }

			 else if(jianhao<=10)        //按下CLR AND ENTER
			 {
			 }
             else if(jianhao<=11)
             {P1=0;
			 WR0832=0;
			 WR0832=1;
			 state0=2;
			 }

			 else if(jianhao<=12)       //+
			 {n01=n00+bvalue1;
			 display0(n01);
			 n00=n01;
			 state0=2;
			 }
			 else if(jianhao<=13)        //-
			 {
			 }
			 else if(jianhao<=14)        //设定步进植
			 {bujin=1;
			 display1(bvalue1);
			 state1=2;
			 }
 			 else if(jianhao<=15)
			 {}


		} break;

		case 1:                      //按数字后进入状态
		{   
			if(jianhao<=9)
			{n01=jianhao;
			 n01=n00*10+n01;
			 display0(n01);
			 n00=n01;
			 state0=1;
			}
			else if(jianhao<=10)
			{n00=0;
			 n01=0;
			 display0(n01);
			 state0=0;
			}
			else if(jianhao<=11)   //////////////
			{dianya=n00*0.128;
			
			if(n00==2000)
			dianya=0xff;

			P1=dianya;
			WR0832=0;
			WR0832=1;
			state0=2;
			}
			else if(jianhao<=12)
			{n01=n00+bvalue1;
			display0(n01);
			n00=n01;
			state0=2;
			}
			else if(jianhao<=13)
			{n01=n00-bvalue1;
			display0(n01);
			n00=n01;
			state0=2;
			}
			else if(jianhao<=14)
			{bujin=1;
			display1(bvalue1);
			state1=2;
			}
		} break;
		case 2:                             //ENTER后
		{	if(jianhao<=9)
		    {n01=jianhao;
			 display0(n01);
			 n00=n01;
			 state0=1;
			 }
			 else if(jianhao<=10)
			{n00=0;
			 n01=0;
			 display0(n01);
			 state0=0;
			}
			else if(jianhao<=11)
			{state0=2;
			}
			else if(jianhao<=12)
			{n01=n00+bvalue1;
			display0(n01);
			n00=n01;
			dianya=n00*0.128;
			
			if(n00==2000)
			dianya=0xff;

			P1=dianya;
			WR0832=0;
			WR0832=1;
			state0=2;
			}
			else if(jianhao<=13)
			{n01=n00-bvalue1;
			display0(n01);
			n00=n01;
			dianya=n00*0.128;

			P1=dianya;
			WR0832=0;
			WR0832=1;
			state0=2;
			}
			else if(jianhao<=14)            //设定步进值
			{bujin=1;
			display1(bvalue1);
			state1=2;
			}

		} break;
	}
 }
 else if(bujin==1)
 {	switch(state1)
 	{	
		case 0:
		{    if(jianhao<=9)
		     {
			 bvalue1=jianhao;
			 display1(bvalue1);
			 bvalue0=bvalue1;
			 state1=1;
			 }
			 else if(jianhao<=10)
			 {
			 bvalue1=0;
			 bvalue0=0;
			 display1(bvalue1);
			 state1=0;
			 }
			 else if(jianhao<=11)
			 {state1=2;
			 }
			 else if(jianhao<=12)
			 {bvalue1=bvalue0+1;
			  display1(bvalue1);
			  bvalue0=bvalue1;
			  state1=2;
			  }
			  else if(jianhao<=13)
			  {bvalue1=bvalue0-1;
			  display0(bvalue1);
			  state1=2;
			  }
			  else if(jianhao<=14)
			  {}
			  else if(jianhao<=15)
			  {bujin=0;
			   display0(n00);
			   state0=2;
			  }


		}break;    

		case 1:
		{	if(jianhao<=9)
			{
			bvalue1=jianhao;
			 bvalue1=bvalue0*10+bvalue1;
			 display1(bvalue1);
			 bvalue0=bvalue1;
			 state1=1;
			}
			else if(jianhao<=10)
			{bvalue1=0;
			 bvalue0=0;
			 display1(bvalue0);
			 state1=0;
			}
			else if(jianhao<=11)
			{state1=2;
			}
			else if(jianhao<=12)
			{bvalue1=bvalue0+1;
			 bvalue0=bvalue1;
			 display1(bvalue1);
			}
			else if(jianhao<=13)
			{bvalue1=bvalue0-1;
			 display1(bvalue1);
			 bvalue0=bvalue1;
			}
			else if(jianhao<=14)
			{}
			else if(jianhao<=15)
			{bujin=0;
			display0(n00);
			}
		}break;
        case 2:
	    {	if(jianhao<=9)
		    {bvalue1=jianhao;
			 display1(bvalue1);
			 bvalue0=bvalue1;
			 state1=1;
			 }
			 else if(jianhao<=10)
			 {bvalue0=0;
			  bvalue1=0;
			  display1(0);
			  state1=1;
			  }
			  else if(jianhao<=11)
			  {state1=2;
			  }
	
     		else if(jianhao<=12)
 			{bvalue1=bvalue0+1;
			 bvalue0=bvalue1;
			 display1(bvalue1);
			}
			else if(jianhao<=13)
			{bvalue1=bvalue0-1;
			 display1(bvalue1);
			 bvalue0=bvalue1;
			}
			else if(jianhao<=14)
			{}
			else if(jianhao<=15)
			{bujin=0;
			display0(n00);
			}

		}break;
	}

 }
}

⌨️ 快捷键说明

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