C语言还是不怎么熟练
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
//定义控制LED灯的端口
#define LED1 P1_0 //LED1为P1.0口控制
#define KEY1 P0_0 //KEY1为P0.0口控制
//函数声明
void Delay_ms(uint);
void initUART(void);
void UartSend_String(char *Data,int len);
void Delayms(uint); //延时函数
void InitLed(void); //初始化LED1
void KeyInit(); //按键初始化
void KeyScan();
void UseKey();
int L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12;
/****************************
延时函数
*****************************/
void Delayms(uint xms) //i=xms 即延时i毫秒
{
uint i,j;
for(i=xms;i>0;i--)
for(j=587;j>0;j--);
}
void Delay_ms(uint n)
{
uint i,j;
for(i=0;i<n;i++)
{
for(j=0;j<1774;j++);
}
}
/****************************
LED初始化函数
*****************************/
void InitLed(void)
{
P1DIR |= 0x01; //P1_0定义为输出
P1INP |= 0X01; //打开下拉
P0DIR |= 0xf3; //P0-0 0-1 0-4 0-5 0-6 0-7定义为输出
P0INP |= 0Xf3; //打开下拉
P0_0 = 1;P0_1 = 1;P0_4 = 1;P0_5 = 1;P0_6 = 1;P0_7 = 1;P1_0 = 1;//LED初始化
}
/****************************************************************
串口初始化函数
****************************************************************/
void InitUART(void)
{
PERCFG = 0x00; //位置1 P0口
P0SEL |= 0x0c; //P0_2,P0_3用作串口(外部设备功能)
P2DIR &= ~0XC0; //P0优先作为UART0
U0CSR |= 0x80; //设置为UART方式
U0GCR |= 8;
U0BAUD |= 59; //波特率设为9600
UTX0IF = 0; //UART0 TX中断标志初始置位0
}
/****************************************************************
串口发送字符串函数
****************************************************************/
void UartSend_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
/****************************
按键初始化函数
*****************************/
void InitKey()
{
P1DIR |= 0x3c; //P1_2 1-3 1-4 1-5定义为输出
P1INP |= 0X3c; //打开下拉
P1_2 = 0;P1_3 = 0;P1_4 = 0;P1_5 = 0;
P1SEL &= ~0Xc0; //设置P1-6 1-7 为普通IO口
P1DIR &= ~0Xc0; //设置为输入模式
P1INP &= ~0xc0; //打开P1-6 1-7上拉电阻
P2SEL &= ~0X01; //设置P2-0为普通IO口
P2DIR &= ~0X01; //设置为输入模式
P2INP &= ~0x01; //打开P2-0上拉电阻
}
void KeyScan()
{
P1DIR &= ~0x3c; //P1_2 1-3 1-4 1-5定义为输入
P1INP &= ~0X3c; //打开上拉
P1DIR |= 0Xc0; //设置为输出模式
P1INP |= 0xc0; //打开P1-6 1-7上拉电阻
P2DIR |= 0X01; //设置为输出模式
P2INP |= 0x01; //打开P2-0上拉电阻
P1_6 = 0;P1_7 = 0;P2_0 = 0;
}
/****************************
按键检测函数
*****************************/
void UseKey()
{
if(P1_6 ==0||P1_7 ==0||P2_0 ==0)
{
Delayms(30);
if(P1_6 ==0||P1_7 ==0||P2_0 ==0)
{
if(P1_6 ==0)//第一列
{
Delayms(30);
KeyScan();
Delayms(30);
if(P1_2 ==0)
{
while(!P1_2);
P0_6 = 0, P0_7 = 1, P1_0 = 1;
P0_1 = 1, P0_4 = 1, P0_5 = 1;
if(L1 == 0)
{
UartSend_String("^010101$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_0 = 0;
L1 = 1;
L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
else
{
UartSend_String("^010102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_0 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
if(P1_3 ==0)
{
while(!P1_3);
P0_6 = 0, P0_7 = 1, P1_0 = 1;
P0_0 = 1, P0_4 = 1, P0_5 = 1;
if(L2 == 0)
{
UartSend_String("^040101$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_1 = 0;
L2 = 1;
L1 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
else
{
UartSend_String("^040102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_1 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
if(P1_4 ==0)
{
while(!P1_4);
P0_6 = 0, P0_7 = 1, P1_0 = 1;
P0_0 = 1, P0_1 = 1, P0_5 = 1;
if(L3 == 0)
{
UartSend_String("^070101$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_4 = 0;
L3 = 1;
L1 = L2 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
else
{
UartSend_String("^070102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_4 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
if(P1_5 ==0)
{
while(!P1_5);
P0_6 = 0, P0_7 = 1, P1_0 = 1;
P0_0 = 1, P0_1 = 1, P0_4 = 1;
if(L4 == 0)
{
UartSend_String("^100101$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_5 = 0;
L4 = 1;
L1 = L2 = L3 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
else
{
UartSend_String("^100102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_5 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
InitKey();
}
if(P1_7 ==0)//第二列
{
Delayms(30);
KeyScan();
Delayms(30);
if(P1_2 ==0)
{
while(!P1_2);
P0_6 = 1, P0_7 = 0, P1_0 = 1;
P0_1 = 1, P0_4 = 1,P0_5 = 1;
if(L5 == 0)
{
UartSend_String("^020101$",8); //串口发送数据 //串口发送数据
Delay_ms(500); //延时
P0_0 = 0;
L5 = 1;
L1 = L2 = L3 = L4 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
else
{
UartSend_String("^020102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_0 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
if(P1_3 ==0)
{
while(!P1_3);
P0_6 = 1, P0_7 = 0, P1_0 = 1;
P0_0 = 1, P0_4 = 1,P0_5 = 1;
if(L6 == 0)
{
UartSend_String("^050101$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_1 = 0;
L6 = 1;
L1 = L2 = L3 = L4 = L5 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
else
{
UartSend_String("^050102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_1 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
if(P1_4 ==0)
{
while(!P1_4);
P0_6 = 1, P0_7 = 0, P1_0 = 1;
P0_0 = 1, P0_1 = 1, P0_5 = 1;
if(L7 == 0)
{
UartSend_String("^080101$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_4 = 0;
L7 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L8 = L9 = L10 = L11 = L12 = 0;
}
else
{
UartSend_String("^080102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_4 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
if(P1_5 ==0)
{
while(!P1_5);
P0_6 = 1, P0_7 = 0, P1_0 = 1;
P0_0 = 1, P0_1 = 1, P0_4 = 1;
if(L8 == 0)
{
UartSend_String("^110101$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_5 = 0;
L8 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L9 = L10 = L11 = L12 = 0;
}
else
{
UartSend_String("^110102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_5 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
InitKey();
}
if(P2_0 ==0)//第三列
{
Delayms(30);
KeyScan();
Delayms(30);
if(P1_2 ==0)
{
while(!P1_2);
P0_6 = 1, P0_7 = 1, P1_0 = 0;
P0_1 = 1, P0_4 = 1,P0_5 = 1;
if(L9 == 0)
{
UartSend_String("^030101$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_0 = 0;
L9 = 1;
L1 = L2 = L3 = L4 = L6 = L7 = L8 = L5 = L10 = L11 = L12 = 0;
}
else
{
UartSend_String("^030102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_0 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
if(P1_3 ==0)
{
while(!P1_3);
P0_6 = 1, P0_7 = 1, P1_0 = 0;
P0_0 = 1, P0_4 = 1,P0_5 = 1;
if(L10 == 0)
{
UartSend_String("^060101$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_1 = 0;
L10 = 1;
L1 = L2 = L3 = L4 = L5 = L7 = L8 = L9 = L6 = L11 = L12 = 0;
}
else
{
UartSend_String("^060102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_1 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
if(P1_4 ==0)
{
while(!P1_4);
P0_6 = 1, P0_7 = 1, P1_0 = 0;
P0_0 = 1, P0_1 = 1, P0_5 = 1;
if(L11 == 0)
{
UartSend_String("^090101$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_4 = 0;
L11 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L8 = L9 = L10 = L7 = L12 = 0;
}
else
{
UartSend_String("^090102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_4 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
if(P1_5 ==0)
{
while(!P1_5);
P0_6 = 1, P0_7 = 1, P1_0 = 0;
P0_0 = 1, P0_1 = 1, P0_4 = 1;
if(L12 == 0)
{
UartSend_String("^120101$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_5 = 0;
L12 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = 0;
}
else
{
UartSend_String("^120102$",8); //串口发送数据 //串口发送数据
Delay_ms(50); //延时
P0_5 = 1;
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
}
}
InitKey();
}
}
}
}
/***************************
主函数
***************************/
void main(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定为32M
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
InitUART();
InitLed(); //调用初始化函数
InitKey();
L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
while(1)
{
UseKey();//按键检测
}
}