标题:
16位二进制数转十进制数显示_共阳数码管单片机程序
[打印本页]
作者:
myhj
时间:
2019-7-26 21:24
标题:
16位二进制数转十进制数显示_共阳数码管单片机程序
对于初学者来说,通过本程序,可以将16位二进制数转换成十进制并显示出来,对于高位数据的无效零,还进行了消零处理。
单片机源程序如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DIG_CODE[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳段码值0~9
unsigned char DisplayData[8]; //用来存放要显示的8位数的值
sbit DS =P1^0; //串行数据输入DS
sbit RCLK =P1^1; //输出锁存器控制脉冲ST_CP
sbit SCLK =P1^2; //移位时钟脉冲SH_CP
void smgxs(uchar date,uchar dres);
void delayms(unsigned int x);
void Btobcd(unsigned int myhj);
main()
{
uchar i,hj,tem;
Btobcd(0xFEEF); //给定一个16位的INT类型数
while(1)
{
tem=0x80; //位码初值
for(i=0;i<8;i++) smgxs(DisplayData[i],tem>>i); //先送段码,即高位数据,再送位码
}
}
void smgxs(uchar date,uchar dres) //595写数据程序
{
uchar i;
for (i=0;i<8;i++) //写段码数据
{
SCLK=0;
DS=date<<i & 0x80; //取最高位
SCLK=1; //移位端给上升沿
}
for (i=0;i<8;i++) //写位码数据
{
SCLK=0;
DS=dres<<i & 0x80; //这样取最高位
SCLK=1; //移位端给上升沿
}
RCLK=0; //锁存数据,并在数码管上显示
RCLK=1;
}
void delayms(unsigned int x) //延时子程序
{
unsigned int hi,hj;
for(hi=0;hi<x;hi++)
for(hj=0;hj<112;hj++);
}
void Btobcd(unsigned int myhj) //对16位int型数据进行BCD译码并存入数组
{
DisplayData[0]=DIG_CODE[myhj%100000000/10000000];
if(DisplayData[0]==0xc0) DisplayData[0]=0xFF; //无效0消隐
DisplayData[1]=DIG_CODE[myhj%10000000/1000000];
if(DisplayData[0]==0xc0| DisplayData[1]==0xc0 )
DisplayData[1]=0xFF;
DisplayData[2]=DIG_CODE[myhj%1000000/100000];
if(DisplayData[0]==0xc0| DisplayData[1]==0xc0 |
DisplayData[2]==0xc0 ) DisplayData[2]=0xFF;
DisplayData[3]=DIG_CODE[myhj%100000/10000];
if(DisplayData[0]==0xc0| DisplayData[1]==0xc0 |
DisplayData[2]==0xc0 | DisplayData[3]==0xc0 )
DisplayData[3]=0xFF;
DisplayData[4]=DIG_CODE[myhj%10000/1000];
if(DisplayData[0]==0xc0| DisplayData[1]==0xc0 |
DisplayData[2]==0xc0 | DisplayData[3]==0xc0 |
DisplayData[4]==0xc0 ) DisplayData[4]=0xFF;
DisplayData[5]=DIG_CODE[myhj%1000/100];
if(DisplayData[0]==0xc0| DisplayData[1]==0xc0 |
DisplayData[2]==0xc0 | DisplayData[3]==0xc0 |
DisplayData[4]==0xc0 | DisplayData[5]==0xc0 )
DisplayData[5]=0xFF;
DisplayData[6]=DIG_CODE[myhj%100/10];
if(DisplayData[0]==0xc0| DisplayData[1]==0xc0 |
DisplayData[2]==0xc0 | DisplayData[3]==0xc0 |
DisplayData[4]==0xc0 | DisplayData[5]==0xc0 |
DisplayData[6]==0xc0) DisplayData[6]=0xFF;
DisplayData[7]=DIG_CODE[myhj%10/1];
}
复制代码
所有资料51hei提供下载:
16位二进制数转十进制数显示_共阳数码管.rar
(28.34 KB, 下载次数: 8)
2019-7-26 21:21 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2019-7-27 02:58
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1