久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2022|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STM32+ucosii設(shè)計(jì)3人搶答器源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:438632 發(fā)表于 2021-6-19 22:07 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
這是ucosii操作系統(tǒng)設(shè)計(jì),3人搶答器,使用國(guó)信長(zhǎng)天CT117E開(kāi)發(fā)板,單片機(jī)是stm32f103rbt6,使用外設(shè)有LCD屏幕,數(shù)碼管,LED燈,按鍵以及蜂鳴器

單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "lcd.h"
  3. #include "key.h"
  4. #include "exti_a.h"
  5. #include "sys.h"       
  6. #include "includes.h"
  7. #include "stm32f10x.h"
  8. #include "seg.h"
  9. #include "buzz.h"

  10. #define  TASK_STK_SIZE   512  //任務(wù)堆棧長(zhǎng)度
  11. OS_STK   TaskStartStk[512];  //定義任務(wù)堆棧區(qū)//--------------------------------------------------------------------------------------------
  12. RCC_ClocksTypeDef  rcc_clocks;  //定義一個(gè)全局使用的芯片時(shí)鐘頻率結(jié)構(gòu)變量

  13. OS_STK Task_LED1_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)
  14. OS_STK Task_LED2_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)
  15. OS_STK Task_LED3_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)
  16. OS_STK Task_LED4_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)
  17. OS_STK Task_COUNT_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)
  18. OS_STK Task_DIS_Stk[TASK_STK_SIZE]; //定義任務(wù)堆棧區(qū)

  19. INT8U err;    //錯(cuò)誤類(lèi)型變量
  20. //--------------------------------------------------------------------------------------------
  21. OS_EVENT *KEY1_Down; //聲明KEY1鍵按下信號(hào)量
  22. OS_EVENT *KEY2_Down; //聲明KEY2鍵按下信號(hào)量
  23. OS_EVENT *KEY3_Down; //聲明KEY3鍵按下信號(hào)量
  24. OS_EVENT *KEY4_Down; //聲明KEY4鍵按下信號(hào)量
  25. //--------------------------------------------------------------------------------------------
  26. void TaskStart (void *pdata);
  27. void Task_KEY1 (void *pdata);           //聲明任務(wù)
  28. void Task_KEY2 (void *pdata);           //聲明任務(wù)
  29. void Task_KEY3 (void *pdata);           //聲明任務(wù)
  30. void Task_KEY4 (void *pdata);           //聲明任務(wù)
  31. void Task_COUNT (void *pdata);                           //聲明任務(wù)
  32. void Task_DIS (void *pdata);                           //聲明任務(wù)

  33. u8 flag=0;
  34. u8 play1=0;
  35. u8 play2=0;
  36. u8 play3=0;
  37. u8 cnt=30;
  38. u8 wflag=0;

  39. void SysTick_Init (void)
  40. {
  41.         RCC_GetClocksFreq(&rcc_clocks); //讀取系統(tǒng)時(shí)鐘頻率
  42.        
  43.         //設(shè)置嘀嗒節(jié)拍中斷周期為rcc_clocks.HCLK_Frequency/OS_TICKS_PER_SEC(1mS)
  44.         //設(shè)置嘀嗒節(jié)拍中斷優(yōu)先級(jí)為最低搶占優(yōu)先級(jí)
  45.         SysTick_Config(rcc_clocks.HCLK_Frequency / OS_TICKS_PER_SEC);
  46. }
  47. //--------------------------------------------------------------------------------------------
  48. int main(void)
  49. {
  50.         OSInit( );  //初始化uCOS_II
  51.        
  52.         //創(chuàng)建起始任務(wù)TaskStart(優(yōu)先級(jí)0)
  53.         OSTaskCreate(TaskStart, (void *) 0, &TaskStartStk[512 - 1], 0);
  54.        
  55.         OSStart( );  //啟動(dòng)多任務(wù)管理
  56. }

  57. void  TaskStart (void *pdata)
  58. {
  59.         pdata = pdata;
  60.        
  61.         /*開(kāi)始:CPU工作參數(shù)及外設(shè)工作狀態(tài)初始化*/
  62.         //設(shè)置優(yōu)先級(jí)分組:搶占優(yōu)先級(jí)3位(8級(jí))和響應(yīng)優(yōu)先級(jí)1位(2級(jí))
  63.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
  64.         //設(shè)置向量表的位置和偏移:在FLASH中偏移為0
  65.         NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);
  66.        
  67.         SysTick_Init(); //設(shè)置uC/OS的時(shí)鐘
  68.         STM3210B_LCD_Init();
  69.         LCD_SetTextColor(Black);
  70.         LCD_SetBackColor(White);
  71.         LCD_Clear(White);
  72.         LCD_DisplayStringLine(Line2,"Xuhaipeng");
  73.         LCD_DisplayStringLine(Line3,"scorecard");
  74.         LCD_DisplayStringLine(Line4,"play1:00");
  75.         LCD_DisplayStringLine(Line5,"play2:00");
  76.         LCD_DisplayStringLine(Line6,"play3:00");
  77.         OSTimeDlyHMSM(0, 0, 0, 200);  //等待0.5秒

  78.         LED_Init();    //LED輸出初始化
  79.         LED_Control(LEDALL,0);
  80.         Key_Init();    //按鍵輸入初始化
  81.         EXTI_InitInit(); //外部中斷初始化
  82.         STM3210B_SEG_Init();
  83.         SEG_DisplayValue(0,0,0);
  84.         /*結(jié)束:CPU工作參數(shù)及外設(shè)工作狀態(tài)初始化*/
  85.        
  86.         /*開(kāi)始:創(chuàng)建工作任務(wù)*/
  87.         OSTaskCreate(Task_KEY1, (void *)0, &Task_LED1_Stk[TASK_STK_SIZE - 1], 1);       
  88.         OSTaskCreate(Task_KEY2, (void *)0, &Task_LED2_Stk[TASK_STK_SIZE - 1], 2);                               
  89.         OSTaskCreate(Task_KEY3, (void *)0, &Task_LED3_Stk[TASK_STK_SIZE - 1], 3);
  90.         OSTaskCreate(Task_KEY4, (void *)0, &Task_LED4_Stk[TASK_STK_SIZE - 1], 4);        
  91.         OSTaskCreate(Task_COUNT, (void *)0, &Task_COUNT_Stk[TASK_STK_SIZE - 1],5);
  92.         OSTaskCreate(Task_DIS, (void *)0, &Task_DIS_Stk[TASK_STK_SIZE - 1], 6);                                  
  93.         /*結(jié)束:創(chuàng)建工作任務(wù)*/
  94.        
  95.         /*開(kāi)始:創(chuàng)建信號(hào)量*/
  96.         KEY1_Down = OSSemCreate(0);   //創(chuàng)建KEY1按下信號(hào)量
  97.         KEY2_Down = OSSemCreate(0);   //創(chuàng)建KEY2按下信號(hào)量
  98.         KEY3_Down = OSSemCreate(0);   //創(chuàng)建KEY3按下信號(hào)量
  99.         KEY4_Down = OSSemCreate(0);   //創(chuàng)建KEY4按下信號(hào)量
  100.         /*結(jié)束:創(chuàng)建信號(hào)量*/
  101.        
  102.         OSTaskDel(OS_PRIO_SELF);
  103. }
  104. //--------------------------------------------------------------------------------------------
  105. //KEY1處理任務(wù)
  106. void  Task_KEY1 (void *pdata)
  107. {
  108.         pdata = pdata;
  109.        
  110.         for (;;)
  111.         {
  112.                 OSSemPend(KEY1_Down, 0, &err); //等待鍵按下消息
  113.        
  114.                 OSTimeDlyHMSM(0, 0, 0, 20);  //等待20mS
  115.                 if (!GPIO_ReadInputDataBit(KEY1_PORT, KEY1_PIN))
  116.                 { //如果KYE輸入仍為低則確認(rèn)鍵按下
  117.                         LED_Control(LED1,1);//led亮
  118.                         BuzzOn();
  119.                         if(flag==1)
  120.                         {
  121.                                 flag=0;
  122.                                 if(cnt>20)play1=play1+2;
  123.                                 else        play1=play1+1;
  124.                         }
  125.                         if(play1>=10)        wflag=1;
  126.                         OSTimeDlyHMSM(0, 0, 0, 500);  //等待0.5秒
  127.                         LED_Control(LEDALL,0);
  128.                         BuzzOff();
  129.                 }
  130.                 while (!GPIO_ReadInputDataBit(KEY1_PORT, KEY1_PIN)) //等待鍵松開(kāi)
  131.                 {
  132.                         OSTimeDlyHMSM(0, 0, 0, 20);  //等待20mS
  133.                 };
  134.         }
  135. }
  136. //--------------------------------------------------------------------------------------------
  137. //KEY2處理任務(wù)
  138. void  Task_KEY2 (void *pdata)
  139. {
  140.         pdata = pdata;
  141.        
  142.         for (;;)
  143.         {
  144.                 OSSemPend(KEY2_Down, 0, &err); //等待鍵按下消息
  145.                
  146.                 OSTimeDlyHMSM(0, 0, 0, 20);  //等待20mS
  147.                 if (!GPIO_ReadInputDataBit(KEY2_PORT, KEY2_PIN))
  148.                 { //如果KYE輸入仍為低則確認(rèn)鍵按下
  149.                         LED_Control(LED2,1);//led亮
  150.                         BuzzOn();
  151.                         if(flag==1)
  152.                         {
  153.                                 flag=0;
  154.                                 if(cnt>20)play2=play2+2;
  155.                                 else        play2=play2+1;
  156.                         }
  157.                         if(play2>=10)        wflag=2;
  158.                         OSTimeDlyHMSM(0, 0, 0, 500);  //等待0.5秒
  159.                         LED_Control(LEDALL,0);
  160.                         BuzzOff();
  161.                 }
  162.                 while (!GPIO_ReadInputDataBit(KEY2_PORT, KEY2_PIN)) //等待鍵松開(kāi)
  163.                 {
  164.                         OSTimeDlyHMSM(0, 0, 0, 20);  //等待20mS
  165.                 };
  166.         }
  167. }
  168. //--------------------------------------------------------------------------------------------
  169. //KEY3處理任務(wù)
  170. void  Task_KEY3 (void *pdata)
  171. {
  172.         pdata = pdata;
  173.        
  174.         for (;;)
  175.         {
  176.                 OSSemPend(KEY3_Down, 0, &err); //等待鍵按下消息
  177.                
  178.                 OSTimeDlyHMSM(0, 0, 0, 20);  //等待20mS
  179.                 if (!GPIO_ReadInputDataBit(KEY3_PORT, KEY3_PIN))
  180.                 { //如果KYE輸入仍為低則確認(rèn)鍵按下
  181.                         LED_Control(LED3,1);//led亮
  182.                         BuzzOn();
  183.                         if(flag==1)
  184.                         {
  185.                                 flag=0;
  186.                                 if(cnt>20)play3=play3+2;
  187.                                 else        play3=play3+1;
  188.                         }
  189.                         if(play3>=10)        wflag=3;
  190.                         OSTimeDlyHMSM(0, 0, 0, 500);  //等待0.5秒
  191.                         LED_Control(LEDALL,0);
  192.                         BuzzOff();
  193.                 }
  194.                 while (!GPIO_ReadInputDataBit(KEY3_PORT ,KEY3_PIN)) //等待鍵松開(kāi)
  195.                 {
  196.                         OSTimeDlyHMSM(0, 0, 0, 20);  //等待20mS
  197.                 };
  198.         }
  199. }

  200. //--------------------------------------------------------------------------------------------
  201. //KEY4處理任務(wù)
  202. void  Task_KEY4(void *pdata)
  203. {
  204.         pdata = pdata;
  205.        
  206.         for (;;)
  207.         {
  208.                 OSSemPend(KEY4_Down, 0, &err); //等待鍵按下消息
  209.                
  210.                 OSTimeDlyHMSM(0, 0, 0, 20);  //等待20mS
  211.                 if (!GPIO_ReadInputDataBit(KEY4_PORT, KEY4_PIN))
  212.                 { //如果KYE輸入仍為低則確認(rèn)鍵按下
  213.                         LED_Control(LED4,1);//led亮
  214.                         flag=1;cnt=30;
  215.                         OSTimeDlyHMSM(0, 0, 0, 500);  //等待0.5秒
  216.                         LED_Control(LEDALL,0);
  217.                 }
  218.                 while (!GPIO_ReadInputDataBit(KEY4_PORT ,KEY4_PIN)) //等待鍵松開(kāi)
  219.                 {
  220.                         OSTimeDlyHMSM(0, 0, 0, 20);  //等待20mS
  221.                 };
  222.         }
  223. }

  224. void Task_COUNT(void *pdata)
  225. {
  226.         for(;;)
  227.         {
  228.                 if(flag==1) cnt-- ;
  229.                 OSTimeDlyHMSM(0, 0,1,0);
  230.                 if(cnt==0) flag=0;
  231.                 SEG_DisplayValue(0,cnt/10,cnt%10);
  232.         }
  233. }

  234. void Task_DIS(void *pdata)
  235. {
  236.         u8 str1[20];
  237.         u8 str2[20];
  238.         for(;;)
  239.         {
  240.                 snprintf((char*)str1, sizeof(str1), "play1:%02d", play1);
  241.                 snprintf((char*)str2, sizeof(str2), "play2:%02d", play2);
  242.                 LCD_DisplayStringLine(Line4,str1);       
  243.                 LCD_DisplayStringLine(Line5,str2);
  244.                 if(wflag==1){
  245.                         flag=0;
  246.                         cnt=0;
  247.                         LCD_DisplayStringLine(Line7,"play1 win");
  248.                 }else if(wflag==2){
  249.                         flag=0;
  250.                         cnt=0;
  251.                         LCD_DisplayStringLine(Line7,"play2 win");
  252.                 }else if(wflag==3){
  253.                         flag=0;
  254.                         cnt=0;
  255.                         LCD_DisplayStringLine(Line7,"play3 win");
  256.                 }
  257.         }
  258. }
復(fù)制代碼

所有資料51hei提供下載:
qiangdaqi.7z (236.33 KB, 下載次數(shù): 31)

評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:319585 發(fā)表于 2021-6-20 07:50 來(lái)自手機(jī) | 只看該作者
樓主這個(gè)例子不錯(cuò),如果能有pcb等硬件就完美了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本免费在线观看视频 | 欧美一区二区三区视频 | 亚洲精品免费在线观看 | 四虎影院在线播放 | 国产做爰 | 久久网站免费视频 | 欧美性一区二区三区 | 国产日韩欧美一区 | 亚洲精品第一 | 亚洲精彩视频在线观看 | 色性av | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 91在线最新| 爱爱视频网 | 伊人看片 | 久久只有精品 | 日韩精品在线播放 | 黄久久久 | 日韩在线电影 | 国产成人区 | 99国产精品99久久久久久 | 亚洲视频区 | 97久久精品午夜一区二区 | 91精品无人区卡一卡二卡三 | 最新毛片网站 | 精品国产成人 | 国产日韩欧美中文字幕 | 91精品久久久久久综合五月天 | 成人福利在线 | 97视频在线观看网站 | 电影午夜精品一区二区三区 | 超碰97免费观看 | 99久热| 久久久综合精品 | 天天爽一爽| 国产精品久久久久久久久久免费看 | www国产精品 | 国产在线视频一区二区董小宛性色 | 亚洲国产欧美国产综合一区 | 青青草视频免费观看 | 区一区二区三在线观看 |