main.c

来自「基于51单片机实现UART通信 SPI通信 和IIC通信」· C语言 代码 · 共 119 行

C
119
字号
#include 	<reg52.h>
#include	<intrins.h>
#include	<string.h>

sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
sbit P0_4=P0^4;
sbit P0_5=P0^5;
sbit P0_6=P0^6;
sbit P0_7=P0^7;


void Delay_Xms(unsigned char x);
unsigned char  keyscan(void);


sfr SPCR = 0xd5;  //SPI控制寄存器 
sfr SPSR = 0xaa;  //SPI状态寄存器 
sfr SPDAT = 0x86; //SPI数据寄存器 */	


sbit _cs = P1^4;//spi片选信号
 
void main()
{
	unsigned char key_flag;

	SPCR = 0x7c;//
	SPSR = 0x00;
	
	RCLK = 0;TCLK=0;
	TMOD = 0x20;//定时器1 ,模式2,自动加载 
	TH1  = 0xFD;//设定波特率为9600
	SCON = 0x50;//模式1
	IE   = 0x90;; //串行中断允许 
	TR1 = 1;//启动定时器1 */


	while(1){
		key_flag = keyscan(); 
		_cs = 0;
		SPDAT =key_flag;
		while(SPSR&0x80==0);
		SPSR = 0x00;
		_cs = 1;
		Delay_Xms(20);

	}
	
}

 //键盘扫描程序  
 unsigned char  keyscan(void){                    
       unsigned char  co[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
	   unsigned char m[]={"press keys"},a=0x80,i,sum;
	   unsigned char v=0; 
       sum=0;                                           
  P0=0xFF;
  P0_0=0;
    if(P0_4==0){
    v='0'; co[0]=1;}
    if(P0_5==0){
    v='1'; co[1]=1;}
    if(P0_6==0){
    v='2'; co[2]=1;}
    if(P0_7==0){
    v='3'; co[3]=1;}	
  P0=0xFF;
  P0_1=0;
    if(P0_4==0){
    v='4'; co[4]=1;}
    if(P0_5==0){
    v='5'; co[5]=1;}
    if(P0_6==0){
    v='6'; co[6]=1;}
    if(P0_7==0){
    v='7'; co[7]=1;}
 P0=0xFF;
 P0_2=0;
    if(P0_4==0){
    v='8'; co[8]=1;}
    if(P0_5==0){
    v='9'; co[9]=1;}
    if(P0_6==0){
    v='A'; co[10]=1;}
    if(P0_7==0){
    v='B'; co[11]=1;}
 P0=0xFF;
 P0_3=0;
    if(P0_4==0){
    v='C'; co[12]=1;}
    if(P0_5==0){
    v='D'; co[13]=1;}
    if(P0_6==0){
    v='E'; co[14]=1;}
    if(P0_7==0){
    v='F'; co[15]=1;}		
 for(i=0;i<16;i++){
                   sum+=co[i]; 
                   co[i]=0;  
			      }
   if(sum>1) v=0;
 return(v);
}

//x取值1~255;
void Delay_Xms(unsigned char x)		
{
	unsigned int i,j;
	for(i=0;i<x;i++)
	for(j=0;j<200;j++)
	{
		_nop_();
		_nop_();
	}
}

⌨️ 快捷键说明

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