⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 ADC Demo Source for LPC214X. 这是214X的ADC的应用例程
💻 LST
📖 第 1 页 / 共 5 页
字号:
  264   1      }
  265          
  266          /*
  267          *********************************************************************************************************
  268          * 函数名称:SSP_SendData()
  269          * 函数功能:SSP接口向SPI总线发送数据。
  270          * 入口参数:data        待发送的数据
  271          * 出口参数:返回值为读取的数据
  272          *********************************************************************************************************
  273          */
  274          
  275          uint8 SSP_SendData(uint8 data)
  276          {  
  277   1          SSPDR = data;
  278   1          while( (SSPSR & 0x01) == 0 );       // 等待TFE置位,即发送FIFO空   
  279   1          return(SSPDR);
  280   1      }
  281          
  282          uint8 MSSP_SendData(uint8 data)
  283          {
  284   1      unsigned char i;
  285   1      //  _delay_loop_(1);
  286   1        for (i = 0; i < 8; i ++) {
  287   2      //    _delay_loop_(1);
  288   2          IOCLR0 = (1 << SCK1);
  289   2      //    _delay_loop_(1);
  290   2          if (data & 0x80) {//MSB最高位为1时
  291   3            IOSET0 = (1 << MOSI1);
  292   3          }
  293   2          else {
  294   3            IOCLR0 = (1 << MOSI1);
  295   3          }
  296   2      //    _delay_loop_(1);
  297   2          data <<= 1;
  298   2          IOSET0 = (1 << SCK1);
  299   2      //    _delay_loop_(1);
  300   2        } 
  301   1        return 0;
  302   1      }
  303          
  304          
  305          
  306          void SystemInit(void) {
  307   1        PINSEL0 = 0x00000000;     // 设置管脚连接GPIO
  308   1        PINSEL1 = 0x00000000;     // 设置管脚连接GPIO
  309   1        IODIR0  = 0x00000000;     // 设置P0口为输入
  310   1        IODIR1  = 0x00000000;     // 设置P1口为输入
  311   1      }
  312          
  313          void KeyInit(void) {
  314   1        IODIR0 &= ~((1 << KEY1) | // 设置KEY1为输入   
  315   1                    (1 << KEY3) | // 设置KEY3为输入  
  316   1                    (1 << KEY5) | // 设置KEY5为输入  
  317   1                    (1 << KEY6)); // 设置KEY6为输入  
  318   1      }
  319          
  320          void LedInit(void) {
  321   1        IODIR1 |= (1 << LED1) |   // 设置LED1为输出   
ARM COMPILER V2.42,  main                                                                  19/01/06  08:10:09  PAGE 6   

  322   1                  (1 << LED2) |   // 设置LED2为输出  
  323   1                  (1 << LED3) |   // 设置LED3为输出  
  324   1                  (1 << LED4) |   // 设置LED4为输出  
  325   1                  (1 << LED5) |   // 设置LED5为输出  
  326   1                  (1 << LED6) |   // 设置LED6为输出  
  327   1                  (1 << LED7) |   // 设置LED7为输出  
  328   1                  (1 << LED8);    // 设置LED8为输出  
  329   1        IOSET1  = (1 << LED1) |   // 关闭LED1
  330   1                  (1 << LED2) |   // 关闭LED2
  331   1                  (1 << LED3) |   // 关闭LED3
  332   1                  (1 << LED4) |   // 关闭LED4
  333   1                  (1 << LED5) |   // 关闭LED5
  334   1                  (1 << LED6) |   // 关闭LED6
  335   1                  (1 << LED7) |   // 关闭LED7
  336   1                  (1 << LED8);    // 关闭LED8
  337   1      }
  338          
  339          void LednumInit(void) {
  340   1        MSPI_Init();
  341   1      }
  342          
  343          void  MSPI_Init(void) {  
  344   1        PINSEL0 |= ((P0_4_SCK0 << P0_4_PINSEL) | (P0_5_MISO0 << P0_5_PINSEL) | (P0_6_MOSI0 << P0_6_PINSEL));
  345   1        IODIR0  |= (1 << RCLK);       // 设置RCLK控制口为输出 
  346   1        IOCLR0   = (1 << RCLK);
  347   1        S0SPCCR = 0x52;                   // 设置SPI时钟分频
  348   1        S0SPCR  = (1 << CPHA) |               // CPHA = 1, 数据在SCK 的第2个时钟沿采样
  349   1                  (1 << CPOL) |               // CPOL = 1, SCK 为低有效
  350   1                  (1 << MSTR) |               // MSTR = 1, SPI 处于主模式
  351   1                  (0 << LSBF) |               // LSBF = 0, SPI 数据传输MSB (位7)在先
  352   1                  (0 << SPIE);                // SPIE = 0, SPI 中断被禁止
  353   1      }
  354          
  355          unsigned char MSPI_SendData(unsigned char data) {
  356   1        S0SPDR = data;                        //发送数据(相当于51的SBUF = DATA)
  357   1        while(!(S0SPSR & (1 << SPIF)));       // 等待SPIF置位,即等待数据发送完毕
  358   1        return(S0SPDR);
  359   1      }
  360          
  361          void LedDisplay(unsigned char data) {
  362   1        MSPI_SendData(LedTab[data & 0x0f]);
  363   1        IOSET0 = (1 << RCLK);
  364   1        IOCLR0 = (1 << RCLK);
  365   1      }
  366          
  367          
  368          void BeepInit(void) {
  369   1      //  IODIR0 |= (1 << BEEP);// 设置BEEP控制口为输出   
  370   1        IO0SET  = (1 << BEEP);//关闭BEEP
  371   1      }
  372          
  373          void MainTask (void) __task {
  374   1        SystemInit();
  375   1        Key_Task = os_tsk_create (KeyTask, 100);//创建KeyTask任务及级别
  376   1        Led_Task = os_tsk_create (LedTask, 100);//创建LedTask任务及级别
  377   1        Lednum_Task = os_tsk_create (LednumTask, 100);//创建LednumTask任务及级别
  378   1        Beep_Task = os_tsk_create (BeepTask, 100);//创建BeepTask任务及级别
  379   1        Lcd_Task = os_tsk_create (LcdTask, 100);//创建LcdTask任务及级别
  380   1        Adc_Task = os_tsk_create (AdcTask, 100);//创建AdcTask任务及级别
  381   1        os_tsk_delete_self ();//MainTask自毁
  382   1      }
  383          
  384          void LcdTask (void) __task {
  385   1        LcdInit();
  386   1        for (;;) {
  387   2          LcdDisplayBuffers();// 将缓冲区的内容操作硬件
ARM COMPILER V2.42,  main                                                                  19/01/06  08:10:09  PAGE 7   

  388   2        }
  389   1      }
  390          void KeyTask (void) __task {
  391   1        KeyInit();
  392   1        for (;;) {
  393   2          if ((!(IOPIN0 & (1 << KEY1))) && (IOPIN1 & (1 << LED1))) {//有KEY1键压下且LED未亮
  394   3            os_evt_set (0x0001, Led_Task);//
  395   3            os_evt_set (0x0001, Adc_Task);//
  396   3      //  SetLcdDisplayPos(0, 0);//汉字定位到上行左端
  397   3      //  LcdDisplayString("汉字显示演示1212");
  398   3          }
  399   2          else if ((IOPIN0 & (1 << KEY1)) && (!(IOPIN1 & (1 << LED1)))) {//无KEY1键压下且LED在亮
  400   3            os_evt_set (0x8001, Led_Task);//
  401   3      //  SetLcdDisplayPos(0, 0);//汉字定位到上行左端
  402   3      //  LcdDisplayString("汉字显示演示    ");
  403   3          }
  404   2          if ((!(IOPIN0 & (1 << KEY3))) && (IOPIN1 & (1 << LED3))) {//有KEY3键压下且LED未亮
  405   3            os_evt_set (0x0003, Led_Task);//
  406   3            os_evt_set (0x0003, Adc_Task);//
  407   3      //  SetLcdDisplayPos(1, 0);//汉字定位到上行左端
  408   3      //  LcdDisplayString("汉字显示演示3434");
  409   3          }
  410   2          else if ((IOPIN0 & (1 << KEY3)) && (!(IOPIN1 & (1 << LED3)))){//无KEY3键压下且LED在亮
  411   3            os_evt_set (0x8003, Led_Task);//
  412   3      //  SetLcdDisplayPos(1, 0);//汉字定位到上行左端
  413   3      //  LcdDisplayString("汉字显示演示    ");
  414   3          }
  415   2          if ((!(IOPIN0 & (1 << KEY5))) && (IOPIN1 & (1 << LED5))) {//有KEY5键压下且LED未亮
  416   3            os_evt_set (0x0005, Led_Task);//
  417   3      //  SetLcdDisplayPos(2, 0);//汉字定位到上行左端
  418   3      //  LcdDisplayString("汉字显示演示5656");
  419   3          }
  420   2          else if ((IOPIN0 & (1 << KEY5)) && (!(IOPIN1 & (1 << LED5)))){//无KEY5键压下且LED在亮
  421   3            os_evt_set (0x8005, Led_Task);//
  422   3      //  SetLcdDisplayPos(2, 0);//汉字定位到上行左端
  423   3      //  LcdDisplayString("汉字显示演示    ");
  424   3          }
  425   2          if ((!(IOPIN0 & (1 << KEY6))) && (IOPIN1 & (1 << LED6))) {//有KEY6键压下且LED未亮
  426   3            os_evt_set (0x0006, Led_Task);//
  427   3      //  SetLcdDisplayPos(3, 0);//汉字定位到上行左端
  428   3      //  LcdDisplayString("汉字显示演示7878");
  429   3          }
  430   2          else if ((IOPIN0 & (1 << KEY6)) && (!(IOPIN1 & (1 << LED6)))){//无KEY6键压下且LED在亮
  431   3            os_evt_set (0x8006, Led_Task);//
  432   3      //  SetLcdDisplayPos(3, 0);//汉字定位到上行左端
  433   3      //  LcdDisplayString("汉字显示演示    ");
  434   3          }
  435   2          os_dly_wait (2);//延时20mS
  436   2        }
  437   1      }
  438          
  439          void LedTask (void) __task {
  440   1      OS_RESULT result;
  441   1      unsigned int i; 
  442   1        LedInit();
  443   1        for (;;) {
  444   2          result = os_evt_wait_or(0xffff, 0xffff);//等待LedTask任务事件发生
  445   2          if(result == OS_R_EVT) {
  446   3            i = os_evt_get();
  447   3            switch(i) {
  448   4              case 0x0001:  IOCLR1 = (1 << LED1);//点亮LED1
  449   4                            break;
  450   4              case 0x0002:  IOCLR1 = (1 << LED2);//点亮LED2
  451   4                            break;
  452   4              case 0x0003:  IOCLR1 = (1 << LED3);//点亮LED3
  453   4                            break;
ARM COMPILER V2.42,  main                                                                  19/01/06  08:10:09  PAGE 8   

  454   4              case 0x0004:  IOCLR1 = (1 << LED4);//点亮LED4
  455   4                            break;
  456   4              case 0x0005:  IOCLR1 = (1 << LED5);//点亮LED5
  457   4                            break;
  458   4              case 0x0006:  IOCLR1 = (1 << LED6);//点亮LED6
  459   4                            break;
  460   4      
  461   4              case 0x8001:  IOSET1 = (1 << LED1);//关掉LED1
  462   4                            break;
  463   4              case 0x8002:  IOSET1 = (1 << LED2);//关掉LED2
  464   4                            break;
  465   4              case 0x8003:  IOSET1 = (1 << LED3);//关掉LED3
  466   4                            break;
  467   4              case 0x8004:  IOSET1 = (1 << LED4);//关掉LED4
  468   4                            break;
  469   4              case 0x8005:  IOSET1 = (1 << LED5);//关掉LED5
  470   4                            break;
  471   4              case 0x8006:  IOSET1 = (1 << LED6);//关掉LED6
  472   4                            break;
  473   4            }
  474   3            os_evt_set (i, Beep_Task);//开关BEEP
  475   3            os_evt_set (i, Lednum_Task);//开关Lednum
  476   3          }
  477   2          os_dly_wait (2);//延时20mS
  478   2        }
  479   1      }
  480          
  481          void LednumTask (void) __task {
  482   1      OS_RESULT result;
  483   1      unsigned int i; 
  484   1        LednumInit();
  485   1        for (;;) {
  486   2          result = os_evt_wait_or(0xffff, 0xffff);//等待LedTask任务事件发生
  487   2          if(result == OS_R_EVT) {
  488   3            i = os_evt_get();
  489   3            switch(i) {
  490   4              case 0x0001:  LedDisplay(1);//显示数码'1'
  491   4                            break;
  492   4              case 0x0002:  LedDisplay(2);//显示数码'2'
  493   4                            break;
  494   4              case 0x0003:  LedDisplay(3);//显示数码'3'
  495   4                            break;
  496   4              case 0x0004:  LedDisplay(4);//显示数码'4'
  497   4                            break;
  498   4              case 0x0005:  LedDisplay(5);//显示数码'5'
  499   4                            break;
  500   4              case 0x0006:  LedDisplay(6);//显示数码'6'
  501   4                            break;
  502   4            }
  503   3          }
  504   2          os_dly_wait (2);//延时20mS
  505   2        }
  506   1      }
  507          
  508          
  509          void BeepTask (void) __task {
  510   1      OS_RESULT result;
  511   1      unsigned int i; 
  512   1        BeepInit();
  513   1        for (;;) {
  514   2          result = os_evt_wait_or(0xffff, 0xffff);//等待BeepTask任务事件发生
  515   2          if(result == OS_R_EVT) {
  516   3            i = os_evt_get();
  517   3            switch(i) {
  518   4              case 0x0001:  
  519   4              case 0x0002:  
ARM COMPILER V2.42,  main                                                                  19/01/06  08:10:09  PAGE 9   

  520   4              case 0x0003:  
  521   4              case 0x0004:  
  522   4              case 0x0005:  
  523   4              case 0x0006:  
  524   4                            IOCLR0 = (1 << BEEP);//打开BEEP
  525   4                            os_dly_wait (50);//延时500mS
  526   4                            IOSET0 = (1 << BEEP);//关闭BEEP
  527   4                            break;
  528   4              case 0x8001:  
  529   4              case 0x8002:  
  530   4              case 0x8003:  
  531   4              case 0x8004:  
  532   4              case 0x8005:  
  533   4              case 0x8006:  
  534   4                            IOSET0 = (1 << BEEP);//关闭BEEP
  535   4                            break;
  536   4            }
  537   3          }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -