久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STM32+ucosii設(shè)計3人搶答器源程序
[打印本頁]
作者:
Linming
時間:
2021-6-19 22:07
標(biāo)題:
STM32+ucosii設(shè)計3人搶答器源程序
這是ucosii操作系統(tǒng)設(shè)計,3人搶答器,使用國信長天CT117E開發(fā)板,單片機(jī)是stm32f103rbt6,使用外設(shè)有LCD屏幕,數(shù)碼管,LED燈,按鍵以及蜂鳴器
單片機(jī)源程序如下:
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "exti_a.h"
#include "sys.h"
#include "includes.h"
#include "stm32f10x.h"
#include "seg.h"
#include "buzz.h"
#define TASK_STK_SIZE 512 //任務(wù)堆棧長度
OS_STK TaskStartStk[512]; //定義任務(wù)堆棧區(qū)//--------------------------------------------------------------------------------------------
RCC_ClocksTypeDef rcc_clocks; //定義一個全局使用的芯片時鐘頻率結(jié)構(gòu)變量
OS_STK Task_LED1_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)
OS_STK Task_LED2_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)
OS_STK Task_LED3_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)
OS_STK Task_LED4_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)
OS_STK Task_COUNT_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)
OS_STK Task_DIS_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)
INT8U err; //錯誤類型變量
//--------------------------------------------------------------------------------------------
OS_EVENT *KEY1_Down; //聲明KEY1鍵按下信號量
OS_EVENT *KEY2_Down; //聲明KEY2鍵按下信號量
OS_EVENT *KEY3_Down; //聲明KEY3鍵按下信號量
OS_EVENT *KEY4_Down; //聲明KEY4鍵按下信號量
//--------------------------------------------------------------------------------------------
void TaskStart (void *pdata);
void Task_KEY1 (void *pdata); //聲明任務(wù)
void Task_KEY2 (void *pdata); //聲明任務(wù)
void Task_KEY3 (void *pdata); //聲明任務(wù)
void Task_KEY4 (void *pdata); //聲明任務(wù)
void Task_COUNT (void *pdata); //聲明任務(wù)
void Task_DIS (void *pdata); //聲明任務(wù)
u8 flag=0;
u8 play1=0;
u8 play2=0;
u8 play3=0;
u8 cnt=30;
u8 wflag=0;
void SysTick_Init (void)
{
RCC_GetClocksFreq(&rcc_clocks); //讀取系統(tǒng)時鐘頻率
//設(shè)置嘀嗒節(jié)拍中斷周期為rcc_clocks.HCLK_Frequency/OS_TICKS_PER_SEC(1mS)
//設(shè)置嘀嗒節(jié)拍中斷優(yōu)先級為最低搶占優(yōu)先級
SysTick_Config(rcc_clocks.HCLK_Frequency / OS_TICKS_PER_SEC);
}
//--------------------------------------------------------------------------------------------
int main(void)
{
OSInit( ); //初始化uCOS_II
//創(chuàng)建起始任務(wù)TaskStart(優(yōu)先級0)
OSTaskCreate(TaskStart, (void *) 0, &TaskStartStk[512 - 1], 0);
OSStart( ); //啟動多任務(wù)管理
}
void TaskStart (void *pdata)
{
pdata = pdata;
/*開始:CPU工作參數(shù)及外設(shè)工作狀態(tài)初始化*/
//設(shè)置優(yōu)先級分組:搶占優(yōu)先級3位(8級)和響應(yīng)優(yōu)先級1位(2級)
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
//設(shè)置向量表的位置和偏移:在FLASH中偏移為0
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);
SysTick_Init(); //設(shè)置uC/OS的時鐘
STM3210B_LCD_Init();
LCD_SetTextColor(Black);
LCD_SetBackColor(White);
LCD_Clear(White);
LCD_DisplayStringLine(Line2,"Xuhaipeng");
LCD_DisplayStringLine(Line3,"scorecard");
LCD_DisplayStringLine(Line4,"play1:00");
LCD_DisplayStringLine(Line5,"play2:00");
LCD_DisplayStringLine(Line6,"play3:00");
OSTimeDlyHMSM(0, 0, 0, 200); //等待0.5秒
LED_Init(); //LED輸出初始化
LED_Control(LEDALL,0);
Key_Init(); //按鍵輸入初始化
EXTI_InitInit(); //外部中斷初始化
STM3210B_SEG_Init();
SEG_DisplayValue(0,0,0);
/*結(jié)束:CPU工作參數(shù)及外設(shè)工作狀態(tài)初始化*/
/*開始:創(chuàng)建工作任務(wù)*/
OSTaskCreate(Task_KEY1, (void *)0, &Task_LED1_Stk[TASK_STK_SIZE - 1], 1);
OSTaskCreate(Task_KEY2, (void *)0, &Task_LED2_Stk[TASK_STK_SIZE - 1], 2);
OSTaskCreate(Task_KEY3, (void *)0, &Task_LED3_Stk[TASK_STK_SIZE - 1], 3);
OSTaskCreate(Task_KEY4, (void *)0, &Task_LED4_Stk[TASK_STK_SIZE - 1], 4);
OSTaskCreate(Task_COUNT, (void *)0, &Task_COUNT_Stk[TASK_STK_SIZE - 1],5);
OSTaskCreate(Task_DIS, (void *)0, &Task_DIS_Stk[TASK_STK_SIZE - 1], 6);
/*結(jié)束:創(chuàng)建工作任務(wù)*/
/*開始:創(chuàng)建信號量*/
KEY1_Down = OSSemCreate(0); //創(chuàng)建KEY1按下信號量
KEY2_Down = OSSemCreate(0); //創(chuàng)建KEY2按下信號量
KEY3_Down = OSSemCreate(0); //創(chuàng)建KEY3按下信號量
KEY4_Down = OSSemCreate(0); //創(chuàng)建KEY4按下信號量
/*結(jié)束:創(chuàng)建信號量*/
OSTaskDel(OS_PRIO_SELF);
}
//--------------------------------------------------------------------------------------------
//KEY1處理任務(wù)
void Task_KEY1 (void *pdata)
{
pdata = pdata;
for (;;)
{
OSSemPend(KEY1_Down, 0, &err); //等待鍵按下消息
OSTimeDlyHMSM(0, 0, 0, 20); //等待20mS
if (!GPIO_ReadInputDataBit(KEY1_PORT, KEY1_PIN))
{ //如果KYE輸入仍為低則確認(rèn)鍵按下
LED_Control(LED1,1);//led亮
BuzzOn();
if(flag==1)
{
flag=0;
if(cnt>20)play1=play1+2;
else play1=play1+1;
}
if(play1>=10) wflag=1;
OSTimeDlyHMSM(0, 0, 0, 500); //等待0.5秒
LED_Control(LEDALL,0);
BuzzOff();
}
while (!GPIO_ReadInputDataBit(KEY1_PORT, KEY1_PIN)) //等待鍵松開
{
OSTimeDlyHMSM(0, 0, 0, 20); //等待20mS
};
}
}
//--------------------------------------------------------------------------------------------
//KEY2處理任務(wù)
void Task_KEY2 (void *pdata)
{
pdata = pdata;
for (;;)
{
OSSemPend(KEY2_Down, 0, &err); //等待鍵按下消息
OSTimeDlyHMSM(0, 0, 0, 20); //等待20mS
if (!GPIO_ReadInputDataBit(KEY2_PORT, KEY2_PIN))
{ //如果KYE輸入仍為低則確認(rèn)鍵按下
LED_Control(LED2,1);//led亮
BuzzOn();
if(flag==1)
{
flag=0;
if(cnt>20)play2=play2+2;
else play2=play2+1;
}
if(play2>=10) wflag=2;
OSTimeDlyHMSM(0, 0, 0, 500); //等待0.5秒
LED_Control(LEDALL,0);
BuzzOff();
}
while (!GPIO_ReadInputDataBit(KEY2_PORT, KEY2_PIN)) //等待鍵松開
{
OSTimeDlyHMSM(0, 0, 0, 20); //等待20mS
};
}
}
//--------------------------------------------------------------------------------------------
//KEY3處理任務(wù)
void Task_KEY3 (void *pdata)
{
pdata = pdata;
for (;;)
{
OSSemPend(KEY3_Down, 0, &err); //等待鍵按下消息
OSTimeDlyHMSM(0, 0, 0, 20); //等待20mS
if (!GPIO_ReadInputDataBit(KEY3_PORT, KEY3_PIN))
{ //如果KYE輸入仍為低則確認(rèn)鍵按下
LED_Control(LED3,1);//led亮
BuzzOn();
if(flag==1)
{
flag=0;
if(cnt>20)play3=play3+2;
else play3=play3+1;
}
if(play3>=10) wflag=3;
OSTimeDlyHMSM(0, 0, 0, 500); //等待0.5秒
LED_Control(LEDALL,0);
BuzzOff();
}
while (!GPIO_ReadInputDataBit(KEY3_PORT ,KEY3_PIN)) //等待鍵松開
{
OSTimeDlyHMSM(0, 0, 0, 20); //等待20mS
};
}
}
//--------------------------------------------------------------------------------------------
//KEY4處理任務(wù)
void Task_KEY4(void *pdata)
{
pdata = pdata;
for (;;)
{
OSSemPend(KEY4_Down, 0, &err); //等待鍵按下消息
OSTimeDlyHMSM(0, 0, 0, 20); //等待20mS
if (!GPIO_ReadInputDataBit(KEY4_PORT, KEY4_PIN))
{ //如果KYE輸入仍為低則確認(rèn)鍵按下
LED_Control(LED4,1);//led亮
flag=1;cnt=30;
OSTimeDlyHMSM(0, 0, 0, 500); //等待0.5秒
LED_Control(LEDALL,0);
}
while (!GPIO_ReadInputDataBit(KEY4_PORT ,KEY4_PIN)) //等待鍵松開
{
OSTimeDlyHMSM(0, 0, 0, 20); //等待20mS
};
}
}
void Task_COUNT(void *pdata)
{
for(;;)
{
if(flag==1) cnt-- ;
OSTimeDlyHMSM(0, 0,1,0);
if(cnt==0) flag=0;
SEG_DisplayValue(0,cnt/10,cnt%10);
}
}
void Task_DIS(void *pdata)
{
u8 str1[20];
u8 str2[20];
for(;;)
{
snprintf((char*)str1, sizeof(str1), "play1:%02d", play1);
snprintf((char*)str2, sizeof(str2), "play2:%02d", play2);
LCD_DisplayStringLine(Line4,str1);
LCD_DisplayStringLine(Line5,str2);
if(wflag==1){
flag=0;
cnt=0;
LCD_DisplayStringLine(Line7,"play1 win");
}else if(wflag==2){
flag=0;
cnt=0;
LCD_DisplayStringLine(Line7,"play2 win");
}else if(wflag==3){
flag=0;
cnt=0;
LCD_DisplayStringLine(Line7,"play3 win");
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
qiangdaqi.7z
(236.33 KB, 下載次數(shù): 31)
2021-6-20 03:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
liesnake
時間:
2021-6-20 07:50
樓主這個例子不錯,如果能有pcb等硬件就完美了。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲一区二区三区在线
|
亚洲视频一区二区
|
久久99视频
|
男女午夜激情视频
|
天天夜干
|
欧美一区二区三区精品
|
亚洲三区在线观看
|
亚洲一二三区在线观看
|
色综合网站
|
国产伦精品一区二区
|
欧美二区在线
|
免费在线国产视频
|
www.成人在线视频
|
欧美国产日本一区
|
日日干综合
|
国产精品美女久久久久aⅴ国产馆
|
男人天堂网址
|
免费一区
|
亚洲精品久久视频
|
91不卡
|
欧美在线国产精品
|
欧美成人a∨高清免费观看 欧美日韩中
|
欧美日韩国产一区二区三区
|
国产综合久久久
|
国产精品成人一区二区三区夜夜夜
|
日韩黄色av
|
三级av网址
|
免费观看一级特黄欧美大片
|
日韩在线观看一区
|
九七午夜剧场福利写真
|
欧美影院
|
国产精品免费播放
|
在线中文一区
|
国产精品日日做人人爱
|
欧美色视频免费
|
99这里只有精品视频
|
国产一级特黄视频
|
成人一区二区三区在线观看
|
99精品国产一区二区三区
|
精品国产91
|
国产精品久久久久久影视
|