本帖最后由 铁血㊣罡风 于 2013-8-7 10:27 编辑
这是卖家给的51的程序
[pre lang="C51" line="1"]
/***************************************************************************
标题: 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[8]={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[l_disbuff[l_posit+4]]); //输出第一个字节,第二模块显示内容
output(table[l_disbuff[l_posit]]); //输出第二字节,第一模块显示内容
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();
}
}
[/code]
自己改成了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[0],OUTPUT);
- pinMode(dig[1],OUTPUT);
- pinMode(dig[2],OUTPUT);
- pinMode(dig[3],OUTPUT); //让4个脚都是输出状态,数码管模块的1-4针脚
- }
- void display()
- {
- for(int i = 0;i < 4; i++)
- {
- digitalWrite(dig[0],HIGH);
- digitalWrite(dig[1],HIGH);
- digitalWrite(dig[2],HIGH);
- digitalWrite(dig[3],HIGH);
-
- digitalWrite(latchPin, LOW);
- shiftOut(dataPin, clockPin, MSBFIRST, table[i+8]);
- shiftOut(dataPin, clockPin, MSBFIRST, table[i+4]);
- shiftOut(dataPin, clockPin, MSBFIRST, table[i]);
- digitalWrite(latchPin, HIGH);
- digitalWrite(dig[i],LOW);
-
- delay(5);
- }
- }
- void loop()
- {
- display();
- }
复制代码 |