找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6085|回復(fù): 4
收起左側(cè)

[求助]數(shù)碼管自加計數(shù)

[復(fù)制鏈接]
ID:37875 發(fā)表于 2012-4-14 15:03 | 顯示全部樓層 |閱讀模式

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit wei =P2^7;
sbit duan=P2^6;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
uint temp,n,bai,shi,ge;
void delay();

void display (uchar bai,uchar shi,uchar ge); //顯示子函數(shù)


void main()
{ wei=0;temp=0;
 duan=0;
 TMOD=0x01;   //選擇定時器及其工作方式
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;   //開總中斷
 ET0=1; //開定式終端
 TR0=1;  //啟動定時

while(1)
{

  wei=1;
  P0=0xfb;
  wei=0;
  duan=1;
  P0=table[ge];
  duan=0;

delay();
  wei=1;
  P0=0xfd;
  wei=0;
  duan=1;
  P0=table[shi];
  duan=0;
delay();
  wei=1;
  P0=0xfe;
  wei=0;
  duan=1;
  P0=table[bai];
  duan=0;
delay();  
  
}
}


void jishuqi () interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 n++;
 if(n==20)
    { n=0;
  temp++;
 }
 bai=temp/100;
 shi=temp%100/10;
 ge =temp%100%10;
}


void delay()
{    uint x,y;
 for(x=5;x>0;x--)
  for(y=110;y>0;y--);
}

這位是我學(xué)郭天祥編寫的數(shù)碼管自家計數(shù)器可是為何有的數(shù)字不顯示


 

回復(fù)

使用道具 舉報

ID:30546 發(fā)表于 2012-4-15 21:46 | 顯示全部樓層

這是我看他的視頻寫的。你參考下

#include<reg52.h>//導(dǎo)入頭文件
#define uchar unsigned char//宏定義
#define uint unsigned int//宏定義
sbit dula=P2^6;//定義段選口
sbit wela=P2^7;//定義位選口
//數(shù)碼表
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

uchar temp,bai,shi,ge,aa;//變量聲明

void display(uchar bai,uchar shi,uchar ge);//三位數(shù)顯示函數(shù)聲明
void delay(uint z);//延時函數(shù)聲明
void init();//初始化聲明
void main()
{
 init();//調(diào)用初始化函數(shù)
 while(1)
 {
  if(aa==20)//判斷定時器1S時間
  {
   aa=0;//定時器清0
   temp++;
   if(temp==100)
   {
    temp=0;
   }//只規(guī)定從0加到100
   bai=temp/100;//求百位數(shù)
   shi=temp%100/10;//求十位數(shù)
   ge=temp%10;//求個位數(shù)
  }
  display(bai,shi,ge);//調(diào)用三位數(shù)顯示函數(shù)
 }
}
//1MS延時函數(shù)
void delay(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
//三位數(shù)顯示函數(shù)
void display(uchar bai,uchar shi,uchar ge)
{
   dula=1;
  P0=table[bai];//P0口送百位數(shù)碼
  dula=0;
  P0=0xff;//消隱
  wela=1;
  P0=0xfe;
  wela=0;
  delay(5);//延時5MS,不能超過定時器的時間,不然會出錯

  dula=1;
  P0=table[shi];//P0口送十位數(shù)碼
  dula=0;
  P0=0xff;//消隱
  wela=1;
  P0=0xfd;
  wela=0;
  delay(5);//延時5MS,不能超過定時器的時間,不然會出錯

  dula=1;
  P0=table[ge];//P0口送個位數(shù)碼
  dula=0; 
  P0=0xff;//消隱
  wela=1;
  P0=0xfb;
  wela=0;
  delay(5);//延時5MS,不能超過定時器的時間,不然會出錯
}
//程序初始化函數(shù)
void init()
{
 dula=0;//消隱,上電時關(guān)掉段鎖存器
 wela=0;//消隱,上電時關(guān)掉位鎖存器
 TMOD=0x01;//給TMOD賦值確定T0和T1的工作方式
 //50MS定時
 TH0=(65536-50000)/256;//高八位存入60轉(zhuǎn)換成十六進(jìn)制數(shù)是3C
 TL0=(65536-50000)%256;//低八位存入176轉(zhuǎn)換成十六進(jìn)制數(shù)是B0
 EA=1;//開總中斷
 ET0=1;//開定時器0中斷
 TR0=1;//啟動定時器0

}

void timer0() interrupt 1//值為0時是外部中斷0,為1時是定時器計數(shù)器0
{
 ////再裝一次初值,因為值裝滿后清0,這樣下次進(jìn)入中斷就會變成0
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 aa++;
}

回復(fù)

使用道具 舉報

ID:535271 發(fā)表于 2019-6-11 14:57 | 顯示全部樓層
我也沒有顯示數(shù)字
回復(fù)

使用道具 舉報

ID:612499 發(fā)表于 2019-10-14 09:46 | 顯示全部樓層
延時5MS應(yīng)該有問題,一個數(shù)碼管最多1MS,不然會全部熄滅,或者數(shù)碼管變暗,達(dá)不到理想的效果。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表