0
本帖最后由 eehome 于 2013-1-5 09:58 编辑
我是个单片机新手,最近在学郭天祥的视频,但是发现protues上模拟出来的和郭天祥在视频当中显示的有许多偏差,有时查好久都查不出问题到底问题出在哪,感觉好沮丧。下面这个程序是一个学长说单片机的一个定时器只能供一个子程序使用,我想验证一下,但是当我各种调试都改不出。。。 比如说去掉 求指点交流
/*验证是否可以用一个定时器0实现控制2个输出(LED闪烁,数码管扫描输出)
while大循环实现 6位数码管从0~5循环显示
当按下按钮 P3.2口为0 触发外部中断0 LED开始取反 使得LED开始闪烁
问题在于2个好像都有点问题
*/
#include
#define uint unsigned int
#define uchar unsigned char
***it dula=P2^6;
***it wela=P2^7;
***it LED=P2^1;
uchar numdu,numwe,count; //变量声明
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code tablewe[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf
};
void init();
void display();
void main()
{
init(); //初始化
while(1)
{
display(); //显示函数
}
}
void init()
{
numwe=0;
numdu=0;
dula=0;
wela=0;
count=0;
LED=1; //关LED
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
IT0=1; //电平触发方式
EX0=1;
}
void exter0() interrupt 0 //外部中断0 LED1秒取反 初始化化
{
if(count==20)
{
LED=~LED;
}
}
void display () //显示函数
{ if(count==20)
{count=0;
numdu++;
if(numdu==7)
numdu=1;
dula=1;
P0=table[numdu];
dula=0;
wela=1;
P0=tablewe[numwe];
wela=0;
numwe++;
if(numwe==6)
numwe=0;
}
}
void timer0() interrupt 1 //定时器0
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
}
|
|