標(biāo)題: 流水燈和數(shù)顯同時(shí)工作的干擾問(wèn)題 [打印本頁(yè)]

作者: hhdd    時(shí)間: 2010-4-27 14:42
標(biāo)題: 流水燈和數(shù)顯同時(shí)工作的干擾問(wèn)題

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit pw=P1^4;//發(fā)光管的使能端
sbit wei=P2^7;//數(shù)碼管的位選端
sbit duan=P2^6;//數(shù)碼管的段選端
uchar temp,aa,num; //
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//數(shù)碼管數(shù)顯編碼表
void delay(uint z);//延時(shí)

void main()
{
 pw=0; //開(kāi)啟發(fā)光管使能端
 num=0; //附于初始值為0
 aa=0; //附于始值為0
 TMOD=0X01; //設(shè)定計(jì)時(shí)/計(jì)數(shù)器模式控制暫存器值
 TH0=(65536-50000)/256; //中斷初值,高8位
 TL0=(65536-50000)%256; //中斷初值,低8位
 EA=1;  //開(kāi)啟總中斷
 ET0=1;  //開(kāi)啟定時(shí)中斷
 TR0=1;  //啟動(dòng)定時(shí)
 temp=0xfe; //附值發(fā)光管第一個(gè)燈亮11111110
 P0=temp;
 duan=1;  //開(kāi)啟段選
 P0=table[0]; //段選顯示數(shù)值初值為0
 duan=0;   //關(guān)閉段選,鎖存
 wei=1;  //讓位選處于直通狀態(tài)
 P0=0x100; //位選位數(shù)值,數(shù)碼管位數(shù),二制為100000000,0的才能亮,這樣八個(gè)數(shù)碼管都亮
 wei=0;  //鎖存,保持上一步的狀態(tài)
 
 while(1) //死循環(huán)下級(jí)程序.
 { 
  delay(1000); //流水燈速度 
  temp=_crol_(temp,1); //向左移位
  P0=temp; 
  
 }

}
void delay(uint z) //流水燈延時(shí)函數(shù)
{
 uint x,y;
  for(x=z;x>0;x--)
   for(y=110;y>0;y--);

}
void timer0() interrupt 1 //中斷函數(shù)
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 aa++;
  if(aa==20) //數(shù)顯速度
   {
    aa=0;
    num++;
    if(num==16) //數(shù)顯值到最高位F時(shí)返回初值0;
     num=0;
    duan=1;
    P0=table[num];
    duan=0;
   }
}


作者: hhdd    時(shí)間: 2010-4-27 14:47
這個(gè)流水燈會(huì)被數(shù)碼管干擾得很厲害,因?yàn)橛玫氖侨龢O管,而不是鎖存器74HC573,不懂如何在同工作下消除干擾.
作者: jjide    時(shí)間: 2010-4-27 23:53

你把

pw=0; //開(kāi)啟發(fā)光管使能端

 

這一行刪掉就不行了嗎? 

 

 你開(kāi)啟了發(fā)光管,他當(dāng)然會(huì)隨著數(shù)碼管的變化而變化,因?yàn)槎际墙拥腜0 口,你只要把發(fā)光管關(guān)閉就行了 刪掉那一行 或者是改為pw=1;

 

 


作者: hhdd    時(shí)間: 2010-5-1 10:11
首先很感謝你的回復(fù),這個(gè)程序本身就是要讓流水燈和數(shù)顯同時(shí)工作,如果pw關(guān)了就相當(dāng)于關(guān)掉了發(fā)光管的電源.呵呵~
作者: admin    時(shí)間: 2010-5-1 15:15

你所說(shuō)的干擾是一種什么現(xiàn)象呢?我給你分析一下


作者: cj477637440    時(shí)間: 2010-5-14 12:53
由于你的發(fā)光管跟數(shù)碼管都共用的,當(dāng)你段選、位選結(jié)束以后,你的P0=0x100; 下面才開(kāi)始while循環(huán)去實(shí)現(xiàn)發(fā)光管位移。要不你在位選結(jié)束后面加個(gè)延時(shí)試試看,如果不行,試試把temp=oxfe; P0=temp; 放到位選結(jié)束的后面,因?yàn)檫@樣的話 temp 重新賦值給P0來(lái)點(diǎn)亮發(fā)光管,然后進(jìn)入循環(huán),進(jìn)行流水燈。這樣應(yīng)該就行了.... 因?yàn)槲沂诸^上沒(méi)有單片機(jī)板,沒(méi)有具體試過(guò)。希望能對(duì)你有幫助
作者: douzi725    時(shí)間: 2010-5-15 22:27
你用兩個(gè)定時(shí)器試試




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1