📄 main.c
字号:
** Returned value: 无
**********************************************************************************************************/
void TaskKey (void *pdata)
{
pdata = pdata;
TargetInit(); /* 目标板初始化 */
IO0DIR = ~Key1; /* 定义按键方向为输入 */
Sem = OSSemCreate(0); /* 创建信号量 */
while (1) {
while ((IO0PIN & Key1) != 0) { /* 等待按键按下 */
OSTimeDly(1); /* 延时1个clk */
}
OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延时20毫秒去抖动 */
if ((IO0PIN & Key1) != 0) { /* 按键无效,返回扫描 */
continue;
} else {
OSSemPost(Sem); /* 发送信号量 */
while ((IO0PIN & Key1) == 0) { /* 等待按键释放 */
OSTimeDly(1); /* 延时1个clk */
}
}
}
}
/**********************************************************************************************************
** Function name: TaskSamp
** Descriptions: 采样任务,对电压数据进行采集
** input parameters: 无
** output parameters: 无
** Returned value: 无
**********************************************************************************************************/
void TaskSamp (void *pdata)
{
INT8U i,err;
INT32U Temp[10] = {0};
INT32U TempAll = 0;
INT32U TempAve = 0;
pdata = pdata;
Mbox = OSMboxCreate((void *)0); /* 创建消息邮箱 */
/*
* ADC初始化
*/
PCONP |= 1<<12;
PINSEL3 |= ((unsigned)0x03)<<30; /* 设置P1.31为AIN5功能 */
AD0CR = (1<<5) | /* SEL = 0X20,选择通道5 */
((Fpclk/1000000 - 1)<<8)| /* CLKDIV= Fpclk/1000000-1,转 */
/* 换时钟为1MHz */
(1<<16) | /* BURST = 1,硬件控制转换操作 */
(0<<17) | /* CLKS = 0,使用11clock转换 */
(1<<21) | /* PDN = 1,正常工作模式 */
(0<<24) | /* START = 0,硬件控制转换 */
(0<<27);
while (1) {
OSSemPend(Sem,0,&err); /* 等待信号量 */
TempAll = 0;
for (i = 0;i < 10;i++) {
while((AD0STAT & (1<<5)) == 0); /* 等待AIN5转换结束 */
Temp[i] = ADDR5;
Temp[i] = (Temp[i] >> 6) & 0x3ff;
Temp[i] *= 2500; /* 参考电压由精密恒压源提供2.5V */
Temp[i] /= 1024;
TempAll += Temp[i];
}
TempAve = TempAll/10; /* 取采样平均值 */
OSMboxPost(Mbox,(void *)&TempAve); /* 发送消息到消息邮箱中 */
OSTimeDly(OS_TICKS_PER_SEC/10); /* 延时0.1S */
}
}
/**********************************************************************************************************
** Function name: TaskDisp
** Descriptions: 显示任务,把通过AD采样得到的数据送到PC机上显示
** input parameters: 无
** output parameters: 无
** Returned value: 无
**********************************************************************************************************/
void TaskDisp (void *pdata)
{
INT8U err;
INT32U tp;
char str[50]; /* 存储送显示数据的数组 */
pdata = pdata;
sprintf(str,"系统启动......\r\n");
UART0_SendStr(str); /* 系统启动提示信息 */
while (1) {
tp = * (INT32U *)OSMboxPend(Mbox,0,&err); /* 获得消息邮箱中的消息 */
sprintf(str,"ADC采样结果为 %d mv \r\n",tp); /* 把送显示数据发送到数组中 */
UART0_SendStr(str); /* 把采样结果发送到上位机显示 */
}
}
/**********************************************************************************************************
END FILE
**********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -