找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5306|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机:数码管 的所有代码(集中在一起)

[复制链接]
跳转到指定楼层
楼主
ID:103513 发表于 2016-1-17 01:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

写于厦门
/*
点亮第一个数码管,因为板子是自已做的,到电子城买数码管时说好要共阴的,拿来测时才发现是共阳的。
*/
//------------------------------------------------------------
  /*
#include <reg52.h>
#define uchar unsigned char
sbit duan=P2^5 ;             //注意,有分号
sbit wei=P2^6;
const unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};                //数码管数组
void main()
{
duan=1;
P0=table[1];
duan=0;
wei=1;
P0=0x01;
wei=0;
while(1);
}
*/
//-----------------------------------------------------------------
/*
//静态显示,第一个数码管显示1
#include <reg52.h>
sbit duan=P2^5;
sbit wei=P2^6;
void main()
{
duan=1;
P0=0xF9;  //共阳极数码管  显示1的编码值是F9,如果你是买的开发板(共阴的数码管)则为0x06;
duan=0;
wei=1;
P0=0x01;  //选中第1个数码管
wei=0;
while(1);  //一直显示,以便我们观察
}
*/
//-----------------------------------------------------------------
/*
//静态显示,全为1
#include <reg52.h>
sbit duan=P2^5;
sbit wei=P2^6;
void main()
{
duan=1;
P0=0xF9;  //共阳极数码管  显示1的编码值是F9,如果你是买的开发板(共阴的数码管)则为0x06;
duan=0;
wei=1;
P0=0xff;  //选中所有的数码管
wei=0;
while(1);  //一直显示,以便我们观察
}
*/
//-----------------------------------------------------------------
/*
//静态显法012345
#include <reg52.h>
#define uchar unsigned char
sbit duan=P2^5 ;             //注意,有分号+P是大写的,若你写成小写的则会提示说找不到
sbit wei=P2^6;
sbit P13=P1^2;
//int m=1;
const unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};                //数码管数组
void delay(int x)
{
int  a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void main()
{
while(1)
{
duan=1;
P0=table[0];
duan=0;
wei=1;
P0=0x01;
duan=0;
delay(3);

duan=1;
P0=table[1];
duan=0;
wei=1;
P0=0x02;
duan=0;
delay(3);

duan=1;
P0=table[2];
duan=0;
wei=1;
P0=0x04;
duan=0;
delay(3);

duan=1;
P0=table[3];
duan=0;
wei=1;
P0=0x08;
duan=0;
delay(3);

duan=1;
P0=table[4];
duan=0;
wei=1;
P0=0x10;
duan=0;
delay(3);

duan=1;
P0=table[5];
duan=0;
wei=1;
P0=0x20;
duan=0;
delay(3);
   }
}
*/
//----------------------------------------------------------------------------------------
/*
//动态显示:从0到F 变化 (所有的数码管)
#include <reg52.h>
#define uchar unsigned char
sbit duan=P2^5 ;             //注意,有分号+P是大写的,若你写成小写的则会提示说找不到
sbit wei=P2^6;
sbit P13=P1^2;
const unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};                //数码管数组
void delay(int x)
{
int  a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void main()
{
while(1)
{
uchar n=0;
for(n=0;n<=9;n++)
  {
   P13=0;      //让LED3亮起来
    duan=1;
   P0=table[n];
   duan=0;
   wei=1;
   P0=0xff;           //因为我的是共阳的,其数码管选中得高电平,如果你是共低的则为0x
   wei=0;
   delay(600);    //一定要加延时否则看起来乱码实际上是闪烁太快了有余辉
       }
     }
}
*/
//-----------------------------------------------------------------
/*
//数码管从0开始到9变化,同时LED灯正流+倒流.
#include<reg52.h>
#include <intrins.h>      //LED灯用到移动关键字crol,调用此关键字
#define uchar unsigned char
const unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};                //数码管数组
sbit wei=P2^6;
sbit duan=P2^5;
void delay(int x)
{
int  a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void LED()
{
uchar a,temp;
temp=0xfe;
  for (a=8;a>0;a--)   //循环8次
   {
P1=temp;
temp=_crol_(temp,1); //移动
delay(50);
}
delay(5);
temp=0x7f;
    for (a=8;a>0;a--)   //循环8次
   {
P1=temp;
temp=_crol_(temp,-1); //移动
delay(50);
}
}
void scan()
{
uchar n=0;
for(n=0;n<=9;n++)
  {
  duan=1;
  P0=table[n];
  duan=0;
  wei=1;
  P0=0xff;
  wei=0;
  delay(100);  
  LED();
  }
if(n==9){delay(300);}

}

void main()
{
while(1)
{
// LED();
  scan();
   }
}
*/







//-------------------------------------------------------------------------------------------------------
/*
数码管从0开始到9变化,同时LED灯正流+倒流+蜂鸣器(循环一轮完响一次)   
*/
#include<reg52.h>
#include <intrins.h>      //LED灯用到移动关键字crol,调用此关键字
#define uchar unsigned char
const unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};                //数码管数组
sbit wei=P2^6;
sbit duan=P2^5;
sbit P23=P2^3;
void delay(int x)
{
int  a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void LED()
{
uchar a,temp;
temp=0xfe;
  for (a=8;a>0;a--)   //循环8次
   {
P1=temp;
temp=_crol_(temp,1); //移动
delay(50);
}
delay(1);
temp=0x7f;
    for (a=8;a>0;a--)   //循环8次
   {
P1=temp;
temp=_crol_(temp,-1); //移动
delay(50);
}
}
void scan()
{
uchar n=0;
P23=1;      //下一轮循环前取消蜂鸣器,否则会一直响,吵死了
for(n=0;n<=9;n++)
  {
  duan=1;
  P0=table[n];
  duan=0;
  wei=1;
  P0=0xff;
  wei=0;
  delay(5);  
  LED();
      if(n==9){P23=0;delay(300);}
  }

}

void main()
{
while(1)
{
  scan();
   }
}


//----------------------------------------------------------------------------------------------------------------
我自已做的板子的 段选是接P2^5,位选是接P2^6。流水灯的锁存器使能是接P2^7
            而天祥是接段---P2^6,位---P2^7。                                      P2^5

所以呢,你得改下这两个地方后,上面的程序立马可以使用了。我在这里只说一次,以后的接法都是这样的就不再说了


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:272625 发表于 2018-1-16 21:45 | 只看该作者
楼主手工了得
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表