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

📄 pt6961.c

📁 PT6961芯片DEMO源码,主要用于按键扫描测试和LED测试
💻 C
字号:
#include<REG51.H>    
#include<STDIO.H>    
#include<STDLIB.H>    
#include<ABSACC.H>    
#include<STRING.H>    
#include <intrins.h> 

#define uchar unsigned char    
#define uint unsigned int    
#define ulong unsigned long    
   
sbit stb=P2^5;   
sbit dout=P2^2;   
sbit din=P2^3;   
sbit clk=P2^4;   

sbit led_clk=P2^0;   

unchar cmd,ii;   
unchar shownum[6];   
unchar outnum;   
   
void delay(uchar temp);   
void send(uchar cmd); 	//向sm1623送指令    
void disp(void);   	//显示shownum[i]的值    
unchar getkey(void); 	//返回键扫寄存器的值    
unchar returnnum(void);	//返回对应按键的值    
void delay2(uchar temp);   
   
main(void)
{   
	uchar keynum;   
	while(1)
	{
 		for(ii=0;ii<4;ii++) shownum[ii]=1;   //6个shownum[]对应6个led    
     		disp();    //显示111111    
     		keynum=returnnum(); //获取按下的键的值    //根据不同键值执行不同功能    
     		switch(keynum)
     		{
			case 0x01:   
    				P1=0x01;   
    				break;    
			case 0x02:    
				P1=0x02;
				break;
			default:
				P1=0x80;
				break;  
     		}   
	}          
}   
   
void send(cmd)
{   //送指令    
	uhcar i;   
	uchar cmd_temp; 
	stb=0;     
	for(i=0;i<8;i++)
	{   
		clk=0;   
		delay(0x0f);   
		cmd_temp=cmd&0x01;   
		if(cmd_temp==0)   din=0;   
		else		  din=1;      
		clk=1;   
		delay(0x0f);   
		cmd=cmd>>1;      
	} 
	stb=1;
	delay(0x0f);  
   
}   
   
   
void disp()
{       //显示数字,送入要显示数字的十进制形式    
	uint i;   
	uchar code_dis_d[6];   
    	for(i=0;i<6;i++)//计算显示码    
    	{   
        	switch(shownum[i])
        	{   
            	case 1:   
               		code_dis_d[i]=0x06;   
                	break;   
            	case 2:   
                	code_dis_d[i]=0x5b;   
                	break;   
            	case 3:   
                	code_dis_d[i]=0x4f;   
                	break;   
            	case 4:   
                	code_dis_d[i]=0x66;   
                	break;   
            	case 5:   
                	code_dis_d[i]=0x6d;   
                	break;   
            	case 6:   
                	code_dis_d[i]=0x7d;   
                	break;   
            	case 7:   
                	code_dis_d[i]=0x07;   
                	break;   
            	case 8:   
                	code_dis_d[i]=0x7f;   
                	break;   
            	case 9:   
                	code_dis_d[i]=0x6f;   
                	break;   
            	case 10://显示黑    
                	code_dis_d[i]=0x00;   
                	break;   
            	case 11://显示A    
                	code_dis_d[i]=0x77;   
                	break;   
            	case 12://显示d    
                	code_dis_d[i]=0x5e;   
                	break;   
            	case 13://显示-    
                	code_dis_d[i]=0x40;   
                	break;   
            	case 14://显示8.    
                	code_dis_d[i]=0xff;   
                	break;   
            	default://显示0    
                	code_dis_d[i]=0x3f;   
                	break;   
        	}   
    	}    
  	send(0x02);     
  	send(0x40);    
  	send(0xc0);   
   
//向显示寄存器中送显示数    
    	send(code_dis_d[0]);//1    
    	send(0x00);   
    	send(code_dis_d[1]);//2    
    	send(0x00);   
    	send(code_dis_d[2]);//3    
    	send(0x00);   
    	send(code_dis_d[3]);//4    
    	send(0x00);   
    	send(code_dis_d[4]);//5    
    	send(0x00);   
    	send(code_dis_d[5]);//6    
    	send(0x00);   
//送完显示数    
    
  	send(0x8f);   
  	delay(0x0f);   
}   
   
   
uchar getkey()
{   
	uchar out_temp;   
	uchar c1;   
	out_temp=0;   
	delay(0x20);   
	for(c1=0;c1<=7;c1++)
	{   
		clk=0;   
		delay(0x02);   
		if(dout==0) 
		{
			out_temp=out_temp&0x7f;
		}   
        	else 
		{
			out_temp=out_temp|0x80;
		}   
        	outnum=out_temp;   
		out_temp=out_temp>>1;   
		clk=1;   
		delay(0x02);   
	}   
	outnum=outnum&0x1b ;   
	return outnum;   
}   
   
uchar returnnum()
{   
   
	uchar temp1,temp2;   
	stb=0;   
	send(0x42);   
	temp1=getkey();//读键扫寄存器    
    	temp2=getkey();   
    	stb=1;   
    	if(temp1!=0x00)   
    	switch(temp1)   
    	{   
    		case 0x01:   
    			return 0x01;   
    			break;   
    		case 0x02:   
    			return 0x02;   
    			break;   
    		case 0x08:   
    			return 0x03;   
    			break;   
    		case 0x10:   
    			return 0x04;   
    			break;   
    		default:   
    			return 0x00;   
   			break;   
    	}   
    	if(temp2!=0x00)   
    	switch(temp2)
	{   
        	case 0x01:   
               		return 0x05;   
               		break;   
           	case 0x02:   
               		return 0x06;   
               		break;   
           	case 0x08:   
               		return 0x07;   
               	break;   
           	case 0x10:   
               		return 0x08;   
               		break;   
           	default:   
               		return 0x00;   
               		break;   
    	}    
	return 0x00;         
}   
   
void delay(uchar temp) 
{   
	uchar s1;   	
	for( s1=0;s1<=temp;s1++)
	{   
		_nop_();   
	}   
   
}   
void delay2(uchar temp) 
{   
	uchar i;   
	uchar j;   
	for( i=0;i<=temp;i++)
	{   
		for( j=0;j<=500;j++)   
		{
   	    		_nop_();
		}   
	}   
}  

⌨️ 快捷键说明

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