这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » easyARM2200,11GPIO easyARM2200实验3.11GPIO

共2条 1/1 1 跳转至

easyARM2200,11GPIO easyARM2200实验3.11GPIO输出控制实验2的问题

院士
2006-09-17 18:14:16     打赏
easyARM2200,11GPIO easyARM2200实验3.11GPIO输出控制实验2的问题



关键词: easyARM2200     11GPIO     实验     3.1    

院士
2006-12-22 22:43:00     打赏
2楼
问 /********************************************************************
* 文件名:LEDDISP.C
* 功能:LED显示控制。
*      通过I/O模拟同步串口与74HC595进行连接,控制74HC595驱动LED显示。
* 说明:将跳线器JP8短接。
********************************************************************/
#include  "config.h"

#define   SPI_CS    0x00000100        /* P0.8 */
#define   SPI_DATA    0x00000040        /* P0.6 */
#define   SPI_CLK    0x00000010        /* P0.4 */

#define   SPI_IOCON    0x00000150        /* 定义SPI接口的I/O设置字 */*******************************************************************
* 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly        延时参数,值越大,延时越久
* 出口参数:无
********************************************************************/
void  DelayNS(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--)
      for(i=0; i<5000; i++);
}
/********************************************************************
* 名称:HC595_SendDat()
* 功能:向74HC595发送一字节数据
* 入口参数:dat        要发送的数据
* 出口参数:无
* 说明:发送数据时,高位先发送。
********************************************************************/
void  HC595_SendDat(uint8 dat)
{  uint8  i;

   IO0CLR = SPI_CS;                // SPI_CS = 0
   for(i=0; i<8; i++)            // 发送8位数据
   {  IO0CLR = SPI_CLK;            // SPI_CLK = 0
      /* 设置SPI_DATA输出值 */
      if( (dat&0x80)!=0 )  IO0SET = SPI_DATA;
        else IO0CLR = SPI_DATA;
      dat <<= 1;
      IO0SET = SPI_CLK;            // SPI_CLK = 1
   }
   
   IO0SET = SPI_CS;                // SPI_CS = 1,输出显示数据
}
const uint8  DISP_TAB[16] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x81,0x42,0x24,0x18,0x24,0x42,0x81,0x00 };                        
/********************************************************************
* 名称:main()
* 功能:根据表DISP_TAB来控制LED显示。
********************************************************************/
int  main(void)
{  uint8  i;         
    
   PINSEL0 = 0x00000000;        // 设置管脚连接GPIO
   
   IO0DIR = SPI_IOCON;            // 设置SPI控制口为输出
   while(1)    
   {  for(i=0; i<16; i++)
      {  HC595_SendDat(~DISP_TAB[i]);  // 输出LED显示数据
         DelayNS(5);            // 延时
      }
   }
   return(0);
}


其中const uint8  DISP_TAB[16] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x81,0x42,0x24,0x18,0x24,0x42,0x81,0x00 }; 第一个而言,既然送出的是0x01,而跑马灯是有0输出时(因为书上电路图中二极管的正极接的是电源3.3V),就亮,这时应该是7个灯亮啊?为什么结果只有一个灯亮?请高手指点!多谢! 1: 注意一个符号!!!HC595_SendDat(~DISP_TAB[i]);  // 输出LED显示数据
该行中有"~",取反了!!! 2: easyARM2200实验3.11GPIO输出控制实验2的问题多谢指点! 3: 借问一个:const是否就把这张表置在了flash中呢? 4: 是的!

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]