铁血㊣罡风 发表于 2013-8-7 10:25:34

新手初学级连数码管显示

本帖最后由 铁血㊣罡风 于 2013-8-7 10:27 编辑

这是卖家给的51的程序

/***************************************************************************
标题:        8位数码管模块显示实验
效果:        显示1 2 3 4 5 6 7 8
工作于:LY5A-L2A开发板

******************************************************************************/

//头文件:
#include "reg51.h"

#define DATAOUT P2        //指定P2口做为输出

sbit H1=DATAOUT^0;        //位选控制
sbit H2=DATAOUT^1;
sbit H3=DATAOUT^2;
sbit H4=DATAOUT^3;
sbit DA=DATAOUT^4;        //数据输出       
sbit SC=DATAOUT^5;        //移位时钟
sbit ST=DATAOUT^6;        //锁存信号

//变量定义:
code unsigned char table[]=
                        {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                                        //表:共阳数码管 0-9
unsigned char l_disbuff={1,2,3,4,5,6,7,8};//显示缓冲
unsigned char l_posit=0;        //显示位置索引


void output(unsigned char dat) //移出一字节
{
    unsigned char i;
    for(i=0;i<8;i++)
    {
      SC=0;
      DA=dat&0x80;        //高位先移出
      SC=1;
      dat<<=1;
    }
}
void display()//显示
{       
        output(table]);        //输出第一个字节,第二模块显示内容
        output(table]);                //输出第二字节,第一模块显示内容
        DATAOUT|=0X0F;                                                //关闭显示,位切换准备
        ST=0;                                                                //准备锁存
        ST=1;                                                                //数据锁存到输出
        DATAOUT=DATAOUT&~(1<<l_posit);                //打开下一位显示

        l_posit++;                //每调用一次函数将轮流显示
        if(l_posit>3)
                l_posit=0;       
}

//主函数,C语言的入口函数:       
void main(void)
{
        while(1){                                        //循环扫描显示
                display();
        }
}


自己改成了Arduino的了,各位前辈给指点下,还能简化下吗?
i
nt latchPin = 8;//ST脚
int clockPin = 12; //Clk脚
int dataPin = 11; //Data In脚
int dig[]={4,5,6,7};
unsigned char const table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
                                        //表:共阳数码管 0-9 a-f,十六进制显示

void setup ()
{
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT); //让三个脚都是输出状态
pinMode(dig,OUTPUT);
pinMode(dig,OUTPUT);
pinMode(dig,OUTPUT);
pinMode(dig,OUTPUT); //让4个脚都是输出状态,数码管模块的1-4针脚
}
void display()
{
for(int i = 0;i < 4; i++)
{
    digitalWrite(dig,HIGH);
    digitalWrite(dig,HIGH);
    digitalWrite(dig,HIGH);
    digitalWrite(dig,HIGH);
   
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, table);
    shiftOut(dataPin, clockPin, MSBFIRST, table);
    shiftOut(dataPin, clockPin, MSBFIRST, table);
    digitalWrite(latchPin, HIGH);
    digitalWrite(dig,LOW);

    delay(5);
}
}

void loop()
{
display();
}
页: [1]
查看完整版本: 新手初学级连数码管显示