#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;
}
}
你把
pw=0; //開(kāi)啟發(fā)光管使能端
這一行刪掉就不行了嗎?
你開(kāi)啟了發(fā)光管,他當(dāng)然會(huì)隨著數(shù)碼管的變化而變化,因?yàn)槎际墙拥腜0 口,你只要把發(fā)光管關(guān)閉就行了 刪掉那一行 或者是改為pw=1;
你所說(shuō)的干擾是一種什么現(xiàn)象呢?我給你分析一下
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |