À¸´£º¹²ÏíÖйúÐÅÏ¢²úÒµ´øÀ´µÄÓ°ÏìÁ¦

本文回顾了2007年中国IT行业的发展状况,强调了中国经济的蓬勃发展背景下信息技术产业的重要性。
ÉùÃ÷£ºÌÚѶ¿Æ¼¼¿¯µÇ´ËÎÄÕÂΪ¡¶2007ÖйúITÁ½»á¡·»Ø¹Ë£¬¸ÃÎÄÕÂʱ¼äΪ07Äê12ÔÂ2ÈÕ¡£ ·Ç³£¸ÐлÖ÷°ì·½µÄÑûÇë¡£ÖйúµÄ¾­¼ÃÅ·¢Õ¹£¬ÖйúµÄÐÅÏ¢²úÒµÕýÔÚÓ­½Ó×îºÃµÄʱ»ú¡£¶øÕâ¸öʱ»ú£¬ÊÇËùÓÐµÄÆóÒµ£¬°üÀ¨±¾ÍÁµÄÆó ...
#include "sys.h" #include "delay.h" #include "usart.h" #include "includes.h" #include "led.h" /************************************************ ALIENTEK ¾«Ó¢°æSTM32¿ª·¢°åUCOSʵÑé Àý6-1 UCOSIII ÈÎÎñ´´½¨ÓÚɾ³ý ¼¼ÊõÖ§³Ö£ºwww.openedv.com ÌÔ±¦µêÆÌ£ºhttp://eboard.taobao.com ¹Ø×¢Î¢ÐŹ«ÖÚÆ½Ì¨Î¢Ðźţº"ÕýµãÔ­×Ó"£¬Ãâ·Ñ»ñÈ¡STM32×ÊÁÏ¡£ ¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾ ×÷ÕߣºÕýµãÔ­×Ó @ALIENTEK ************************************************/ //UCOSIIIÖÐÒÔÏÂÓÅÏȼ¶Óû§³ÌÐò²»ÄÜʹÓã¬ALIENTEK //½«ÕâЩÓÅÏȼ¶·ÖÅ䏸ÁËUCOSIIIµÄ5¸öϵͳÄÚ²¿ÈÎÎñ //ÓÅÏȼ¶0£ºÖжϷþÎñ·þÎñ¹ÜÀíÈÎÎñ OS_IntQTask() //ÓÅÏȼ¶1£ºÊ±ÖÓ½ÚÅÄÈÎÎñ OS_TickTask() //ÓÅÏȼ¶2£º¶¨Ê±ÈÎÎñ OS_TmrTask() //ÓÅÏȼ¶OS_CFG_PRIO_MAX-2£ºÍ³¼ÆÈÎÎñ OS_StatTask() //ÓÅÏȼ¶OS_CFG_PRIO_MAX-1£º¿ÕÏÐÈÎÎñ OS_IdleTask() /* ΪÁËʵÏÖÁÙ½çÇøµÄ±£»¤£¬UCOSIIIÌṩÁËÁ½¸öºê£ºOS_CRITICAL_ENTER() ºÍOS_CRITICAL_EXIT()¡£ µ±Ò»¸öÈÎÎñ»òÖжϽøÈëÁÙ½çÇøÊ±£¬Ëü±ØÐëµ÷ÓÃOS_CRITICAL_ENTER()ºêÒÔ»ñµÃÁÙ½çÇøµÄ±£»¤¡£ Õâ¸öºê½«½ûÓÃÖжϣ¬ÒÔÈ·±£Ö´ÐÐÁÙ½çÇøµÄ´úÂë²»»á±»ÖжϻòÇÀÕ¼£¬´Ó¶ø±£Ö¤ÁËÁÙ½çÇøµÄÔ­×ÓÐÔ¡£ µ±´úÂëÖ´ÐÐÍê±Ïʱ£¬ÈÎÎñ»òÖжϱØÐëµ÷ÓÃOS_CRITICAL_EXIT()ºêÀ´»Ö¸´Öжϣ¬ÒÔ±ãÆäËûÈÎÎñºÍÖжϿÉÒÔ·ÃÎʹ²Ïí×ÊÔ´²¢Ö´ÐÐËüÃǵĴúÂë¡£ ʹÓÃOS_CRITICAL_ENTER()ºÍOS_CRITICAL_EXIT()ºêÀ´±£»¤ÁÙ½çÇø£¬ ÄÇôÔÚÈÎÎñT1Ö´ÐеÄÕû¸öʱ¼äÄÚ£¬ÖжϽ«±»½ûÓ㬠ÆäËûÈÎÎñ½«²»ÄÜ·ÃÎʹ²Ïí×ÊÔ´²¢ÇÒÁÙ½çÇøµÄ´úÂ뽫ÒÔÔ­×Ó·½Ê½Ö´ÐÐÍê±Ï¡£ ÕâÑù¿ÉÒÔÈ·±£ÁÙ½çÇø´úÂëµÄÕýÈ·ÐÔ£¬±ÜÃ⾺ÕùÌõ¼þºÍÆäËûͬ²½ÎÊÌâ¡£ */ /* ÔÚUCOS IIIÖУ¬ÈÎÎñµÄÖ´ÐÐ˳ÐòÊÇ»ùÓÚÓÅÏȼ¶µ÷¶ÈËã·¨¡£ ÿ¸öÈÎÎñ¶¼ÓÐÒ»¸öÓÅÏȼ¶£¨0µ½255£©£¬¾ßÓиü¸ßÓÅÏȼ¶µÄÈÎÎñ±ÈµÍÓÅÏȼ¶µÄÈÎÎñ¸ü¿ÉÄܵõ½µ÷¶È¡£ UCOS IIIʹÓÃÇÀռʽµ÷¶È£¬ÕâÒâζ×ŵ±ÓÐÒ»¸ö¸ßÓÅÏȼ¶µÄÈÎÎñ¾ÍÐ÷ʱ£¬µ±Ç°ÕýÔÚÖ´ÐеÄÈÎÎñ½«±»Öжϲ¢ÇÒ¸ßÓÅÏȼ¶ÈÎÎñ½«±»Ö´ÐС£ ÕâÈ·±£Á˾ßÓиü¸ßÓÅÏȼ¶µÄÈÎÎñ¿ÉÒÔ¼°Ê±»ñµÃÖ´ÐУ¬±ÜÃⳤʱ¼ä±»µÍÓÅÏȼ¶ÈÎÎñÕ¼Óô¦ÀíÆ÷µÄÇé¿ö·¢Éú¡£ UCOS IIIÈÎÎñµÄÖ´ÐÐÊÇͨ¹ýÉÏÏÂÎÄÇл»ÊµÏֵġ£ ÉÏÏÂÎÄÇл»ÊÇÖ¸½«´¦ÀíÆ÷µÄ״̬´ÓÒ»¸öÈÎÎñ±£´æµ½Äڴ棬Ȼºó½«ÁíÒ»¸öÈÎÎñµÄ×´Ì¬×°ÔØµ½´¦ÀíÆ÷ÖУ¬ÒÔÔÚ²»¼ä¶ÏµÄÇé¿öÏÂת»»ÈÎÎñÖ´ÐС£ µ±Ò»¸öÈÎÎñÐèÒª±»ÖÐֹʱ£¬¼´Ö´ÐÐOS_TaskSuspend()º¯Êýʱ£¬UCOS III´¦ÀíÆ÷»áÖ´ÐÐÒ»¸öÈÎÎñÇл»Öжϲ¢½«¿ØÖÆÈ¨×ªÒƵ½ÁíÒ»¸öÈÎÎñ¡£ ÈÎÎñÇл»Í¨³£·¢ÉúÔÚÒÔÏÂÇé¿öÏ£º µ±ÈÎÎñÖ÷¶¯µ÷ÓÃÁËÈÎÎñ¿ØÖƺ¯Êý£¨ÀýÈ磬OS_Delay()¡¢OS_EventWait()¡¢OS_TaskSuspend()µÈ£©²¢ÍËÈÃCPUʱ£» µ±Ä³¸öÖжϷþÎñ³ÌÐò(ISR)ÔڹؼüÈÎÎñÖ´ÐÐÆÚ¼äÖ´ÐУ¨¼´ÖжÏÓÅÏȼ¶¸ßÓڹؼüÈÎÎñµÄÓÅÏȼ¶£©¡£ */ //¿ªÊ¼ÈÎÎñ£¬´´½¨ÍêÈÎÎñ¶þºÍÈÎÎñÈý¾Íɾ³ý×Ô¼º //ÈÎÎñÓÅÏȼ¶ #define START_TASK_PRIO 3 //ÈÎÎñ¶ÑÕ»´óС #define START_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB StartTaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK START_TASK_STK[START_STK_SIZE]; //ÈÎÎñº¯Êý void start_task(void *p_arg); ///ÈÎÎñ¶þÁÁµÆ£¬²¢´òÓ¡³öÐÅÏ¢ //ÈÎÎñÓÅÏȼ¶ #define TASK1_TASK_PRIO 4 //ÈÎÎñ¶ÑÕ»´óС #define TASK1_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB Task1_TaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK TASK1_TASK_STK[TASK1_STK_SIZE]; void task1_task(void *p_arg); ///ÈÎÎñÈý£¬´òÓ¡ÈÎÎñÈýÖ´ÐÐÐÅÏ¢ //ÈÎÎñÓÅÏȼ¶ #define TASK2_TASK_PRIO 5 //ÈÎÎñ¶ÑÕ»´óС #define TASK2_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB Task2_TaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK TASK2_TASK_STK[TASK2_STK_SIZE]; //ÈÎÎñº¯Êý void task2_task(void *p_arg); volatile u8 key_pressed = 0; volatile u8 current_task = 1; void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // ???? GPIO_Init(GPIOA, &GPIO_InitStructure); } void Key_Scan(void) { static u8 key_up = 1; if (key_up && GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { delay_ms(20); // ?? if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { key_up = 0; key_pressed = 1; // ?????? } } else if (!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { key_up = 1; } } //Ö÷º¯Êý int main(void) { OS_ERR err; CPU_SR_ALLOC(); SystemInit();//ÓÉÓÚ±¾¹¤³ÌÊÇÓÉstm32f103zet6ÒÆÖ²ËùÀ´£¬Òò´ËÕâÀïÒò¼ÓÈë±¾º¯ÊýÈ·±£delayº¯ÊýÕý³£Ê¹Óà delay_init(); //ʱÖÓ³õʼ»¯ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÖжϷÖ×éÅäÖà uart_init(115200); //´®¿Ú³õʼ»¯ LED_Init(); KEY_Init(); // ??????? OSInit(&err); //³õʼ»¯UCOSIII OS_CRITICAL_ENTER(); //½øÈëÁÙ½çÇø //´´½¨¿ªÊ¼ÈÎÎñ OSTaskCreate((OS_TCB * )&StartTaskTCB, //ÈÎÎñ¿ØÖÆ¿é (CPU_CHAR * )"start task", //ÈÎÎñÃû×Ö (OS_TASK_PTR )start_task, //ÈÎÎñº¯Êý (void * )0, //´«µÝ¸øÈÎÎñº¯ÊýµÄ²ÎÊý (OS_PRIO )START_TASK_PRIO, //ÈÎÎñÓÅÏȼ¶ (CPU_STK * )&START_TASK_STK[0], //ÈÎÎñ¶ÑÕ»»ùµØÖ· (CPU_STK_SIZE)START_STK_SIZE/10, //ÈÎÎñ¶ÑÕ»Éî¶ÈÏÞλ (CPU_STK_SIZE)START_STK_SIZE, //ÈÎÎñ¶ÑÕ»´óС (OS_MSG_QTY )0, //ÈÎÎñÄÚ²¿ÏûÏ¢¶ÓÁÐÄܹ»½ÓÊÕµÄ×î´óÏûÏ¢ÊýÄ¿,Ϊ0ʱ½ûÖ¹½ÓÊÕÏûÏ¢ (OS_TICK )0, //µ±Ê¹ÄÜʱ¼äƬÂÖתʱµÄʱ¼äƬ³¤¶È£¬Îª0ʱΪĬÈϳ¤¶È£¬ (void * )0, //Óû§²¹³äµÄ´æ´¢Çø (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //ÈÎÎñÑ¡Ïî (OS_ERR * )&err); //´æ·Å¸Ãº¯Êý´íÎóʱµÄ·µ»ØÖµ OS_CRITICAL_EXIT(); //Í˳öÁÙ½çÇø OSStart(&err); //¿ªÆôUCOSIII } //¿ªÊ¼ÈÎÎñÈÎÎñº¯Êý void start_task(void *p_arg) { OS_ERR err; CPU_SR_ALLOC(); p_arg = p_arg; CPU_Init(); #if OS_CFG_STAT_TASK_EN > 0u OSStatTaskCPUUsageInit(&err); //ͳ¼ÆÈÎÎñ #endif #ifdef CPU_CFG_INT_DIS_MEAS_EN //Èç¹ûʹÄÜÁ˲âÁ¿ÖжϹرÕʱ¼ä CPU_IntDisMeasMaxCurReset(); #endif #if OS_CFG_SCHED_ROUND_ROBIN_EN //µ±Ê¹ÓÃʱ¼äƬÂÖתµÄʱºò //ʹÄÜʱ¼äƬÂÖתµ÷¶È¹¦ÄÜ,ʱ¼äƬ³¤¶ÈΪ1¸öϵͳʱÖÓ½ÚÅÄ£¬¼È1*5=5ms OSSchedRoundRobinCfg(DEF_ENABLED,1,&err); #endif OS_CRITICAL_ENTER(); //½øÈëÁÙ½çÇø //´´½¨TASK1ÈÎÎñ OSTaskCreate((OS_TCB * )&Task1_TaskTCB, (CPU_CHAR * )"Task1 task", (OS_TASK_PTR )task1_task, (void * )0, (OS_PRIO )TASK1_TASK_PRIO, (CPU_STK * )&TASK1_TASK_STK[0], (CPU_STK_SIZE)TASK1_STK_SIZE/10, (CPU_STK_SIZE)TASK1_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )0, (void * )0, (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, (OS_ERR * )&err); //´´½¨TASK2ÈÎÎñ OSTaskCreate((OS_TCB * )&Task2_TaskTCB, (CPU_CHAR * )"task2 task", (OS_TASK_PTR )task2_task, (void * )0, (OS_PRIO )TASK2_TASK_PRIO, (CPU_STK * )&TASK2_TASK_STK[0], (CPU_STK_SIZE)TASK2_STK_SIZE/10, (CPU_STK_SIZE)TASK2_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )0, (void * )0, (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, (OS_ERR * )&err); OS_CRITICAL_EXIT(); //Í˳öÁÙ½çÇø OSTaskDel((OS_TCB*)0,&err); //ɾ³ýstart_taskÈÎÎñ×ÔÉí } // ??1:??PB0(LED0) void task1_task(void *p_arg) { OS_ERR err; while (1) { Key_Scan(); if (key_pressed) { current_task = 2; // ?????2 key_pressed = 0; printf("Switch to Task2\n"); } else { // LED0?? GPIO_SetBits(GPIOB, GPIO_Pin_0); // LED0? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms GPIO_ResetBits(GPIOB, GPIO_Pin_0); // LED0? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms } } } void task2_task(void *p_arg) { OS_ERR err; while (1) { Key_Scan(); if (key_pressed) { current_task = 1; // ?????1 key_pressed = 0; printf("Switch back to Task1\n"); } else { // ????2??? // ??:LED1?? GPIO_SetBits(GPIOB, GPIO_Pin_1); // LED1? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms GPIO_ResetBits(GPIOB, GPIO_Pin_1); // LED1? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms } } }我现在需要刚开始时B0(任务一)LED闪烁,当按下按键后(A0)给予信息量,使得代码进入(任务二),再次摁下按键,两个任务均不执行
06-06
#include <reg52.h> //°üº¬51µ¥Æ¬»úÏà&sup1;صÄÍ·ÎÄ&frac14;þ #include <intrins.h> #define uint unsigned int //ÖØ¶¨ÒåÎÞ·ûºÅÕûÊýÀàÐÍ #define uchar unsigned char //ÖØ¶¨ÒåÎÞ·ûºÅ×Ö·ûÀàÐÍ uchar code LedShowData[]={0x03,0x9F,0x25,0x0D,0x99, //¶¨ÒåÊýÂë&sup1;ÜÏÔʾÊý¾Ý 0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9 uchar code RecvData[]={0x19,0x46,0x15,0x44,0x43,0x40,0x0D,0x0E,0x00,0x0F}; uchar IRCOM[7]; static unsigned int LedFlash; //¶¨ÒåÉÁ¶¯ÆµÂÊ&frac14;ÆÊý±äÁ¿ unsigned char RunFlag=0; //¶¨ÒåÔËÐбê־λ bit EnableLight=0; //¶¨ÒåָʾµÆÊ&sup1;ÄÜλ /*************Íê³É״ָ̬ʾµÆ¶¨Òå*************/ sbit S1=P3^2; //¶¨ÒåS1°´&frac14;ü¶Ë¿Ú /*************Íê³Éµç»ú¿ØÖƶ˿ڶ¨Òå***********/ sbit M1A=P1^2; //¶¨Òåµç»ú1ÕýÏò¶Ë¿Ú sbit M1B=P1^3; //¶¨Òåµç»ú1·´Ïò¶Ë¿Ú sbit M2A=P1^4; //¶¨Òåµç»ú2ÕýÏò¶Ë¿Ú sbit M2B=P1^5; //¶¨Òåµç»ú2·´Ïò¶Ë¿Ú sbit IRIN=P3^3; //¶¨ÒåºìÍâ&frac12;ÓÊÕ¶Ë¿Ú /*********Íê³ÉºìÍâ&frac12;ÓÊն˿ڵ͍Òå*************/ #define ShowPort P0 //¶¨ÒåÊýÂë&sup1;ÜÏÔʾ¶Ë¿Ú extern void ControlCar(uchar CarType); //ÉùÃ÷С³µ¿ØÖÆ×Ó³ÌÐò void delayms(unsigned char x) //0.14mSÑÓʱ³ÌÐò { unsigned char i; //¶¨ÒåÁÙʱ±äÁ¿ while(x--) //ÑÓʱʱ&frac14;äÑ­»· { for (i = 0; i<13; i++) {} //14mSÑÓʱ } } void Delay1ms(unsigned int i) { unsigned char j,k; do{ j = 10; do{ k = 50; do{ _nop_(); }while(--k); }while(--j); }while(--i); } void Delay() //¶¨ÒåÑÓʱ×Ó³ÌÐò { uint DelayTime=30000; //¶¨ÒåÑÓʱʱ&frac14;ä±äÁ¿ while(DelayTime--); //¿ªÊ&frac14;&frac12;øÐÐÑÓʱѭ»· return; //×Ó³ÌÐò·µ»Ø } void tingzhi() { M1A=0; //&frac12;«M1µç»úA¶Ë³õÊ&frac14;»¯Îª0 M1B=0; //&frac12;«M1µç»úB¶Ë³õÊ&frac14;»¯Îª0 M2A=0; //&frac12;«M2µç»úA¶Ë³õÊ&frac14;»¯Îª0 M2B=0; } void qianjin() { M1A=1; M1B=0; M2A=1; M2B=0; } void houtui() { M1A=0; M1B=1; M2A=0; M2B=1; } void youzhuan() { M1A=1; M1B=0; M2A=0; M2B=1; } void zuozhuan() { M1A=0; M1B=1; M2A=1; M2B=0; } void ControlCar(unsigned char ConType) //¶¨Òåµç»ú¿ØÖÆ×Ó³ÌÐò { tingzhi(); switch(ConType) //ÅжÏÓû§É趨µç»úÐÎÊ&frac12; { case 1: //ǰ&frac12;ø //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎÊ&frac12;1 { tingzhi(); //&frac12;øÈëǰ&frac12;øÖ®Ç° ÏÈÍ£Ö&sup1;Ò»¶Îʱ&frac14;ä ·ÀÖ&sup1;µç»ú·´ÏòµçÑ&sup1;³å»÷Ö÷°å µ&frac14;ÖÂϵͳ¸´Î» Delay1ms(240); qianjin(); ShowPort=LedShowData[1]; break; } case 2: //ºóÍË //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎÊ&frac12;2 { tingzhi(); //&frac12;øÈëºóÍË֮ǰ ÏÈÍ£Ö&sup1;Ò»¶Îʱ&frac14;ä ·ÀÖ&sup1;µç»ú·´ÏòµçÑ&sup1;³å»÷Ö÷°å µ&frac14;ÖÂϵͳ¸´Î» Delay1ms(240); // LeftLed = 1 ; houtui(); ShowPort=LedShowData[2]; //M2µç»ú·´×ª break; } case 3: //×óת //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎÊ&frac12;3 { tingzhi(); //&frac12;øÈë×óת֮ǰ ÏÈÍ£Ö&sup1;Ò»¶Îʱ&frac14;ä ·ÀÖ&sup1;µç»ú·´ÏòµçÑ&sup1;³å»÷Ö÷°å µ&frac14;ÖÂϵͳ¸´Î» Delay1ms(240); zuozhuan(); ShowPort=LedShowData[3]; //M2µç»úÕýת break; } case 4: //ÓÒת //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎÊ&frac12;4 { tingzhi(); //&frac12;øÈëÓÒת֮ǰ ÏÈÍ£Ö&sup1;Ò»¶Îʱ&frac14;ä ·ÀÖ&sup1;µç»ú·´ÏòµçÑ&sup1;³å»÷Ö÷°å µ&frac14;ÖÂϵͳ¸´Î» Delay1ms(240); youzhuan(); //M1µç»úÕýת ShowPort=LedShowData[4]; //M2µç»ú·´×ª break; } case 5: //Í£Ö&sup1; //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎÊ&frac12;8 { tingzhi(); ShowPort=LedShowData[0]; break; //Í˳öµ±Ç°Ñ¡Ôñ } } } void IR_IN() interrupt 2 using 0 //¶¨ÒåINT2Íâ&sup2;¿ÖжϺ¯Êý { unsigned char j,k,N=0; //¶¨ÒåÁÙʱ&frac12;ÓÊÕ±äÁ¿ EX1 = 0; //&sup1;رÕÍâ&sup2;¿ÖжÏ,·ÀÖ&sup1;ÔÙÓÐÐźŵ&frac12;´ï delayms(15); //ÑÓʱʱ&frac14;䣬&frac12;øÐкìÍâÏû¶¶ if (IRIN==1) //ÅжϺìÍâÐźÅÊÇ·ñÏûʧ { EX1 =1; //Íâ&sup2;¿ÖжϿª return; //·µ»Ø } while (!IRIN) //µÈIR±äΪ¸ßµçÆ&frac12;£¬Ìø&sup1;ý9msµÄǰµ&frac14;µÍµçÆ&frac12;Ðźš£ { delayms(1); //ÑÓʱµÈ´ý } for (j=0;j<4;j++) //&sup2;É&frac14;¯ºìÍâÒ£¿ØÆ÷Êý¾Ý { for (k=0;k<8;k++) //·Ö´Î&sup2;É&frac14;¯8λÊý¾Ý { while (IRIN) //µÈ IR ±äΪµÍµçÆ&frac12;£¬Ìø&sup1;ý4.5msµÄǰµ&frac14;¸ßµçÆ&frac12;Ðźš£ { delayms(1); //ÑÓʱµÈ´ý } while (!IRIN) //µÈ IR ±äΪ¸ßµçÆ&frac12; { delayms(1); //ÑÓʱµÈ´ý } while (IRIN) //&frac14;ÆËãIR¸ßµçÆ&frac12;ʱ³¤ { delayms(1); //ÑÓʱµÈ´ý N++; //&frac14;ÆÊýÆ÷&frac14;Ó&frac14;Ó if (N>=30) //ÅжÏ&frac14;ÆÊýÆ÷ÀÛ&frac14;ÓÖµ { EX1=1; //´ò¿ªÍâ&sup2;¿ÖжÏ&sup1;¦ÄÜ return; //·µ»Ø } } IRCOM[j]=IRCOM[j] >> 1; //&frac12;øÐÐÊý¾ÝÎ»ÒÆ&sup2;Ù×÷&sup2;¢×Ô¶¯&sup2;&sup1;Áã if (N>=8) //ÅжÏÊý¾Ý³¤¶È { IRCOM[j] = IRCOM[j] | 0x80; //Êý¾Ý×î¸ßλ&sup2;&sup1;1 } N=0; //ÇåÁãλÊý&frac14;ÆÂ&frac14;Æ÷ } } if (IRCOM[2]!=~IRCOM[3]) //ÅжϵØÖ·ÂëÊÇ·ñÏàͬ { EX1=1; //´ò¿ªÍâ&sup2;¿ÖÐ¶Ï return; //·µ»Ø } for(j=0;j<10;j++) //Ñ­»·&frac12;øÐÐ&frac14;üÂë&frac12;âÎö { if(IRCOM[2]==RecvData[j]) //&frac12;øÐÐ&frac14;üλ¶ÔÓ¦ { ControlCar(j); //ÊýÂë&sup1;ÜÏÔʾÏàÓ¦ÊýÂë } } EX1 = 1; //Íâ&sup2;¿ÖжϿª } void main(void) //Ö÷³ÌÐòÈë¿Ú { bit ExeFlag=0; //¶¨Òå¿ÉÖ´ÐÐλ±äÁ¿ LedFlash=3000; //¶ÔÉÁµÆÊý¾Ý&frac12;øÐгõÊ&frac14;»¯ EX1=1; //ͬÒ⿪ÆôÍâ&sup2;¿ÖжÏ1 IT1=1; //É趨Íâ&sup2;¿ÖжÏ1ΪµÍ±ßÔµ´¥·¢ÀàÐÍ EA=1; //×ÜÖжϿªÆô ShowPort=LedShowData[0]; //ÊýÂë&sup1;ÜÏÔʾÊý×Ö0 while(1) //³ÌÐòÖ÷Ñ­»· { Delay(); //ÑÓʱ // RunStopState=~RunStopState; //ÔËÐÐָʾµÆ×´Ì¬×ª±ä } }详细解释
06-01
main.c文件代码: #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "lcd.h" #include "adc.h" //ALIENTEK Ì&frac12;Ë÷ÕßSTM32F407¿ª·¢°å ʵÑé18 //ADCÄ£Êýת»»ÊµÑé-¿âº¯Êý°æ±¾ //&frac14;&frac14;ÊõÖ§³Ö£ºwww.openedv.com //ÌÔ±¦µêÆÌ£ºhttp://eboard.taobao.com //&sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ //×÷ÕߣºÕýµãÔ­×Ó @ALIENTEK int main(void) { u16 adcx; float temp; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏÈ&frac14;¶·Ö×é2 delay_init(168); //³õÊ&frac14;»¯ÑÓʱº¯Êý uart_init(115200); //³õÊ&frac14;»¯´®¿Ú&sup2;¨ÌØÂÊΪ115200 LED_Init(); //³õÊ&frac14;»¯LED LCD_Init(); //³õÊ&frac14;»¯LCD&frac12;Ó¿Ú Adc_Init(); //³õÊ&frac14;»¯ADC POINT_COLOR=RED; LCD_ShowString(30,50,200,16,16,"Explorer STM32F4"); LCD_ShowString(30,70,200,16,16,"ADC TEST"); LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(30,110,200,16,16,"2014/5/6"); POINT_COLOR=BLUE;//ÉèÖÃ×ÖÌåΪÀ¶É« LCD_ShowString(30,130,200,16,16,"ADC1_CH5_VAL:"); LCD_ShowString(30,150,200,16,16,"ADC1_CH5_VOL:0.000V"); //ÏÈÔÚ&sup1;̶¨Î»ÖÃÏÔʾСÊýµã while(1) { adcx=Get_Adc_Average(ADC_Channel_5,20);//»ñȡͨµÀ5µÄת»»Öµ£¬20´ÎÈ¡Æ&frac12;¾ù LCD_ShowxNum(134,130,adcx,4,16,0); //ÏÔʾADCC&sup2;ÉÑùºóµÄÔ­Ê&frac14;Öµ temp=(float)adcx*(3.3/4096); //»ñÈ¡&frac14;ÆËãºóµÄ´øÐ¡ÊýµÄʵ&frac14;ʵçÑ&sup1;Öµ£¬±ÈÈç3.1111 adcx=temp; //¸³ÖµÕûÊý&sup2;¿·Ö¸øadcx±äÁ¿£¬ÒòΪadcxΪu16ÕûÐÎ LCD_ShowxNum(134,150,adcx,1,16,0); //ÏÔʾµçÑ&sup1;ÖµµÄÕûÊý&sup2;¿·Ö£¬3.1111µÄ»°£¬ÕâÀï¾ÍÊÇÏÔʾ3 temp-=adcx; //°ÑÒѾ­ÏÔʾµÄÕûÊý&sup2;¿·ÖÈ¥µô£¬ÁôÏÂСÊý&sup2;¿·Ö£¬±ÈÈç3.1111-3=0.1111 temp*=1000; //СÊý&sup2;¿·Ö³ËÒÔ1000£¬ÀýÈ磺0.1111¾Íת»»Îª111.1£¬Ï൱ÓÚ±£ÁôÈýλСÊý¡£ LCD_ShowxNum(150,150,temp,3,16,0X80); //ÏÔʾСÊý&sup2;¿·Ö£¨Ç°Ãæ×ª»»ÎªÁËÕûÐÎÏÔʾ£©£¬ÕâÀïÏÔʾµÄ¾ÍÊÇ111. LED0=!LED0; delay_ms(250); } } adc.c文件代码: #include "adc.h" #include "delay.h" ////////////////////////////////////////////////////////////////////////////////// //±¾³ÌÐòÖ»&sup1;©Ñ§Ï°Ê&sup1;Óã¬Î´¾­×÷ÕßÐí¿É£¬&sup2;»µÃÓÃÓÚÆäËüÈκÎÓÃ; //ALIENTEK STM32F407¿ª·¢°å //ADC Çý¶¯´úÂë //ÕýµãÔ­×Ó@ALIENTEK //&frac14;&frac14;ÊõÂÛ̳:www.openedv.com //´´&frac12;¨ÈÕÆÚ:2014/5/6 //°æ±¾£ºV1.0 //°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£ //Copyright(C) &sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ 2014-2024 //All rights reserved ////////////////////////////////////////////////////////////////////////////////// //³õÊ&frac14;»¯ADC void Adc_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//Ê&sup1;ÄÜGPIOAʱÖÓ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //Ê&sup1;ÄÜADC1ʱÖÓ //ÏȳõÊ&frac14;»¯ADC1ͨµÀ5 IO¿Ú GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PA5 ͨµÀ5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//Ä£ÄâÊäÈë GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//&sup2;»´øÉÏÏÂÀ­ GPIO_Init(GPIOA, &GPIO_InitStructure);//³õÊ&frac14;»¯ RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); //ADC1¸´Î» RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE); //¸´Î»&frac12;áÊø ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//¶ÀÁ¢Ä£Ê&frac12; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//Á&frac12;¸ö&sup2;ÉÑù&frac12;×¶ÎÖ®&frac14;äµÄÑÓ³Ù5¸öʱÖÓ ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMAʧÄÜ ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//Ô¤·ÖƵ4·ÖƵ¡£ADCCLK=PCLK2/4=84/4=21Mhz,ADCʱÖÓ×îºÃ&sup2;»Òª³¬&sup1;ý36Mhz ADC_CommonInit(&ADC_CommonInitStructure);//³õÊ&frac14;»¯ ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12λģÊ&frac12; ADC_InitStructure.ADC_ScanConvMode = DISABLE;//·ÇɨÃèÄ£Ê&frac12; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//&sup1;رÕÁ¬Ðø×ª»» ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//&frac12;ûÖ&sup1;´¥·¢&frac14;ì&sup2;⣬Ê&sup1;ÓÃÈí&frac14;þ´¥·¢ ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//ÓÒ¶ÔÆë ADC_InitStructure.ADC_NbrOfConversion = 1;//1¸öת»»ÔÚ&sup1;æÔòÐòÁÐÖÐ Ò&sup2;¾ÍÊÇֻת»»&sup1;æÔòÐòÁÐ1 ADC_Init(ADC1, &ADC_InitStructure);//ADC³õÊ&frac14;»¯ ADC_Cmd(ADC1, ENABLE);//¿ªÆôADת»»Æ÷ } //»ñµÃADCÖµ //ch: @ref ADC_channels //ͨµÀÖµ 0~16ȡֵ·¶Î§Îª£ºADC_Channel_0~ADC_Channel_16 //·µ»ØÖµ:ת»»&frac12;á&sup1;û u16 Get_Adc(u8 ch) { //ÉèÖÃÖ¸¶¨ADCµÄ&sup1;æÔò×éͨµÀ£¬Ò»¸öÐòÁУ¬&sup2;ÉÑùʱ&frac14;ä ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_480Cycles ); //ADC1,ADCͨµÀ,480¸öÖÜÆÚ,Ìá¸ß&sup2;ÉÑùʱ&frac14;ä¿ÉÒÔÌá¸ß¾«È·¶È ADC_SoftwareStartConv(ADC1); //Ê&sup1;ÄÜÖ¸¶¨µÄADC1µÄÈí&frac14;þת»»Æô¶¯&sup1;¦ÄÜ while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//µÈ´ýת»»&frac12;áÊø return ADC_GetConversionValue(ADC1); //·µ»Ø×î&frac12;üÒ»´ÎADC1&sup1;æÔò×éµÄת»»&frac12;á&sup1;û } //»ñȡͨµÀchµÄת»»Öµ£¬È¡times´Î,È»ºóÆ&frac12;¾ù //ch:ͨµÀ±àºÅ //times:»ñÈ¡´ÎÊý //·µ»ØÖµ:ͨµÀchµÄtimes´Îת»»&frac12;á&sup1;ûÆ&frac12;¾ùÖµ u16 Get_Adc_Average(u8 ch,u8 times) { u32 temp_val=0; u8 t; for(t=0;t<times;t++) { temp_val+=Get_Adc(ch); delay_ms(5); } return temp_val/times; } 以上是老师提供的有关ADC实验的示例keil代码,我想请你在这些代码的基础上进行修改完善来完成任务12、3,请分别给出两个文件中应该编译的代码
最新发布
10-30
代码报错,帮我看看全部代码:' Ö÷Êý¾Ý¸´Öƺ¯Êý£¨ÍêÈ«ÓÅ»¯°æ£© Sub CopyData(dataType As String) Dim wsTarget As Worksheet Dim wsSource As Worksheet Dim sourceSheets As Variant Dim lastRow As Long, targetRow As Long Dim i As Long, j As Long, k As Long Dim copyCols As Variant Dim startTime As Double Dim firstSourceFound As Boolean Dim colIndex As Long, maxCol As Long Dim dataTypeColumn As Long Dim dataArr As Variant Dim rowCount As Long startTime = Timer ' &frac14;ÆÊ±¿ªÊ&frac14; Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False On Error GoTo ErrorHandler ' ´íÎó´¦Àí Set wsTarget = ThisWorkbook.Sheets("summary") ' Çå³ýÄ¿±êÇøÓò¾ÉÊý¾Ý£¨±£Áô¸ñÊ&frac12;£© wsTarget.Range("A:Z").ClearContents ' ÐÞÕý£ºÖ±&frac12;ÓÇå³ýA-ZÁÐËùÓÐÄÚÈÝ ' ÉèÖÃ&sup2;»Í¬Êý¾ÝÀàÐ͵ÄÁÐÓ³Éä Select Case UCase(dataType) Case "POE" copyCols = Array("C", "D", "E", "F", "G", "I", "J", "K", "M", "N", "O") Case "MD" copyCols = Array("A", "C", "D", "E", "F", "G", "I", "J", "K", "L", "M") Case "CB" copyCols = Array("C", "D", "E", "F", "G", "I", "J", "K", "M", "N", "O", "Q", "R") Case Else MsgBox "ÎÞЧµÄÊý¾ÝÀàÐÍ: " & dataType, vbExclamation GoTo Cleanup End Select ' ±éÀúËùÓÐÔ´&sup1;¤×÷±í sourceSheets = Array("CGHR", "CGMA", "CHHT", "CGBO", "CPPL", "CGEL") targetRow = 1 ' ³õÊ&frac14;Öµ£¨ºóÐø¸ù¾ÝÊÇ·ñ¸´ÖƱêÌâµ÷Õû£© firstSourceFound = False rowCount = 0 For i = LBound(sourceSheets) To UBound(sourceSheets) Set wsSource = Nothing On Error Resume Next Set wsSource = ThisWorkbook.Sheets(sourceSheets(i)) On Error GoTo 0 If Not wsSource Is Nothing Then ' »ñÈ¡KÁеÄ×îºóÊý¾ÝÐУ¨ÓÃÓÚÅжÏÊý¾Ý·¶Î§£© lastRow = GetLastDataRow(wsSource, "K") ' ¸´ÖƱêÌâÐУ¨&frac12;öµÚÒ»¸öÓÐЧ&sup1;¤×÷±íÖ´ÐУ© If Not firstSourceFound And lastRow >= 1 Then For k = 0 To UBound(copyCols) colIndex = GetColumnIndex(copyCols(k)) ' ÁÐ×ÖĸתÊý×Ö wsTarget.Cells(1, k + 1).Value = wsSource.Cells(1, colIndex).Value ' ÐÞÕý£ºÊ&sup1;ÓÃÊý×ÖÁкŠNext k firstSourceFound = True targetRow = 2 ' Êý¾Ý´ÓµÚ2ÐпªÊ&frac14;дÈë End If ' &frac12;öµ±ÓÐÊý¾ÝÐÐʱ´¦Àí£¨Ìø&sup1;ýÎÞÊý¾ÝµÄ&sup1;¤×÷±í£© If lastRow > 1 Then ' ¶¯Ì¬»ñÈ¡ÐèÒª¶ÁÈ¡µÄ×î´óÁУ¨±ÜÃâÊý×éÁÐÊý&sup2;»×㣩 maxCol = 0 For k = 0 To UBound(copyCols) maxCol = Application.Max(maxCol, GetColumnIndex(copyCols(k))) Next k ' ¶ÁȡԴÊý¾Ýµ&frac12;Êý×飨º¬ËùÓÐÐèÒªµÄÁУ© dataArr = wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(lastRow, maxCol)).Value ' KÁÐÊǵÚ11ÁУ¨&sup1;̶¨£© dataTypeColumn = 11 ' ±éÀúÔ´Êý¾ÝÐУ¨´ÓµÚ2ÐпªÊ&frac14;£© For j = 2 To UBound(dataArr, 1) If UCase(Trim(dataArr(j, dataTypeColumn))) = UCase(Trim(dataType)) Then ' ¸´ÖÆÖ¸¶¨Áе&frac12;Ä¿±ê±í For k = 0 To UBound(copyCols) colIndex = GetColumnIndex(copyCols(k)) If colIndex <= UBound(dataArr, 2) Then ' È·±£ÁÐÓÐЧ wsTarget.Cells(targetRow, k + 1).Value = dataArr(j, colIndex) End If Next k targetRow = targetRow + 1 rowCount = rowCount + 1 End If Next j End If End If Next i ' Êä³öÍê³ÉÐÅÏ¢ Dim elapsed As Double elapsed = Timer - startTime If firstSourceFound Then wsTarget.Range("E1").Value = dataType & "Êý¾Ý¸´ÖÆÍê³É! ºÄʱ: " & Format(elapsed, "0.00") & "Ãë" wsTarget.Range("E1").Font.Color = RGB(0, 100, 0) wsTarget.Columns("A:Z").AutoFit ' ×Ô¶¯µ÷ÕûÁпí Else wsTarget.Range("E1").Value = "δÕÒµ&frac12;ÓÐЧԴÊý¾Ý»ò&sup1;¤×÷±í!" wsTarget.Range("E1").Font.Color = RGB(255, 0, 0) End If MsgBox "³É&sup1;¦¸´ÖÆÁË " & rowCount & " ÐÐ " & dataType & " Êý¾Ý!", vbInformation, "&sup2;Ù×÷Íê³É" Cleanup: Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True Exit Sub ErrorHandler: MsgBox "´íÎó " & Err.Number & ": " & Err.Description & vbCrLf & _ "·¢ÉúÔÚµÚ " & Erl & " ÐÐ", vbCritical, "´íÎó" Resume Cleanup End Sub ' ¸¨Öúº¯Êý£ºÁÐ×ÖĸתÁкţ¨Èç"A"¡ú1£¬"AA"¡ú27£© Function GetColumnIndex(colLetter As String) As Long GetColumnIndex = Columns(colLetter & "1").Column End Function ' ¸¨Öúº¯Êý£º»ñȡijһÁеÄ×îºóÊý¾ÝÐУ¨Èçws, "K"¡úKÁÐ×îºó·Ç¿ÕÐУ© Function GetLastDataRow(ws As Worksheet, colLetter As String) As Long With ws GetLastDataRow = .Cells(.Rows.Count, colLetter).End(xlUp).Row End With End Function ' »ñÈ¡ÁÐË÷Òý£¨Ö§³Ö¶à×ÖĸÁÐÈçAA¡¢ABµÈ£© Function GetColumnIndex(colLetter As String) As Long Dim i As Long Dim result As Long Dim currentChar As String ' УÑéÊäÈëÊÇ·ñΪ¿Õ If Len(colLetter) = 0 Then MsgBox "´íÎó£ºÁÐ×Öĸ&sup2;»ÄÜΪ¿Õ£¡", vbExclamation GetColumnIndex = 0 Exit Function End If ' תΪ´óд&sup2;¢Ð£Ñéÿ¸ö×Ö·ûÊÇ·ñΪA-Z colLetter = UCase(colLetter) For i = 1 To Len(colLetter) currentChar = Mid(colLetter, i, 1) If currentChar < "A" Or currentChar > "Z" Then MsgBox "´íÎó£ºÁÐ×Öĸ°üº¬ÎÞЧ×Ö·û '" & currentChar & "'£¨&frac12;öÖ§³ÖA-Z£©£¡", vbExclamation GetColumnIndex = 0 Exit Function End If result = result * 26 + (Asc(currentChar) - 64) ' A=65¡ú1£¬B=66¡ú2...Z=90¡ú26 Next i ' УÑéÊÇ·ñ³¬&sup1;ýExcel×î´óÁУ¨XFD=16384£© If result > 16384 Then MsgBox "´íÎó£ºÁÐ×Öĸ '" & colLetter & "' ³¬&sup1;ýExcel×î´óÁÐXFD£¨16384ÁУ©£¡", vbExclamation GetColumnIndex = 0 Exit Function End If GetColumnIndex = result End Function ' »ñȡʵ&frac14;ÊÊý¾ÝÐÐÊý£¨ÖÇÄÜ&frac14;ì&sup2;⣩ Function GetLastDataRow(ws As Worksheet, col As String) As Long Dim lastRow As Long Dim tempRow As Long ' ·&frac12;·¨1£º°´Ö¸¶¨ÁÐ&sup2;éÕÒ lastRow = ws.Cells(ws.Rows.Count, col).End(xlUp).Row ' ·&frac12;·¨2£º°´AÁÐ&sup2;éÕÒ£¨±¸Óã© tempRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row If tempRow > lastRow Then lastRow = tempRow ' ·&frac12;·¨3£º°´Õû¸ö&sup1;¤×÷±í&sup2;éÕÒ£¨×îÖÕ±¸Óã© tempRow = ws.UsedRange.Rows.Count If tempRow > lastRow Then lastRow = tempRow GetLastDataRow = lastRow End Function ' °´Å¥¶ÔÓ¦µÄºê Sub Copy_POE() CopyData "POE" End Sub Sub Copy_MD() CopyData "MD" End Sub Sub Copy_CB() CopyData "CB" End Sub
07-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值