#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit pw=P1^4;//發光管的使能端
sbit wei=P2^7;//數碼管的位選端
sbit duan=P2^6;//數碼管的段選端
uchar temp,aa,num; //
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//數碼管數顯編碼表
void delay(uint z);//延時
void main()
{
pw=0; //開啟發光管使能端
num=0; //附于初始值為0
aa=0; //附于始值為0
TMOD=0X01; //設定計時/計數器模式控制暫存器值
TH0=(65536-50000)/256; //中斷初值,高8位
TL0=(65536-50000)%256; //中斷初值,低8位
EA=1; //開啟總中斷
ET0=1; //開啟定時中斷
TR0=1; //啟動定時
temp=0xfe; //附值發光管第一個燈亮11111110
P0=temp;
duan=1; //開啟段選
P0=table[0]; //段選顯示數值初值為0
duan=0; //關閉段選,鎖存
wei=1; //讓位選處于直通狀態
P0=0x100; //位選位數值,數碼管位數,二制為100000000,0的才能亮,這樣八個數碼管都亮
wei=0; //鎖存,保持上一步的狀態
while(1) //死循環下級程序.
{
delay(1000); //流水燈速度
temp=_crol_(temp,1); //向左移位
P0=temp;
}
}
void delay(uint z) //流水燈延時函數
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void timer0() interrupt 1 //中斷函數
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20) //數顯速度
{
aa=0;
num++;
if(num==16) //數顯值到最高位F時返回初值0;
num=0;
duan=1;
P0=table[num];
duan=0;
}
}
你把
pw=0; //開啟發光管使能端
這一行刪掉就不行了嗎?
你開啟了發光管,他當然會隨著數碼管的變化而變化,因為都是接的P0 口,你只要把發光管關閉就行了 刪掉那一行 或者是改為pw=1;
你所說的干擾是一種什么現象呢?我給你分析一下
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |