|
對(duì)于初學(xué)者來說,通過本程序,可以將16位二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制并顯示出來,對(duì)于高位數(shù)據(jù)的無效零,還進(jìn)行了消零處理。
單片機(jī)源程序如下:
- #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位數(shù)的值
- sbit DS =P1^0; //串行數(shù)據(jù)輸入DS
- sbit RCLK =P1^1; //輸出鎖存器控制脈沖ST_CP
- sbit SCLK =P1^2; //移位時(shí)鐘脈沖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); //給定一個(gè)16位的INT類型數(shù)
- while(1)
- {
- tem=0x80; //位碼初值
- for(i=0;i<8;i++) smgxs(DisplayData[i],tem>>i); //先送段碼,即高位數(shù)據(jù),再送位碼
- }
- }
-
- void smgxs(uchar date,uchar dres) //595寫數(shù)據(jù)程序
- {
- uchar i;
- for (i=0;i<8;i++) //寫段碼數(shù)據(jù)
- {
- SCLK=0;
- DS=date<<i & 0x80; //取最高位
- SCLK=1; //移位端給上升沿
- }
- for (i=0;i<8;i++) //寫位碼數(shù)據(jù)
- {
- SCLK=0;
- DS=dres<<i & 0x80; //這樣取最高位
- SCLK=1; //移位端給上升沿
- }
- RCLK=0; //鎖存數(shù)據(jù),并在數(shù)碼管上顯示
- RCLK=1;
-
- }
- void delayms(unsigned int x) //延時(shí)子程序
- {
- unsigned int hi,hj;
- for(hi=0;hi<x;hi++)
- for(hj=0;hj<112;hj++);
- }
- void Btobcd(unsigned int myhj) //對(duì)16位int型數(shù)據(jù)進(jìn)行BCD譯碼并存入數(shù)組
- {
- 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];
- }
復(fù)制代碼
所有資料51hei提供下載:
16位二進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制數(shù)顯示_共陽數(shù)碼管.rar
(28.34 KB, 下載次數(shù): 8)
2019-7-26 21:21 上傳
點(diǎn)擊文件名下載附件
|
|