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 + -
显示快捷键?