实测通过6位数码管显示程序Word下载.docx
- 文档编号:348638
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:24
- 大小:19.03KB
实测通过6位数码管显示程序Word下载.docx
《实测通过6位数码管显示程序Word下载.docx》由会员分享,可在线阅读,更多相关《实测通过6位数码管显示程序Word下载.docx(24页珍藏版)》请在冰点文库上搜索。
//锁存段码
LE2=0;
//断开锁存,段选573的Q7~Q0仍保持
delay(100);
//延时保持一下,延时过大会闪动,延时过小会有重影
P1=0x00;
LE2=1;
LE2=0;
//清除P1口数据,以免造重影
//显示十分位
P1=0x7f;
//0xbf=01111111,即选通十分位
P1=dis[wei%10];
//0~9的编码
//断开锁存,段选573的Q7~Q0仍保持
//清除P1口数据,以免造重影
if(num==9.9)num=0;
//扫描到显示9.9时,重新开始扫描
num+=0.1;
//num加0.1
/***********************************************************************************
以下各个程序是实测通过的6位共阳数码管显示程序(c51)2014.08.20.实测通过仿TX-3C实验板
晶振为11.0592M
************************************************************************************/
共阴led数码管码表:
(20140820)
/*
codeucharshu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//共阴数码管段选码(0-f)
*/
高位(7)----低位(0)
位00000000
共阳数码管段选码(0-f)笔画hgfedcba(小数点不亮码):
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
0123456789abcdef
//共阳数码管段选码(0-f)(高位减8即可,在段码中加上'
&
0x7f'
即:
P0=table[ge]&
0x7f;
)(带小数点亮码):
//P0=table[ge]&
或P0=table[ge]&
0x80;
该位小数点也亮。
注:
'
7f'
与'
80'
互为'
反码'
。
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};
㈠:
静态方式显示6位数字
#include<
reg52.h>
//52单片机头文件
sbitdula=P2^6;
//单片机管脚位声明
sbitwela=P2^7;
//#defineuintunsignedint//宏定义
//#defineucharunsignedchar//宏定义
//#include<
intrins.h>
//包含有左右循环移位子函数的库
voiddelay(unsignedintz)//延时函数(z的取值为这个函数的延时ms数,如:
delay(200);
大约延时200ms).
{unsignedintx,y;
//定义2个int型变量
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
//P1=0xff;
//将单片机P1口清零
while
(1)//程序停止在这里(大循环)
{
/*
dula=1;
P0=0xff;
//送位数据前关闭所有显示,防止打开位选锁存后段选数据通过位选锁存器
//delay(500);
P0=!
P0;
qdelay(500);
//延时500毫秒
dula=0;
delay
(2);
//延时2毫秒
*/
/*
P0=0x00;
delay
(2);
wela=1;
P0=0x03;
wela=0;
delay(5);
P0=0x99;
//送段码
dula=0;
P0=0x01;
//送位码
0x00000000006个数码管全部不亮
0x0100000001从左往右第1位都亮
0x0300000011前2位都亮
0x0700000111前3位都亮
0x0f00001111前4位都亮
0x1f00011111前5位都亮
0x3f00111111前6位都亮
//0x7f01111111前6位亮
0x2000100000从左往右第6位亮
0x1000010000从左往右第5位亮
0x0800001000从左往右第4位亮
0x0400000100从左往右第3位亮
0x0200000010从左往右第2位亮
0x0100000001从左往右第1位亮
delay(1000);
P1=~P1;
㈡:
动态方式稳定显示6个数字:
‘123456’
#defineuintunsignedint
#defineucharunsignedchar
sbitdula=P2^6;
sbitwela=P2^7;
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
voiddelayms(uint);
voidmain()
while
(1)
dula=1;
P0=table[1];
dula=0;
P0=0xff;
wela=1;
P0=0x01;
wela=0;
delayms(500);
//改小延时时间,即成为动态显示了。
改到10ms时仍有闪烁感,改成1ms~5ms内较为合适。
P0=table[2];
P0=0x02;
P0=table[3];
P0=0x04;
P0=table[4];
P0=0x08;
P0=table[5];
P0=0x10;
P0=table[6];
P0=0x20;
voiddelayms(uintxms)
uinti,j;
for(i=xms;
i>
i--)
for(j=110;
j>
j--);
}
/******************************************************************
voidxianshi()//显示函数
for(i=0;
i<
6;
i++)
P0=wen[i];
//位选
wei=1;
//开74HC573锁存
wei=0;
//关74HC573锁存
P0=huancun[i];
//段选
duan=1;
duan=0;
P0=0xff;
//消影
delay(5);
voidinit()
TMOD=0x01;
TH0=(65536-50000)/256;
//10ms定时初值(T0计时用)
TL0=(65536-50000)%256;
TR0=1;
//T0计时关断
ET0=1;
//T0中断允许位关断
EA=1;
//开总中断
huancun[i]=shu[i];
//段选送缓存
voidmain()
init();
while
(1)
xianshi();
voidtime_intt0(void)interrupt1//50ms中断
uchart,i,j;
//重置初值
t++;
if(t==20)//1秒到50ms*20=1s
t=0;
j++;
//j+1
i++)//使段选数据移位输入缓存
huancun[i]=shu[i+j];
if(j>
9)//移到最后面回到初始状态(即显示第8位后的第9位就是回到原来的第1位循环)
j=0;
*******************************************************************/
㈢:
6位共阳数码管循环显示0123456789ABCDEF,六个数码管是连续不同的六个数
codeucharshu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
//共阳数码管段选码(0-f)
//ucharcodeDIS_BIT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//数码管位选(8位)
/*codeucharshu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
//共阴数码管段选码(0-f)*/
codeucharwen[]={0x01,0x02,0x04,0x08,0x10,0x20};
//数码管位选(6位)
ucharhuancun[]={0x00,0x00,0x00,0x00,0x00,0x00};
//数码管段选缓存(即缓存需要显示的6位数码管段选码)
sbitduan=P2^6;
//段选
sbitwei=P2^7;
//位选
voiddelay(ucharx)//延时函数(延时函数在主函数前面的,则不需要子函数申明)
uchari,j;
for(i=0;
x;
for(j=0;
j<
250;
uchari;
{
P0=wen[i];
wei=1;
wei=0;
P0=huancun[i];
duan=1;
duan=0;
P0=0xff;
delay(5);
//延时5ms
}
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
huancun[i]=shu[i];
xianshi();
t++;
if(t==20)//1秒时间到。
(50ms*20=1s)
t=0;
j++;
i++)//使段选数据移位输入缓存
huancun[i]=shu[i+j];
}
if(j>
{
j=0;
㈣秒计时00至59秒动态显示最后2个数码管
/***********************************************************
共阳数码管段选码(0-f)(高位减8即可)(带小数点亮码):
**************************************************************/
/**************************************************************
*********************************************************************/
/*********************************************************************
动态显示59秒2014.09.20.
//#defineuintunsignedint
ucharj,i,a,A1,A2,A3,second;
/****************************************************************
ucharj,i,a,A1,A2,A3;
uintsecond;
*****************************************************************/
//共阳段码
voiddelay(uchari)//延时函数
for(j=i;
j>
j--)
for(i=125;
i>
i--);
voiddisplay(ucharsh_c,ucharg_c)//显示函数
//voiddisplay(ucharba_c,ucharsh_c,ucharg_c)//显示函数
dula=1;
/************************************************************
P0=table[ba_c];
//显示个位数码管的值
//产生一个下降沿将数据锁存
dula=0;
wela=0;
P0=0x08;
//送位码点亮十位数码管
wela=1;
//调用延时函数,数码管亮5ms
************************************************************/
P0=table[sh_c]&
//段码送至P0口,显示十位数码管的值,并在十位数码管上显示小数点。
P0=0x10;
//送位码点亮个位数码管
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实测 通过 数码管 显示 程序
![提示](https://static.bingdoc.com/images/bang_tan.gif)