找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1801|回复: 0
打印 上一主题 下一主题
收起左侧

lpc177x嵌入式步进电机代码

[复制链接]
跳转到指定楼层
楼主
ID:277509 发表于 2018-1-18 19:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "lpc177x_8x.h"
  2. #include "lpc177x_8x_gpio.h"
  3. #include "lpc177x_8x_pinsel.h"
  4. #include "lpc177x_8x_exti.h"
  5. #include "lpc177x_8x_nvic.h"
  6. #include "12864.h"
  7. #include "bsp.h"

  8. uint8_t start_flag=0;         /* 2???μ??úμ????ˉ°′?¥±ê????  */
  9. uint8_t stop_flag=0;         /* 2???μ??úμ?í£?1°′?¥±ê????  */

  10. void SM_delay(uint8_t m);
  11. void SM_GPIO_Init(void);
  12. void SM_Forward(uint8_t frequent);
  13. void delay(uint8_t m);
  14. void LED_GPIO_Init(void);
  15. void LED(uint8_t i);
  16. void KEY_GPIO_Init(void);
  17. void KEY_GPIO(uint32_t temp);
  18. void EINT0_IRQHandler(void);
  19. void EINT0_Init(void);
  20. void delay1(unsigned int x);
  21. void Clr_Screen(void);
  22. void LCD_Init(void);
  23. void check_busy(void);
  24. void LCD_Wcmd(uint8_t cmd);
  25. void LCD_Wdata(uint8_t data);
  26. void LCD_Write_Str(uint8_t x, uint8_t y, uint8_t *str);

  27. int KeyValue;
  28. uint32_t KEY_HIGH,temp;
  29. #define  KEY_HIGH ((LPC_GPIO0->PIN&0x3C0)>>2)                   /* 读取按键的高四位  */
  30. #define LCD_RS_1()    LPC_GPIO2->SET|= (1uL<<13)        /*     p2.13    H:Data    L:Instruction  */
  31. #define LCD_RS_0()          LPC_GPIO2->CLR|= (1uL<<13)                                          
  32. #define LCD_RW_1()          LPC_GPIO1->SET|= (1uL<<26)        /*     P1.26    H:Read    L:Write        */
  33. #define LCD_RW_0()          LPC_GPIO1->CLR|= (1uL<<26)
  34. #define LCD_E_1()     LPC_GPIO1->SET|= (1uL<<27)        /*     P1.27    H:Enable  L:Disable      */
  35. #define LCD_E_0()            LPC_GPIO1->CLR|= (1uL<<27)
  36. #define LCD_DIR_1()          LPC_GPIO1->SET|= (1uL<<29)        /*      P1.29 S  N74LV4245A总线收发器方向控制位
  37.                                                                                                                                                                                                                                                                                   H: 数据由 12864到MCU    L:  数据由 MCU到 12864  */
  38. #define LCD_DIR_0()   LPC_GPIO1->CLR|= (1uL<<29)  

  39. const uint32_t LedTable[]={0xFFFE,0xFFFD,0xFFFB,0xFFF7,              
  40.                                                                                                          0xFFEF,0xFFDF,0xFFBF,0xFF7F,
  41.                                                                                                    0xFEFF,0xFDFF,0xFBFF,0xF7FF,
  42.                                                                                                          0xFFF8,0xFFC7,0xFE3F,0xF1FF,0xFFFF};


  43. void delay1(uint32_t x) //延时 x ms
  44. {
  45.         uint32_t i,j;
  46.         for(i=x;i>0;i--)
  47.             for(j=110;j>0;j--);
  48. }

  49. void Clr_Screen(void)      //清屏函数,注意要经常调用清屏函数,即使在刚刚初始化后;
  50. {
  51.     LCD_Wcmd(0x30);   
  52.         LCD_Wcmd(0x01);
  53. }

  54. void LCD_Init(void)                  //液晶屏初始化,包括CPU的相关端口设置
  55. {                                                                                                                                         
  56.                 LPC_GPIO1->DIR  |= ((1uL<< 26)|(1uL<< 27)|(1uL<< 29)|(1uL<< 28));            /*     所有管脚配置为数字输出       */
  57.                 LPC_GPIO2->DIR  |= ((1uL<< 0 )|(1uL<< 1 )|(1uL<< 2 )|(1uL<< 3)|(1uL<< 4 )|(1uL<< 5 )|(1uL<< 6 )|(1uL<< 7 )|(1uL<< 13 ));
  58.                
  59.                 LPC_GPIO1->SET  |= ((1uL<< 26)|(1uL<< 27)|(1uL<< 29)|(1uL<< 28));            /*     所有管脚配置为数字输出       */
  60.                 LPC_GPIO2->SET  |= ((1uL<< 0 )|(1uL<< 1 )|(1uL<< 2 )|(1uL<< 3)|(1uL<< 4 )|(1uL<< 5 )|(1uL<< 6 )|(1uL<< 7 )|(1uL<< 13 ));
  61.                 LCD_DIR_0();                      /*     数据由 MCU到 12864     */
  62.         
  63.         LCD_Wcmd(0x30);        //8位MPU接口,默认基本指令集,参见12864数据手册
  64.         LCD_Wcmd(0x0C);        //开显示,关光标,不闪烁
  65.                 LCD_Wcmd(0x06); //指定在资料写入或读取时,光标的移动方向
  66.                 LCD_Wcmd(0x01);

  67.         
  68.                 /**************************************************************
  69.         基本指令集
  70.         4.显示开关设置
  71.                 LCD_Wcmd(0x08);//整体显示关        ,不改变内存内容
  72.                 LCD_Wcmd(0x0e);//整体显示开 ,游标显示开,不闪烁
  73.                 LCD_Wcmd(0x0f);//整体显示开 ,游标显示开,闪烁
  74.         5.游标或显示移位控制,注意是以第一行与第三行连成一线来看的,即分为上下两屏
  75.                 LCD_Wcmd(0x10);//游标向左移动一个字
  76.                 LCD_Wcmd(0x14);//游标向右移动一个字
  77.                 LCD_Wcmd(0x18);//游标不动,屏幕整体左移一个字
  78.                 LCD_Wcmd(0x1c);//游标不动,屏幕整体右移一个字
  79.         6.功能设定
  80.                 LCD_Wcmd(0x34);//RE=1进入扩充指令集

  81.         扩充指令集
  82.         2.卷动位置
  83.                 LCD_Wcmd(0x03);//允许垂直滚动地址
  84.         3.反白显示
  85.                 LCD_Wcmd(0x04);//0X04第一行和第三行反白显示
  86.                 LCD_Wcmd(0x05);//0X05第二行和第四行反白显示
  87.         4.睡眠模式
  88.                 LCD_Wcmd(0x08);//进入睡眠模式
  89.                 LCD_Wcmd(0x0c);//退出睡眠模式
  90.         5.绘图模式
  91.                 LCD_Wcmd(0x34);//关闭绘图模式
  92.                 LCD_Wcmd(0x36);//打开绘图模式
  93. ***********************************************************************/
  94. }
  95. void SM_Backword(uint8_t frequent)
  96. {LPC_GPIO1->SET|=((1uL<<5)|(1uL<<3)|(1uL<<2));
  97.                         LPC_GPIO1->CLR|=(1uL<<6);
  98.                         
  99.                         SM_delay(frequent);
  100.                         LPC_GPIO1->SET|=((1uL<<5)|(1uL<<3)|(1uL<<6));
  101.                         LPC_GPIO1->CLR|=(1uL<<2);
  102.                         
  103.                         SM_delay(frequent);
  104.         
  105.                         LPC_GPIO1->SET|=((1uL<<5)|(1uL<<2)|(1uL<<6));
  106.                         LPC_GPIO1->CLR|=(1uL<<3);
  107.                         SM_delay(frequent);
  108.         
  109.                         LPC_GPIO1->SET|=((1uL<<3)|(1uL<<2)|(1uL<<6));
  110.                         LPC_GPIO1->CLR|=(1uL<<5);
  111.                         SM_delay(frequent);         
  112. }

  113. void check_busy(void)                       //检测忙状态
  114. {
  115.                 LPC_GPIO2->SET |= (1uL<< 7);           //DB7状态位置1
  116.                 delay1(1);
  117.                 LCD_DIR_1();                           // SN74LVC4245方向设置为主芯片接收
  118.                 LCD_RS_0();
  119.                 LCD_RW_1();                           //读忙状态
  120.                 delay1(1);
  121.                 LPC_GPIO2->DIR  &= ((0x0<< 0 )&(0x0<< 1 )& (0x0<< 2 )&(0x0<< 3)&(0x0<< 4)& (0x0<< 5)&(0x0<< 6)&(0x0<<7));   //数据口设为输入           
  122.                 LCD_E_1();
  123.                 while((LPC_GPIO2->PIN&0x00000080)==0x00000080);     //一直等待,直到DB7状态位为0;
  124.                 LCD_E_0();
  125.                 LPC_GPIO1->DIR  |= ((1uL<< 26)|(1uL<< 27)|(1uL<< 29)|(1uL<< 28));            /*     所有管脚配置为数字输出       */
  126.                 LPC_GPIO2->DIR  |= ((1uL<< 0 )|(1uL<< 1 )|(1uL<< 2 )|(1uL<< 3)|(1uL<< 4 )|(1uL<< 5 )|(1uL<< 6 )|(1uL<< 7 )|(1uL<< 13 ));
  127.                 LCD_DIR_0();      
  128. }

  129. void LCD_Wcmd(uint8_t cmd)           //写命令
  130. {               
  131.                 check_busy();
  132.                 delay1(1);
  133.                 LCD_DIR_0();
  134.     LCD_RS_0();               
  135.     LCD_RW_0();             //写命令
  136.                 delay1(1);
  137.                
  138.     LCD_E_1();
  139.                 LPC_GPIO2->MASK=~0x000000FF;
  140.     LPC_GPIO2->PIN=cmd;           //命令写到 P2_0~P2_7
  141.                 LPC_GPIO2->MASK=0;
  142.                 delay1(50);
  143.     LCD_E_0();
  144.                 delay1(50);            //使能的下降沿将信号传给12864
  145. }

  146. void LCD_Wdata(uint8_t data)   //写数据,时序参考PDF
  147. {
  148.                 check_busy();
  149.                 LCD_DIR_0();
  150.         LCD_RS_1();
  151.                 LCD_RW_0();              //写数据
  152.                
  153.     LCD_E_1();
  154.                 LPC_GPIO2->MASK=~0x000000FF;
  155.     LPC_GPIO2->PIN=data;           //数据写到 P2_0~P2_7
  156.                 LPC_GPIO2->MASK=0;
  157.                 delay1(50);
  158.     LCD_E_0();
  159.                 delay1(50);            //使能的下降沿将信号传给12864
  160. }

  161. //注意:中文显示时空格符或数字ASCII码必需两个一起用,标点符号注意中英文
  162. void LCD_Write_Str(uint8_t x, uint8_t y, uint8_t *str) //向某行某列写字符串
  163. {
  164.     uint8_t addr;
  165.     if(1==x){addr=0x80;}
  166.     if(2==x){addr=0x90;}
  167.     if(3==x){addr=0x88;}
  168.     if(4==x){addr=0x98;}
  169.     addr=addr+y;
  170.                 delay1(1);
  171.     LCD_Wcmd(addr);
  172.     while(*str)
  173.     {
  174.         LCD_Wdata(*str);        
  175.                         delay1(35);        
  176.                         str++;
  177.     }
  178. }

  179. void delay(uint8_t m)     //1ms
  180. {
  181.         uint32_t i,j;
  182.         for(i=0;i<100*m;i++)
  183.                 for(j=0;j<200;j++);
  184. }

  185. /*   LED初始化,管脚配置为GPIO功能、数字输出口、高电平    */
  186. void LED_GPIO_Init(void)
  187. {
  188.         LPC_GPIO0->DIR|=((1uL<<27)|(1uL<<17)|(1uL<<18)|(1uL<<19)|(1uL<<28));
  189.         LPC_GPIO2->DIR|=(1uL<<25);
  190.         LPC_GPIO4->DIR|=((1uL<<26)|(1uL<<27)|(1uL<<30)|(1uL<<31)|(1uL<<22)|(1uL<<21));
  191.         
  192.         LPC_GPIO0->SET|=((1uL<<27)|(1uL<<17)|(1uL<<18)|(1uL<<19)|(1uL<<28));
  193.         LPC_GPIO2->SET|=(1uL<<25);
  194.         LPC_GPIO4->SET|=((1uL<<26)|(1uL<<27)|(1uL<<30)|(1uL<<31)|(1uL<<22)|(1uL<<21));
  195. }

  196. /*   LED点亮     */
  197. void LED(uint8_t i)
  198. {
  199.                 LPC_GPIO0->MASK&=~0x08000000;                       //P0_27;屏蔽P0中除P0_27的其他管脚
  200.                 LPC_GPIO0->PIN=((LedTable[i]&0x00000001)<<27);      //  取出LedTable[i]中的第一位赋给P0_27
  201.                 LPC_GPIO0->MASK=0;                                  //使的P0能正常访问
  202.         
  203.                 LPC_GPIO4->MASK=~0x04000000;                        //P0.26  同上
  204.                 LPC_GPIO4->PIN=((LedTable[i]&0x00000002)<<25);
  205.                 LPC_GPIO4->MASK=0;
  206.                
  207.                 LPC_GPIO4->MASK=~0x08000000;                        //P4.27
  208.                 LPC_GPIO4->PIN=((LedTable[i]&0x00000004)<<25);
  209.                 LPC_GPIO4->MASK=0;
  210.                
  211.                 LPC_GPIO4->MASK=~0x40000000;                        //P4.30
  212.                 LPC_GPIO4->PIN=((LedTable[i]&0x00000008)<<27);
  213.                 LPC_GPIO4->MASK=0;
  214.                
  215.                 LPC_GPIO4->MASK=~0x80000000;                        //P4.31
  216.                 LPC_GPIO4->PIN=((LedTable[i]&0x00000010)<<27);
  217.                 LPC_GPIO4->MASK=0;
  218.                
  219.                 LPC_GPIO0->MASK=~0x00020000;                        //P0.17
  220.                 LPC_GPIO0->PIN=((LedTable[i]&0x00000020)<<12);
  221.                 LPC_GPIO0->MASK=0;
  222.                
  223.                 LPC_GPIO0->MASK=~0x00040000;                        //P0.18
  224.                 LPC_GPIO0->PIN=((LedTable[i]&0x00000040)<<12);
  225.                 LPC_GPIO0->MASK=0;
  226.                
  227.                 LPC_GPIO0->MASK=~0x00080000;                        //P0.19
  228.                 LPC_GPIO0->PIN=((LedTable[i]&0x00000080)<<12);
  229.                 LPC_GPIO0->MASK=0;
  230.                
  231.                 LPC_GPIO2->MASK=~0x02000000;                        //P2.25
  232.                 LPC_GPIO2->PIN=((LedTable[i]&0x00000100)<<17);
  233.                 LPC_GPIO2->MASK=0;
  234.                
  235.                 LPC_GPIO4->MASK=~0x00400000;                        //P4.22
  236.                 LPC_GPIO4->PIN=((LedTable[i]&0x00000200)<<13);
  237.                 LPC_GPIO4->MASK=0;
  238.                
  239.                 LPC_GPIO4->MASK=~0x00200000;                       //P4.21
  240.                 LPC_GPIO4->PIN=((LedTable[i]&0x00000400)<<11);
  241.                 LPC_GPIO4->MASK=0;
  242.                
  243.                 LPC_GPIO0->MASK=~0x10000000;                       //P0.28
  244.                 LPC_GPIO0->PIN=((LedTable[i]&0x00000800)<<17);
  245.                 LPC_GPIO0->MASK=0;
  246. }

  247. void KEY_GPIO_Init()
  248. {
  249.                 LPC_GPIO0->DIR  &= ((~(1uL<< 6 ))&(~(1uL<< 7 ))& (~(1uL<< 8 ))&(~(1uL<< 9)));     /*    P0.6-P0.9 管脚配置为数字输入   */
  250.                 LPC_GPIO0->MASK  &= ((~(1uL<< 6 ))&(~(1uL<< 7 ))& (~(1uL<< 8 ))&(~(1uL<< 9)));
  251.         
  252.                 LPC_GPIO0->DIR  |= ((1uL<< 2)|(1uL<< 3)|(1uL<< 4)|(1uL<<5));                      /*    P0.2-P0.5 管脚配置为数字输出  0 */
  253.                 LPC_GPIO0->MASK &= ((~(1uL<< 2 ))&(~(1uL<< 3 ))& (~(1uL<< 4 ))&(~(1uL<< 5)));  
  254.                 LPC_GPIO0->CLR  |= ((1uL<< 2)|(1uL<< 3)|(1uL<< 4)|(1uL<<5));
  255. }

  256. void KEY_GPIO(uint32_t temp)
  257. {
  258.                 LPC_GPIO0->DIR  &= ((~(1uL<< 6 ))&(~(1uL<< 7 ))& (~(1uL<< 8 ))&(~(1uL<< 9)));     /*    P0.6-P0.9 管脚配置为数字输入  */
  259.                 LPC_GPIO0->MASK &= ((~(1uL<< 6 ))&(~(1uL<< 7 ))& (~(1uL<< 8 ))&(~(1uL<< 9)));
  260.         
  261.                 LPC_GPIO0->DIR  |= ((1uL<< 2)|(1uL<< 3)|(1uL<< 4)|(1uL<<5));                  /*    P0.2-P0.5 管脚配置为数字输出1       */
  262.                 LPC_GPIO0->MASK &= ((~(1uL<< 2 ))&(~(1uL<< 3 ))& (~(1uL<< 4 ))&(~(1uL<< 5)));
  263.                 LPC_GPIO0->SET  |= ((1uL<< 2)|(1uL<< 3)|(1uL<< 4)|(1uL<<5));
  264.                 LPC_GPIO0->CLR  |= (temp<<2);
  265. }

  266. void EINT0_IRQHandler(void)
  267. {
  268.                 LPC_SC->EXTINT |= (1uL <<0);                //清中断标志
  269.         NVIC_DisableIRQ(EINT0_IRQn);                                                   //关中断

  270.                 KEY_GPIO(0x01);                                                                                                   //第1列初始化为
  271.                 if(KEY_HIGH!=0xf0)                       //读取按键是否按下
  272.                 {
  273.                         delay(10);                             //延时10ms进行消抖
  274.                         if(KEY_HIGH!=0xf0)                                                                                 //再次检测按键是否按下
  275.                         {
  276.                                 switch(KEY_HIGH)
  277.                                 {
  278.                                         case(0xe0): KeyValue=1;break;
  279.                                         case(0xd0): KeyValue=2;break;
  280.                                         case(0xb0): KeyValue=3;break;
  281.                                         case(0x70): KeyValue=4;break;
  282.                                         default:   break;
  283.                                 }
  284.                                 while(KEY_HIGH!=0xf0);              //按键松手检测
  285.                         }
  286.                 }

  287.                 KEY_GPIO(0x02);                                                                                          //第2列初始化为
  288.                 if(KEY_HIGH!=0xf0)                       //读取按键是否按下
  289.                 {
  290.                         delay(10);                             //延时10ms进行消抖
  291.                         if(KEY_HIGH!=0xf0)                                                                                 //再次检测按键是否按下
  292.                         {
  293.                                 switch(KEY_HIGH)
  294.                                 {
  295.                                         case(0xe0): KeyValue=5;break;
  296.                                         case(0xd0): KeyValue=6;break;
  297.                                         case(0xb0): KeyValue=7;break;
  298.                                         case(0x70): KeyValue=8;break;
  299.                                         default:   break;
  300.                                 }
  301.                                 while(KEY_HIGH!=0xf0);              //按键松手检测
  302.                         }
  303.                 }
  304.                
  305.                 KEY_GPIO(0x04);                                                                    //第3列初始化为
  306.                 if(KEY_HIGH!=0xf0)                       //读取按键是否按下
  307.                 {
  308.                         delay(10);                             //延时10ms进行消抖
  309.                         if(KEY_HIGH!=0xf0)                                                                                 //再次检测按键是否按下
  310.                         {
  311.                                 switch(KEY_HIGH)
  312.                                 {
  313.                                         case(0xe0): KeyValue=9;break;
  314.                                         case(0xd0): KeyValue=10;break;
  315.                                         case(0xb0): KeyValue=11;break;
  316.                                         case(0x70): KeyValue=12;break;
  317.                                         default:   break;
  318.                                 }
  319.                                 while(KEY_HIGH!=0xf0);              //按键松手检测
  320.                         }
  321.                 }
  322.                
  323.                 KEY_GPIO(0x08);                                                                                          //第4列初始化为
  324.                 if(KEY_HIGH!=0xf0)                       //读取按键是否按下
  325.                 {
  326.                         delay(10);                             //延时10ms进行消抖
  327.                         if(KEY_HIGH!=0xf0)                                                                                 //再次检测按键是否按下
  328.                         {
  329.                                 switch(KEY_HIGH)
  330.                                 {
  331.                                         case(0xe0): KeyValue=13;break;
  332.                                         case(0xd0): KeyValue=14;break;
  333.                                         case(0xb0): KeyValue=15;break;
  334.                                         case(0x70): KeyValue=16;break;
  335.                                         default:   break;
  336.                                 }
  337.                                 while(KEY_HIGH!=0xf0);              //按键松手检测
  338.                         }
  339.                 }
  340.                
  341.                  
  342.                
  343.                 if(9==KeyValue) {Clr_Screen();LED(8);LCD_Write_Str(1,0," 停止 ");}
  344.                 if(10==KeyValue) {Clr_Screen();LED(9);LCD_Write_Str(1,0," 10 ");}
  345.                 if(11==KeyValue) {Clr_Screen();LED(10);LCD_Write_Str(1,0," 11 ");}
  346.                 if(12==KeyValue) {Clr_Screen();LED(11);LCD_Write_Str(1,0," 12 ");}
  347.                 if(13==KeyValue) {Clr_Screen();LED(12);LCD_Write_Str(1,0," 13 ");}
  348.                 if(14==KeyValue) {Clr_Screen();LED(13);LCD_Write_Str(1,0," 14 ");}
  349.                 if(15==KeyValue) {Clr_Screen();LED(14);LCD_Write_Str(1,0," 15");}
  350.                 if(16==KeyValue) {Clr_Screen();LED(15);LCD_Write_Str(1,0," 16 ");}
  351.                 KEY_GPIO_Init();
  352.                 NVIC_EnableIRQ(EINT0_IRQn);               
  353. }



  354. void EINT0_Init(void)
  355. {        
  356.         LPC_GPIO2->DIR  &= ~(1uL<< 10 );                          // 配置P2.10 引脚为输入
  357.         LPC_IOCON->P2_10 = 1;                   // 配置P2.10 引脚为EINT0功能
  358.         LPC_SC->EXTINT = 0x0;                                                                                // 中断标志位
  359.         LPC_SC->EXTMODE |= (1 << 0);            // 选择边沿触发方式
  360.         LPC_SC->EXTPOLAR &= ~(1<<0);                                          // 选择下降沿触发方式
  361.         NVIC_SetPriority(EINT0_IRQn, 1);                                // 设置中断优先级
  362.         NVIC_EnableIRQ(EINT0_IRQn);                                                        // 使能EINT0中断
  363. }
  364. /*********************************************************************************************************
  365. ** Function name:            SM_delay
  366. ** Descriptions:            ?óê±oˉêy
  367. ** input parameters:   m:   ?μ??′ó£??óê±ê±????3¤
  368. ** output parameters:   ?T
  369. ** Returned value:      ?T
  370. *********************************************************************************************************/
  371. void SM_delay(uint8_t m)     
  372. {
  373.         uint32_t i,j;
  374.         for(i=0;i<100*m;i++)
  375.                 for(j=0;j<100;j++);
  376. }

  377. /********************************************************************************  
  378. ** Descriptions£o                                SM_GPIO_Init  
  379. ** Descriptions:              2???μ??ú3?ê??ˉ
  380. ** Returned value £o    None
  381. *********************************************************************************/
  382. void SM_GPIO_Init(void)
  383. {
  384.                 LPC_GPIO1->DIR|=((1uL<<2)|(1uL<<3)|(1uL<<5)|(1uL<<6));  /*   2???μ??ú?à1?òy??3?ê??ˉ£?1ü???????aGPIO1|?ü?¢êy×?ê?3??ú    */
  385. }

  386. /********************************************************************************  
  387. ** Descriptions£o                                SM_Forward  
  388. ** Descriptions:              2???μ??ú?y×a£???±e??P1.5?¢P1.3?¢P1.4?¢P1.6?3?μ0111?¢1011?¢1101?¢1110;
  389. ** Returned value £o    None
  390. *********************************************************************************/
  391. void SM_Forward(uint8_t frequent)
  392. {
  393.                         LPC_GPIO1->SET|=((1uL<<3)|(1uL<<2)|(1uL<<6));
  394.                         LPC_GPIO1->CLR|=(1uL<<5);
  395.                         SM_delay(frequent);
  396.                         
  397.                         LPC_GPIO1->SET|=((1uL<<5)|(1uL<<2)|(1uL<<6));
  398.                         LPC_GPIO1->CLR|=(1uL<<3);
  399.                         SM_delay(frequent);
  400.         
  401.                         LPC_GPIO1->SET|=((1uL<<5)|(1uL<<3)|(1uL<<6));
  402.                         LPC_GPIO1->CLR|=(1uL<<2);
  403.                         SM_delay(frequent);
  404.         
  405.                         LPC_GPIO1->SET|=((1uL<<5)|(1uL<<3)|(1uL<<2));
  406.                         LPC_GPIO1->CLR|=(1uL<<6);
  407.                         SM_delay(frequent);         
  408. }

  409. int main(void)
  410. {LED_GPIO_Init();
  411.                 KEY_GPIO_Init ();
  412.     EINT0_Init();
  413.           LCD_Init();
  414.                 SM_GPIO_Init();
  415.                 while (1)
  416.                 {while(1==KeyValue) {Clr_Screen();LCD_Write_Str(1,0," fan");LCD_Write_Str(2,0,"1 ");SM_Forward(50);}
  417.                         while(5==KeyValue) {Clr_Screen();LCD_Write_Str(1,0," zheng ");LCD_Write_Str(2,0,"1 ");SM_Backword(50);}  
  418. while(2==KeyValue) {Clr_Screen();LED(1);LCD_Write_Str(1,0," fan ");LCD_Write_Str(2,0,"2 ");SM_Forward(40);}
  419.                 while(3==KeyValue) {Clr_Screen();LED(2);LCD_Write_Str(1,0," fan ");LCD_Write_Str(2,0,"3 ");SM_Forward(30);}
  420.                 while(4==KeyValue) {Clr_Screen();LED(3);LCD_Write_Str(1,0," fan ");LCD_Write_Str(2,0,"4 ");SM_Forward(10);}
  421.                
  422.                 while(6==KeyValue) {Clr_Screen();LED(5);LCD_Write_Str(1,0," zheng ");LCD_Write_Str(2,0,"2 ");SM_Backword(40);}
  423.                 while(7==KeyValue) {Clr_Screen();LED(6);LCD_Write_Str(1,0," zheng ");LCD_Write_Str(2,0,"3");SM_Backword(30);}
  424.                 while(8==KeyValue) {Clr_Screen();LED(7);LCD_Write_Str(1,0," zheng ");LCD_Write_Str(2,0,"4 ");SM_Backword(10);}
  425.                 }
  426. }

复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表