|
內(nèi)容:循環(huán)顯示十六進制數(shù)0~F- #include "reg52.h"
- sbit EnWei =P2^7; //位碼鎖存器使能端
- sbit EnSeg =P2^6; //段碼鎖存器使能端
- #define DATAPORT (P0) //段/位碼輸出端口
- #define WEICODE (0x7f) //位碼初始值
- #define OFFCODE (0xff) //定義熄滅碼
- #define INCSPEED (10) //顯示內(nèi)容變化速度
- unsigned char code SegTab[]={ //定義段碼表(共陰極)
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71
- };
- unsigned char DispBuf[8]={ //定義顯示緩沖區(qū)
- 0x00,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff
- };
- //延時函數(shù)
- //x為延時時間,范圍1~65535
- void xDelay(unsigned int x)
- {
- unsigned char y;
- for(;x>0;x--)
- for(y=110;y>0;y--);
- }
- //數(shù)值分離函數(shù),將要顯示的數(shù)各數(shù)值位分離到DispBuf數(shù)組中
- //x為要顯示的數(shù),范圍0~4294967295
- void GetDispBufValue(unsigned long x)
- {
- unsigned char Temp,i;
- i=0; //作為DispBuf數(shù)組的下標
- while(x>0)
- {
- Temp=x%10; //使x對10求余,取出最低位
- x/=10; //更改x的值,為下一輪作準備
- DispBuf[i++]=Temp; //將取出的數(shù)值位存入顯示緩沖
- }
- while(i<8) //如果x不足8位,將其余的位填上熄滅碼
- {
- DispBuf[i++]=OFFCODE;
- }
- }
- //顯示函數(shù)
- //x要顯示的值,范圍0~4294967295
- void Display(unsigned long x)
- {
- unsigned char WeiCode=WEICODE,i;
- GetDispBufValue(x); //先將顯示值的數(shù)值位分離出來
- for(i=0;i<8;i++) //循環(huán)刷新每一位數(shù)碼管
- {
- if(DispBuf[i]!=OFFCODE)
- {
- DATAPORT=SegTab[DispBuf[i]]; //輸出段碼并鎖存
- EnSeg=1;
- EnSeg=0;
- DATAPORT=WeiCode; //輸出位碼并鎖存
- EnWei=1;
- EnWei=0;
- }
- WeiCode>>=1; //為下一位數(shù)值準備位碼
- WeiCode|=0x80;
- xDelay(5); //延時一會,使剛被點亮的位穩(wěn)定
- }
- DATAPORT=0x00; //熄滅最后一位被點亮的數(shù)碼管
- EnSeg=1;
- EnSeg=0;
- }
- void main(void)
- {
- unsigned char IncSpeed=INCSPEED;
- unsigned long x=76543210;
- P2=0x00;
- while(1){
- Display(x); //調(diào)用顯示函數(shù)
- //if(--IncSpeed==0) //減到0時,為顯示數(shù)值加1
- //{
- // IncSpeed=INCSPEED; //恢復初值,為下一輪作準備
- //x++; //顯示數(shù)值加1
- //}
- }
- }
復制代碼
|
-
-
05實驗五 靜態(tài)顯示.zip
2016-11-5 20:58 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
16.67 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5
|