新手初学级连数码管显示
本帖最后由 铁血㊣罡风 于 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]