标题: 求问用数码管以流水灯显示8位学号,求程序 [打印本页]
作者: 6956 时间: 2017-3-19 13:25
标题: 求问用数码管以流水灯显示8位学号,求程序
求问用数码管以流水灯显示8位学号,求程序
作者: Jackun 时间: 2017-3-19 17:19
作者: imxuheng 时间: 2017-3-19 19:46
我这里给你份程序,基本满足要求,自己拿去改成自己需要的程序
摘自“JH《单片机C语言程序设计实训100例——基于8051+Proteus仿真》案例压缩包”
-
无标题.jpg
(192.39 KB, 下载次数: 138)
-
-
07 8只数码管滚动显示单个数字.zip
35.45 KB, 下载次数: 338
作者: zl2168 时间: 2017-3-20 18:08
本帖最后由 zl2168 于 2017-3-20 18:15 编辑
给你几个案例参考。
实例56 PNP晶体管选通3位共阳LED数码管动态显示
实例57 74LS139选通4位LED数码管动态显示
实例58 74LS138选通8位LED数码管动态显示
实例59 74LS595串行选通8位LED数码管动态显示
实例60 8255A扩展8位LED数码管动态显示
实例63 8155扩展8位LED数码管动态显示
实例64 MAX7221控制8位LED数码管动态显示
先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案例,用于仿真实验操作,电路与程序真实可靠可信可行。
书中电路和程序设计有详细说明,程序语句条条有注解。
作者: tom_wang4488 时间: 2017-3-21 10:36
用595驱动
作者: tom_wang4488 时间: 2017-3-21 10:40
595驱动
-
123.jpg
(158.47 KB, 下载次数: 107)
用595驱动
作者: lgjdqm 时间: 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;
}
}
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |