数码管和灯

不想你离开。 提交于 2020-01-05 02:54:42

led中所涉及到的几个地址的说明:
#define CS1BASE (0x11000000)
#define SEGP ((0x10000000+0x248))


#define DIGIP ((CS1BASE+0x0800))


#define LEDP ((CS1BASE+0x0C00))

上述几个值都是由硬件设计人员给出的。其中,

DIGIP 为位寄存器地址(总共有8个数码管,用来控制要对哪个数码管进行操作);


SEGP为段寄存器地址(其作用有两个:一是控制某个数码管的具体显示内容;二是设定要控制哪个灯);


LEDP
为控制灯的亮与灭(即只存在两个有效的值:0和1)

例子如下:

void myledtest()
{
    //数组的内容分别为:8 7 6
    unsigned 
long int    tt[3= {0x0000fe,0x0000e0,0x0000be};

    
int i = 0;

        
while (i<3)
        {


   
            //所有数码管的显示清空,即不显示
            
*(unsigned short*)(DIGIP)=0x00;

            //指定数码管显示的内容
            
*(unsigned short*)(SEGP)=tt[i];           
            //指定用哪个数码管来显示
            
*(unsigned short*)(DIGIP)=0x0080>>i;

            i
++;
        }
}

 

void myLighttest()
{

    
int i = 0;

        
while (i<8)
        {            
            //下行主要目的是清除数码管的显示,与灯并无关系       
            
*(unsigned short*)(DIGIP)=0x00;           
           
//下行清空灯的显示,即让所有灯都灭
            *(unsigned short*)(LEDP)=0x00;   

            //设定哪个灯
            
*(unsigned short*)(SEGP)=0x80 >> i;
            //设定由上句指定的灯为亮状态
            *(unsigned short*)(LEDP)=1;
       
            i
++;
        }
}

 

注意:因为 SEGP是控制数码管和灯所公用的,所以容易搞混。




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!