打印

LM3S811板子设计四足机器人传感器篇——(二)

[复制链接]
6689|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大家都知道机器人的设计跟传感器是分不开的,自己以前也能过一些传感器,都是一些简单的。先跟大家分享几个比较常见的传感器。
       1、温湿传感器气DHT11,人体感应模块的热释电红外感应传感器HC-SR501,超声波测距,红外对管等都是简单的传感器,自己已经能够,上手比较快。主要是完成机器人的壁障的作用。
       2、之后在补充飞思卡尔的MMA7455三轴加速度传感器,还想在加个触摸传感器用于腿部舵机的运动,想是跟她握手是的。烟雾传感器是想让机器人运用在一些危险地火灾救援上,可以发现生命的存在。
       3、对于在无线控制上还没有想好到底是用NRF2401还是Zigbee系列的无线传感器。如果时间充足的话就选Zigbee这个无线传感器。它传输数据不仅距离远而且丢包现象少。如果没有时间的话那只有用NRF2401了。
        4、还想在加个摄像头,来观察周围的环境情况,这个到最后了,现在没有考虑。等到大部分功能能好后在加这个摄像头。其实还有很多其他的传感器,例如:电子罗盘、磁场传感器等都在本机器人控制上完善好以后在考虑一个一个都加上。这是后期的补充和扩展了。
对于MMA7455的三轴的传感器自己已经能好,但是没有在机器人的用过。它用来调节机器人的平衡度和稳定性。在不平稳的路面上行走的时候通过测量倾角可以调节腿部的舵机的运行来达到平衡的效果。但是这个需要一段时间。在加上最近要考试,事情还满多的,进度可能会慢点。不废话了传几个PP
先跟大家传个DHT11的程序,在这程序上我加了ucosii,大家都指教啊。
#include<includes.h>
#include"delay.h"
#define TASK_START_STK_SIZE   256
#define TASK_DTH11_STK_SIZE   256
#define Task_Start_Prio       5
#define Task_DTH11_Prio       6
#define DATA_PERIPH      SYSCTL_PERIPH_GPIOE
#define DATA_BASE        GPIO_PORTE_BASE
#define DATA_PIN         GPIO_PIN_0
#define High()           GPIOPinWrite(DATA_BASE,DATA_PIN,0xFF)
#define Low()            GPIOPinWrite(DATA_BASE,DATA_PIN,0)
#define Read()           GPIOPinRead(DATA_BASE,DATA_PIN)
#define Data_Out()       GPIOPinTypeGPIOOutput(DATA_BASE,DATA_PIN)
#define Data_In()        GPIOPinTypeGPIOInput(DATA_BASE,DATA_PIN)
#define UartPutC(x)      UARTCharPut(UART0_BASE,x)
static OS_STK Task_StartSTK[TASK_START_STK_SIZE];
static OS_STK Task_STH11STK[TASK_DTH11_STK_SIZE];
INT8U RH_data[2]={0},T_data[2]={0};
INT8U RH[]={"测试到的当地的湿度:"};
INT8U T[]={"测试到的当时当地的温度:"};
INT8U RH_H_data,RH_L_data,T_H_data,T_L_data,Check_data;
INT8U Sum,data;
void Task_Start(void *parg);
void Task_DTH11(void *prag);
void uartInit();
void DTHInit();
void shuju();
void Send_data(INT8U *pdata);
int main()
{
  SysCtlLDOSet(SYS_LDO);
  intDisAll();
  OSInit();
  OSTaskCreate(Task_Start,(void *)0,&Task_StartSTK[TASK_START_STK_SIZE-1],Task_Start_Prio);
  OSStart();
  return (0);
}
void Task_Start(void *parg)
{
  parg=parg;
  targetInit();
  uartInit();
// SPIInit();
  OSTaskCreate(Task_DTH11,0,&Task_STH11STK[TASK_DTH11_STK_SIZE-1],Task_DTH11_Prio);
  while(1)
  OSTaskSuspend(OS_PRIO_SELF);
}
void Task_DTH11(void *prag)
{
  prag=prag;
  while(1)
  {
      DTHInit();
      Send_data(RH);
   delay_ms(100);
      Send_data(RH_data);
      UartPutC('\r');
      UartPutC('\n');
      delay_us(100);
      Send_data(T);
   delay_ms(100);
      Send_data(T_data);
      UartPutC('\r');
      UartPutC('\n');
    //  delay_ms(2000);
  }
}
void uartInit()
{
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
  SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
  UARTConfigSetExpClk(UART0_BASE,SysCtlClockGet(),115200,(UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE));
  GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);
  UARTEnable(UART0_BASE);
}
void DTHInit()
{
  SysCtlPeripheralEnable(DATA_PERIPH);
  Data_Out();
// delay_ms(1000);
  Low();               //拉低数据,起始信号
  delay_ms(20);
  High();              //等待DTH11反应
  delay_us(40);
  //Data_In();
   High();
  if(!GPIOPinRead(DATA_BASE,DATA_PIN))  //读取DTH是否响应,0为响应
  {
      while(!Read());          //判断DTH是否响应,总线为低的时候响应
      while(Read());             //再次判断DTH响应后,是否拉高总线,准备发送数据
      shuju();                 //从DTH接收数据
      RH_H_data=data;
      shuju();
      RH_L_data=data;
      shuju();
      T_H_data=data;
      shuju();
      T_L_data=data;
      shuju();
      Check_data=data;
      High();
      Sum=(RH_H_data+RH_L_data+T_H_data+T_L_data);
      if(Sum==Check_data)
      {
        RH_data[0]=RH_H_data;
        RH_data[1]=RH_L_data;
        T_data[0]=T_H_data;
        T_data[1]=T_L_data;
      }
    delay_ms(1000);
  }
}
void shuju()
{
    INT8U i;
// data=0;
Data_In();
    for(i=0;i<8;i++)
    {
      while(!Read());           //  判断是否到了数据位;总线为高
      delay_us(30);            //判断数据位是0或者是1
      if(Read())
      {
          data+=0x01;
          delay_us(30);
      }
    }
}
void Send_data(INT8U *pdata)
{
  while(*pdata!='\0')
    UARTCharPut(UART0_BASE,*pdata++);
}
用的是ucosii的源代码就不上传了,网上很多,大家可以随便下载。如果谁想要可以联系我。
对于其他的传感器帖子之后会陆续测分享

数字温湿度传感器DHT11技术手册.pdf

750.92 KB

相关帖子

沙发
guozhiyang|  楼主 | 2011-12-6 12:40 | 只看该作者
自己参考自己以前在其它的LM3S芯片上写的程序,稍微改动一下就可以。其实TI的LM3S的存储结构都一言,甚至引脚的硬件的功能也一样,只是版本越高芯片的功能越多。学好LM3S811在学其它高版本的LM3S的芯片上手也很快的。在LM3S811板子上写的程序。串口是自己焊个板子,接出两条线就可以了,也很简单。
#include<includes.h>
#include"uart_send.h"
#include"delay.h"
#include"VI2C_LM3S101.h"

#define IIC_Write  0x1D
#define IIC_Read   0x1D

#define LED_PERIPH   SYSCTL_PERIPH_GPIOC
#define LED_BASE     GPIO_PORTC_BASE
#define LED_PIN      GPIO_PIN_6
#define UARTPutC(x)      UARTCharPut(UART0_BASE,x)

uint8  test[]={"MMA7455测试成功。"};
uint8  kaishi[]={"开始接收X,Y,Z轴的数据"};
uint8  Re_x[]={"测试到的X轴上的数据:"};
uint8  Re_y[]={"测试到的Y轴上的数据:"};
uint8  Re_z[]={"测试到的Z轴上的数据:"};
char x,y,z;
uint8 reci[1]={0};
void Sys_Init();
void self_test7455();
void iic_write_Fini(uint8 addr,uint8 data);
uint8 iic_read_Fini(uint8 addr);
void sendx();
void sendy();
void sendz();

int main()
{
         Sys_Init();
         usart_init();
         self_test7455();
          delay_ms(100);
         iic_write_Fini(0x10,0x15);
         iic_write_Fini(0X12,0X25);
         iic_write_Fini(0x14,0x10);
         delay_ms(100);
        // UARTSend(kaishi,sizeof(kaishi));
         while(1)
         {
                 x=iic_read_Fini(0x06);
                y=iic_read_Fini(0x07);
                z=iic_read_Fini(0x08);
            delay_ms(100);
        //        UARTSend(Re_x,sizeof(Re_x));
                sendx();
                delay_ms(100);
                UARTPutC('\n');
        //        UARTSend(Re_y,sizeof(Re_y));
                sendy();
                delay_ms(100);
                UARTPutC('\n');
        //        UARTSend(Re_z,sizeof(Re_z));
                sendz();
                delay_ms(100);
                UARTPutC('\n');       
         }
}

void Sys_Init()
{
        SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_XTAL_8MHZ|SYSCTL_OSC_MAIN|SYSCTL_USE_OSC);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB|SYSCTL_PERIPH_GPIOC);
//        SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);
//        GPIOPinTypeI2C(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1);
//        I2CMasterInit(I2C_MASTER_BASE,false);        
        GPIODirModeSet(GPIO_PORTB_BASE, SDA | SCL, GPIO_DIR_MODE_OUT);      /*  配置相关引脚为I2C操作        */                                                                     
    GPIOPadConfigSet(GPIO_PORTB_BASE, SDA | SCL,                        /*  配置I2C的端口模式            */
                              GPIO_STRENGTH_4MA,
                              GPIO_PIN_TYPE_STD);
        GPIODirModeSet(LED_BASE,LED_PIN,GPIO_DIR_MODE_OUT);
        GPIOPadConfigSet(LED_BASE,LED_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
        GPIOPinWrite(LED_BASE,LED_PIN,LED_PIN);
}
void self_test7455()
{
        uint8 data;
//         uint8 *ss;
         delay_us(10);
     iic_write_Fini(0x16,0x01);
        //  delay_us(200);
         iic_read_Fini(0x16);
//         while(!retu1);
         if(reci[0]==0x01)
         {
                  GPIOPinWrite(LED_BASE,LED_PIN,~LED_PIN);
                 delay_us(100);
                // UARTSend(test,sizeof(test));
         }
}

void iic_write_Fini(uint8 addr,uint8 data)
{
         uint8 t,retu;
         //int retu;
         t=(IIC_Write<<1);
     ISendStr(t,addr,&data,1);
     //while(!retu);
}

uint8 iic_read_Fini(uint8 addr)
{
        uint8 rt,retu1;
        rt=(IIC_Read<<1);
    retu1=IRcvStr(rt,addr,reci,1);
        while(!retu1);
        return(reci[0]);
}

void sendx()
{
        uint8 x1,x2,x3;
//        char x;
//        x=iic_read_Fini(0x06);
        if((x&0x80)==0x00)
        {
        //        xsign=0x2b;        //+
                UARTPutC('+');
        }
        else
        {
                //xsign=0x2d;        //-
                UARTPutC('-');
                x=x-0x01;
                x=~x;
        }

        x1=(x/15);
        x2=((x*100/15)%100)/10;
    x3=(x*100/15)%10;
        UARTPutC('X');
        UARTPutC(x1+0x30);
        delay_us(100);
        UARTPutC(0x2E);
        delay_us(100);
        UARTPutC(x2+0x30);
        delay_us(100);
        UARTPutC(x3+0x30);
}

void sendy()
{
        char y1,y2,y3;
//        y=iic_read_Fini(0x07);
        if((y&0x80)==0x00)
        {
        //        xsign=0x2b;        //+
                UARTPutC('+');
        }
        else
        {
                //xsign=0x2d;        //-
                UARTPutC('-');
                y=y-0x01;
                y=~y;
        }

        y1=(y/15);
        y2=((y*100/15)%100)/10;
        y3=(y*100/15)%10;
        UARTPutC('Y');
        UARTPutC(y1+0x30);
        delay_us(100);
        UARTPutC(0x2E);
        delay_us(100);
        UARTPutC(y2+0x30);
        delay_us(100);
        UARTPutC(y3+0x30);
        delay_us(100);
}

void sendz()
{
//        char z;
        uint8 z1,z2,z3;
//        z=iic_read_Fini(0x08);
        if((z&0x80)==0x00)
        {
        //        xsign=0x2b;        //+
                UARTPutC('+');
        }
        else
        {
                //xsign=0x2d;        //-
                UARTPutC('-');
                z=z-0x01;
                z=~z;
        }

        z1=(z/15);
        z2=((z*100/15)%100)/10;
        z3=(z*100/15)%10;
        UARTPutC('Z');
        UARTPutC(z1+0x30);
        delay_us(100);
    UARTPutC(0x2E);
        delay_us(100);
        UARTPutC(z2+0x30);
        delay_us(100);
        UARTPutC(z3+0x30);
        delay_us(100);
}

使用特权

评论回复
板凳
guozhiyang|  楼主 | 2011-12-6 12:44 | 只看该作者
忘了传资料了。 在加上

89C52测试mma7455程序.rar

45.65 KB

MSP430IIC测试程序.rar

23.6 KB

龙丘MMA7455模块V1使用手册.pdf

541.57 KB

MMA7455L.pdf

583.71 KB

使用特权

评论回复
地板
guozhiyang|  楼主 | 2011-12-6 12:44 | 只看该作者
忘了传资料了。 在加上

89C52测试mma7455程序.rar

45.65 KB

MSP430IIC测试程序.rar

23.6 KB

龙丘MMA7455模块V1使用手册.pdf

541.57 KB

MMA7455L.pdf

583.71 KB

使用特权

评论回复
5
encai| | 2011-12-6 13:05 | 只看该作者
好东西啊

使用特权

评论回复
6
guozhiyang|  楼主 | 2011-12-8 13:20 | 只看该作者
在红外对管上用的是LTH-1550-01管子,在用LM393电压比较器来输出电压值。

使用特权

评论回复
7
guozhiyang|  楼主 | 2011-12-8 13:25 | 只看该作者
还有一个自己感觉不错的电路

3.png (50.57 KB )

3.png

使用特权

评论回复
8
guozhiyang|  楼主 | 2011-12-9 22:02 | 只看该作者
本帖最后由 guozhiyang 于 2011-12-10 12:28 编辑

    在本次自足机器人中想用无线控制,就用简单的NRF2401来控制,下面是自己学习的一点体会
     在NRF24L01的学习中,自己了解到了SPI的通信机制。用SPI方式来完成无线的通信。在接受上我用了12864来接受,自己写的12864的程序。用于显示MMA显示的转动的角度。特别要注意的是,LM3S811的SPI的片选引脚要单独的设置,因为要设成硬件的话,会出现与NRF24L01不服的时序。用IO口模拟。在延迟上我用的定时器精确地延迟来完成延迟程序。
来上资料吧。
这是NRF2401的发送程序
#include <includes.h>
#include"24l01.h"
#include"UART_INIT.h"
#define Tx_Port       SYSCTL_PERIPH_GPIOD|SYSCTL_PERIPH_GPIOB|SYSCTL_PERIPH_GPIOA

uchar TX_BUF[32]="你谁都不是!!/r";
uint8 IRQ_STU=0,IRQ_STU1=0;
unsigned long  GulDelayMs=12000000UL;
void Port_Init();
void  delayMs(unsigned long  ulVal);
void  timer0Init(void);
void main()
{
  uchar TX_Sta=0,TX_Sta1=0;
  Port_Init();
  timer0Init();
  init_NRF24L01();
  //Uart_Init();
  delayMs(10);
  while(1)
  {
     GPIOPinWrite(IRQ_PORT,IRQ_PIN,0);
    // TX_Sta1=SPI_Read(STATUS);
     nRF24L01_TxPacket(TX_BUF);
   //  delayMs(50);
    // IRQ_STU=GPIOPinRead(IRQ_PORT,IRQ_PIN);
      delay_ms(50);
    //  GPIOPinWrite(IRQ_PORT,IRQ_PIN,0xFF);
      TX_Sta=SPI_Read(STATUS);
     if(TX_Sta&TX_DS)
     {
   //    UART_Send(TX_BUF,sizeof(TX_BUF)-1);
    //   GPIOPinWrite(DEEP_PORT_PIN,0xFF);
      // SPI_RW(FLUSH_TX);
       SPI_RW_Reg(WRITE_REG+STATUS,0xFF);
     }
     delayMs(10);
   //  GPIOPinWrite(DEEP_PORT_PIN,0);
  }
}
void Port_Init()
{
// SysCtlLDOSet(SYSCTL_LDO_2_50V);
  SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_XTAL_6MHZ|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN);
  SysCtlPeripheralEnable(Tx_Port);
// GPIOOut(SSI0CLK_PORT_PIN);
  GPIOOut(SSI0FSS_PORT_PIN);
  GPIOOut(NRF_CE_PORT_PIN);
// GPIOOut(SSI0TX_PORT_PIN);
// GPIOInt(SSI0RX_PORT_PIN);
// GPIOOut(DEEP_PORT_PIN);
  GPIOInt(IRQ_PORT,IRQ_PIN);
// GPIOPadConfigSet(SSI0RX_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
// GPIOPadConfigSet(SSI0TX_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
//// GPIOPadConfigSet(NRF_CE_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
// GPIOPadConfigSet(SSI0FSS_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
// GPIOPadConfigSet(SSI0CLK_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
  //GPIOPadConfigSet(DEEP_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
// GPIOPinWrite(DEEP_PORT_PIN,0);
}

void  Timer0A_ISR(void)
{
    TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);                                    /* 清除定时器超时中断,重要!   */
    if (GulDelayMs < 4294967295) {
        GulDelayMs++;                                                   /* 在delayMs()函数中清零,用于  */
                                                                        /* 精确延时                     */
    }
}

/*********************************************************************************************************
精确延时函数 GulDelayMs由定时器中断每1ms加1
*********************************************************************************************************/
void  delayMs(unsigned long  ulVal)
{
    GulDelayMs = 0;
    while (GulDelayMs < ulVal);
}

void  timer0Init(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);                             /* 使能定时器模块               */
    TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);                                      /* 配置定时器为32位周期定时器   */
    TimerLoadSet(TIMER0_BASE,TIMER_A,SysCtlClockGet()/1000);                              /* 设置定时器初值               */
    TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);                                   /* 使能定时器超时中断           */
    IntEnable(INT_TIMER0A);                                             /* 使能定时器中断               */
    IntMasterEnable();                                                  /* 使能处理器中断               */
    TimerEnable(TIMER0_BASE,TIMER_A);                                                  /* 使能定时器计数               */
}

使用特权

评论回复
9
guozhiyang|  楼主 | 2011-12-9 22:23 | 只看该作者
NRF24L01(插针2.54MM).pdf (1.35 MB)
nRF24L01P.PDF (1.08 MB)
NRF24L01功能使用文档.pdf (906.89 KB)

NRF24L01功能使用文档.pdf

906.89 KB

NRF24L01(插针2.54MM).pdf

1.35 MB

nRF24L01P.PDF

1.08 MB

使用特权

评论回复
10
guozhiyang|  楼主 | 2011-12-9 22:30 | 只看该作者
nRF24L01.rar (3.56 KB)

使用特权

评论回复
11
tianm| | 2011-12-10 09:45 | 只看该作者
上个机器人的照片 就完美了

使用特权

评论回复
12
wangjinlili| | 2011-12-10 09:57 | 只看该作者
好东西 给力 的源代码

使用特权

评论回复
13
lixiaoxu2meng| | 2011-12-10 09:59 | 只看该作者

使用特权

评论回复
14
guozhiyang|  楼主 | 2011-12-10 12:32 | 只看该作者
在NRF24L01接受方面,用的是12864。来显示得到的信息,用的是定时器来精确地延迟。
NRF2401的接受程序:
#include <includes.h>
#include"24l01.h"
#include"12864.h"
#define Tx_Port       SYSCTL_PERIPH_GPIOF|SYSCTL_PERIPH_GPIOD|SYSCTL_PERIPH_GPIOB|SYSCTL_PERIPH_GPIOA|SYSCTL_PERIPH_GPIOC

//uchar TX_BUF[32]="你谁都不是!!";
uchar  RX_BUF[32];
uchar jiaodu[]="角度:";
unsigned long  GulDelayMs;
void Port_Init();
void  delayMs(unsigned long  ulVal);
void  timer0Init(void);
void main()
{
  Port_Init();
  Port_12864();
  timer0Init();
  init_NRF24L01();
  Port_12864();
  delayMs(5);
  Init_12864();
  // spi_init();
// SetRX_Mode();
  delayMs(10);
Put_Lcd_String(1,1,jiaodu);
  while(1)
  {
    SetRX_Mode();
//   Put_Lcd_String(1,1,jiaodu);
    if(nRF24L01_RxPacket(RX_BUF))
    {
      Put_Lcd_String(1,4,RX_BUF);
      delayMs(50);
      GPIOPinWrite(LED_PORT_PIN,0XFF);
    }
  }
}
void Port_Init()
{
  //SysCtlLDOSet(SYSCTL_LDO_2_75V);
  SysCtlClockSet(SYSCTL_SYSDIV_10|SYSCTL_XTAL_8MHZ|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN);
  SysCtlPeripheralEnable(Tx_Port);
// GPIOOut(SSI0CLK_PORT_PIN);
  GPIOOut(SSI0FSS_PORT_PIN);
  GPIOOut(NRF_CE_PORT_PIN);
//  GPIOOut(SSI0TX_PORT_PIN);
// GPIOInt(SSI0RX_PORT_PIN);
  GPIOOut(DATA_PORT_PIN);
  GPIOOut(LED_PORT_PIN);
// GPIOPadConfigSet(DATA_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
// GPIOPadConfigSet(SSI0RX_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
// GPIOPadConfigSet(SSI0TX_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
// GPIOPadConfigSet(NRF_CE_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
// GPIOPadConfigSet(SSI0FSS_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
// GPIOPadConfigSet(SSI0CLK_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
// GPIOPadConfigSet(LED_PORT_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
  GPIOPinWrite(LED_PORT_PIN,0xFF);
}

void  Timer0A_ISR(void)
{
    TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);                                    /* 清除定时器超时中断,重要!   */
    if (GulDelayMs < 4294967295)
    {
        GulDelayMs++;                                                   /* 在delayMs()函数中清零,用于  */                                                                       /* 精确延时                     */
    }
}

/*********************************************************************************************************
精确延时函数 GulDelayMs由定时器中断每1ms加1
*********************************************************************************************************/
void  delayMs(unsigned long  ulVal)
{
    GulDelayMs = 0;
    while (GulDelayMs < ulVal);
}

void  timer0Init(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);                             /* 使能定时器模块               */
    TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);                                      /* 配置定时器为32位周期定时器   */
    TimerLoadSet(TIMER0_BASE,TIMER_A,8000);                              /* 设置定时器初值               */
    TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);                                   /* 使能定时器超时中断           */
    IntEnable(INT_TIMER0A);                                             /* 使能定时器中断               */
    IntMasterEnable();                                                  /* 使能处理器中断               */
    TimerEnable(TIMER0_BASE,TIMER_A);                                                  /* 使能定时器计数               */
}

使用特权

评论回复
15
guozhiyang|  楼主 | 2011-12-10 12:40 | 只看该作者
这个是12864的显示程序,用的是液晶屏坐标的思想,挺不错。
12864.rar (1.75 KB)

使用特权

评论回复
16
guozhiyang|  楼主 | 2011-12-10 12:45 | 只看该作者
上次在淘宝网上买零件的时候,买的螺丝少了,现在没有办法安装成功。还得在网上买点。
大家都知道最忙的时候到了,还有课,还有实验,还有四级考试。真是忙死了。我都是用睡觉的时间能着,可能需要在等等才能传照片。
不好意思啊。

使用特权

评论回复
17
wuhany| | 2011-12-11 11:21 | 只看该作者
螺丝少了?!哈哈

使用特权

评论回复
18
guozhiyang|  楼主 | 2011-12-11 18:12 | 只看该作者
是啊!并且还烧了个舵机,:'(,真惹不起

使用特权

评论回复
19
uestchm| | 2011-12-13 10:25 | 只看该作者
楼主太给力了 辛苦了

使用特权

评论回复
20
hzppanavo| | 2011-12-13 10:29 | 只看该作者
不错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

67

帖子

3

粉丝