找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求问用数码管以流水灯显示8位学号,求程序

[复制链接]
跳转到指定楼层
楼主
ID:172411 发表于 2017-3-19 13:25 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
2黑币
求问用数码管以流水灯显示8位学号,求程序

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

使用道具 举报

沙发
ID:173026 发表于 2017-3-19 17:19 | 只看该作者
回复

使用道具 举报

板凳
ID:151348 发表于 2017-3-19 19:46 | 只看该作者
我这里给你份程序,基本满足要求,自己拿去改成自己需要的程序
摘自“JH《单片机C语言程序设计实训100例——基于8051+Proteus仿真》案例压缩包”

无标题.jpg (192.39 KB, 下载次数: 138)

无标题.jpg

07 8只数码管滚动显示单个数字.zip

35.45 KB, 下载次数: 338

回复

使用道具 举报

地板
ID:111634 发表于 2017-3-20 18:08 | 只看该作者
本帖最后由 zl2168 于 2017-3-20 18:15 编辑

给你几个案例参考。


实例56  PNP晶体管选通3位共阳LED数码管动态显示

实例57  74LS139选通4LED数码管动态显示

实例58  74LS138选通8LED数码管动态显示

实例59  74LS595串行选通8LED数码管动态显示

实例60  8255A扩展8LED数码管动态显示

实例63  8155扩展8LED数码管动态显示
实例64  MAX7221控制8LED数码管动态显示



Proteus仿真一下,确认有效。
实例56 PNP晶体管选通3位LED动态显示.rar (47.41 KB, 下载次数: 47)

实例57 74LS139选通4位共阴LED数码管动态显示.rar (48.12 KB, 下载次数: 78)
实例58 74LS138选通8位LED动态显示.rar (44.76 KB, 下载次数: 123)
实例59 74LS595×2选通8位LED动态显示.rar (45.12 KB, 下载次数: 30)
实例59 74LS595×2选通8位LED动态显示.rar (45.12 KB, 下载次数: 23)
实例60 8255A扩展8位LED动态显示.rar (40.19 KB, 下载次数: 64)
实例63 8155扩展8位LED数码管动态显示.rar (39.46 KB, 下载次数: 25)
实例64 MAX7221控制8位LED数码管动态显示.rar (38.95 KB, 下载次数: 43)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。

书中电路和程序设计有详细说明,程序语句条条有注解。



回复

使用道具 举报

5#
ID:176162 发表于 2017-3-21 10:36 | 只看该作者
用595驱动
回复

使用道具 举报

6#
ID:176162 发表于 2017-3-21 10:40 | 只看该作者
595驱动

123.jpg (158.47 KB, 下载次数: 107)

用595驱动

用595驱动
回复

使用道具 举报

7#
ID:74868 发表于 2017-3-22 10:21 | 只看该作者
#include<reg52.h>
#include<intrins.h>
#define LED P0
#define WHICH P2  
#define CON 50000  
#define TH_0 ((65536-CON)/256)
#define TL_0 ((65536-CON)%256)
sbit K1 = P1^7;
sbit K2 = P1^6;
sbit K3 = P1^5;
sbit K4 = P1^4;
//sbit K5 = P2^3;
sbit K6 = P1^2;
sbit K7 = P1^1;
sbit K8 = P1^0;
sbit light = P3^7;  
unsigned char code NUM[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

unsigned char sec=0,min=0,hour=12,n=0;  
unsigned char disp[8]={0x00,0x00,0X0A,0x00,0x00,0X0A,0X00,0x00};
unsigned char scan=0xfe,i=0;

  
//函数声明
  
void delay(unsigned char);
void sca();  
void black(unsigned char);

  
//主函数

void main()
{

LED = 0X00;

P2 = 0X00;

WHICH = scan;

TH0 = TH_0;

TL0 = TL_0;

IE = 0X82;

TMOD = 0X01;
  
TR0 = 1;  


disp[6]=hour%10;disp[7]=hour/10;
one: while(1)

{

sca();  

if(K1 == 0){while(K1 == 0)sca();light = 0;TR0 = ~TR0;goto next;}

}
  

  
  
next: while(1)


{  



if(K2 == 0){while(K2==0)black(6);hour++;}


if(K6 == 0){while(K6==0)black(6);hour--;}

if(K3 == 0){while(K3==0)black(3);min++;}


if(K7 == 0){while(K7==0)black(3);min--;}

if(K4 == 0){while(K4==0)black(0);sec++;}

  
if(K8 == 0){while(K8==0)black(0);sec--;}  




if(sec==60)sec=0;


if(sec==-1)sec=59;  


disp[0]=sec%10;disp[1]=sec/10;


if(min==60)min=0;
  
  
if(min==-1)min=59;


disp[3]=min%10;disp[4]=min/10;


if(hour==24)hour=0;


if(hour==-1)hour=23;  


disp[6]=hour%10;disp[7]=hour/10;
  






sca();  


if(K1 == 0){while(K1 == 0)sca();light = 1;TR0 = ~TR0;goto one;}
  


}  

  

}  
//主函数结束

  
  
//延时函数
  
void delay(unsigned char a)
{  



unsigned char i,j;

for(i=a;i>0;i--)


for(j=110;j>0;j--);  
}
  

  
//扫描函数

void sca()
{

  
LED=0X00;  


scan=_crol_(scan,1);


if(++i==8)i=0;


WHICH=scan;


LED=NUM[disp[i]];

  
delay(8);   
}

  
  
//挑时间闪烁函数

void black(unsigned char n)
{


LED=0X00;  


scan=_crol_(scan,1);  


if(++i==8)i=0;


WHICH=scan;  


LED=NUM[disp[i]];  


if((i == n)||(i == (n+1))){LED = 0X00;}

  
delay(8);   
}

  
  
//计时中断
  
void T0_0(void) interrupt 1
{

TH0 = TH_0;

TL0 = TL_0;

if((++n)==20)

{


n=0;sec++;  


if(sec==60){sec=0;min++;}


disp[0]=sec%10;disp[1]=sec/10;


if(min==60){min=0;hour++;}


disp[3]=min%10;disp[4]=min/10;


if(hour==24){hour=0;}  


disp[6]=hour%10;disp[7]=hour/10;  
  

}  
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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