对于初学者来说,通过本程序,可以将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)
|