请基于ZigBee模块(黑板)进行基础开发,采用中断方式检测按键,请编程实现按键中断控制、串口发送和LED的控制,每当检测到按键按下时向串口输出“key is pressed”的信息,LED1(P_0)、LED2(P1_1)闪亮约200ms。
(1)按键采用中断的方式进行检测,上拉输入模式,下降沿触发;
(2)串口通信要求采用32MHz系统时钟,波特率115200,8位数据位,1位停止位,无校验位,无流控;
(3)LED闪烁可采用延时函数实现。
有没有大哥会帮个忙
请补充完善代码。
#include <iocc2530.h>
#define LED1 P1_0
#define LED2 P1_1
#define uint unsigned int
unsigned char flag=0; //按键按下标志
void delay(uint time)
{
uint i,j;
for(i=0;i<30;i++)
{
for(j=0;j<time;j++);
}
}
void initLed()
{
//设置LED灯(P1_0 P1_1)初始化相关参数
//=====》答题区1开始
//《=====答题区1结束
}
void initSW1()
{
//按钮SW1(P1_2)配置成可以被外部中断
//=====》答题区2开始
// 1、初始化SW1(P1_2)口工作在普通IO、上拉输入状态。
//设置按键中断相关初始化相关参数:按键采用中断的方式进行控制,下降沿触发中断。
//2、开CPU总中断;
//3、开IO口组中断;(IEN2第4位控制P1口中断使能)
//4、开组内对应的具体某IO口中断(P1IEN)
//5、下降沿触发;
//《=====答题区2结束
}
void init_Uart()
{
//配置系统时钟为32Mhz
CLKCONCMD &=~ 0X7f;
while(CLKCONSTA & 0x40);
//2.串口0的备用位置1
PERCFG &=~0x01; //选中串口0的的备用位置1: P0_2 (RX), p0_3(TX)
P0SEL |=0x0C; //P0_2 p0_3配置为外设IO功能
P2DIR &=~ 0xc0; //P0优先用做串口0
U0CSR |= 0x80;
//由考生设置波特率115200
//=====》答题区3开始
//《=====答题区3结束
//清发送中断标志 p41 IRCON2:第1位为0清中断
UTX0IF=0;
EA=1; //开CPU中断
}
//通过串口发送长度为len的字符串data_tx
void sendStringByUart(char *data_tx, int len)
{
unsigned int j;
for(j=0;j<len;j++)
{
U0DBUF = *data_tx++;
while(!UTX0IF);
UTX0IF=0;
}
}
void main()
{
init_Uart();
initLed();
initSW1();
while(1)
{
//此处可按实际需求进行代码添加:当有按键按下时...
/*由考生设置按下按键后:
1)每按一次按键,LED闪亮效果。
2)每按一次按键,向串口发"key is pressed"的信息
*/
//=====》答题区5开始
//《=====答题区5结束
}
}
#pragma vector=P1INT_VECTOR //第P1组中断
__interrupt void P1_ISR()
{
if(P1IFG &0X04) //判断P1_2是否产生了中断
{
//=====》答题区4开始
//《=====答题区4结束
}
//注意产生中断时会把以下值变为1,执行完中断后务必记得下面的操作:要清0
//中断标志位清0
P1IFG &=~ 0x04; //清P1_2引脚中断标志;
P1IF = 0x00; //清除P1口中断标志位
有没有大哥能把答题区补上
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,目前超出我们的服务范围,暂时无法为您解答。
首次提问人员可免费体验一次有问必答服务。目前首次提问的问题服务范围为:编程语言、Java开发、python、数据库、前端开发 领域专业技术问题,为您提供问题的解决思路和指导。不提供源码代写、项目文档代写、论文代写、作业代写、安装包资源发送或安装、软件使用指导等服务。
我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。