首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

stc12c单片机 t1让蜂鸣器响和t0刷新点阵,不知道是不是冲突,如何解决

2012-11-07 
stc12c单片机 t1让蜂鸣器响和t0刷新点阵,不知道是不是冲突,怎么解决?stc12c单片机 t1 t0不知道是不是冲突,

stc12c单片机 t1让蜂鸣器响和t0刷新点阵,不知道是不是冲突,怎么解决?
stc12c单片机 t1 t0不知道是不是冲突,怎么解决?

t0用来刷新点阵,2ms一列,16ms一遍

用T1实现 蜂鸣器'音乐播放'功能,就是不断的改变th1 tl1,

一播放音乐,点阵就不不显示了,就好像t0关了一样,
更令我疑惑的是播放完毕以后,,点阵也不恢复显示,

后来尝试播放完毕后,加一句tr0=1,点阵就能恢复显示...
问题是我根本就没关过tr0..

我比较菜,我认为t0中断级别高,按理说用t1播放音乐,不会影响到t0的刷新

怎么会冲突呢,怎么解决?

while(1)
{
if(BeepFlag)
{
BeepFlag=0;
ET1=1;
for(i=0;i<110;i=i+3)
{  
MusicN=MusicYJM[i]+7*MusicYJM[i+1]-1;
TH1=FREQH[MusicN];
TL1=FREQL[MusicN];
TR1=1;
delay(MusicYJM[i+2]);
}
ET1=0;
SPK=0;
///////TR0=1;


}


void timer0() interrupt 1
{
TH0=(65536-1982)/256;//2ms1982 3ms2972 11.888
TL0=(65536-1982)%256;  
DisplayT1(0,8);//display里面没有延时什么的,就是显示某一列
}

void timer1() interrupt 3
{
TR1=0;  
SPK=!SPK;
TH1=FREQH[MusicN];
TL1=FREQL[MusicN];
TR1=1;
}

[解决办法]
用过STC10的单片机,没发现你说的问题

也看不出你的程序有什么问题

你可以测试一下,程序走到什么地方T0关掉了,比如在的while循环里一步步的设置一个较长的延时,用灯或串口输出状态表示走到哪一步了,看看到底是走到那里T0停掉了,然后在判断是否是芯片问题或其他。

热点排行