单片机中断扫描问题,求赐教~~

2019-07-16 05:03发布

单片机进行0到59秒动态扫描显示,仿真老是不对啊,程序改了很多次,基本上还是有问题,憋的慌
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dl=P2^6;
sbit wl=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar count,sec,min;
void delay(uint);
  void main()
{
TMOD=0x01;
TL0=0x4c;
TH0=0x00;
EA=1;
ET0=1;
TR0=1;
P0=table[sec];
dl=1;
dl=0;
P0=0xfe;
wl=1;
wl=0;
delay(10);
P0=table[min];
dl=1;
dl=0;
P0=0xfd;
wl=1;
wl=0;
delay(10);

if(count==20)
{
count=0;
sec++;
}
  if(sec==60)
  {
  sec=0;
  min++;
     }
   if(min==60)
   {
   min=0;
   }
}
/********************************/
void delay(uint i)
{
uint j;
for(;i>0;i--)
  for(j=100;j>0;j--);
}
/********************************************/
void time0()interrupt 1
{
TL0=0x4c;
TH0=0x00;
count++;
}
proteus.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
lstcspring
1楼-- · 2019-07-16 06:09
说清楚具体是什么问题,我不能搭个电路调试你这个程序啊
gdfch
2楼-- · 2019-07-16 10:37
lstcspring 发表于 2012-7-26 12:21
说清楚具体是什么问题,我不能搭个电路调试你这个程序啊

仿真的时候乱码啊,各种乱码~~
lovezjf234
3楼-- · 2019-07-16 16:20
 精彩回答 2  元偷偷看……
woshiaokeman
4楼-- · 2019-07-16 17:40
楼上正解,还有一个就是你可以试试段选和位选的位置调换。
这个在仿真和实际存在一定的差距我原来遇到这个问题你可以试试。
gdfch
5楼-- · 2019-07-16 18:28
lovezjf234 发表于 2012-7-26 18:01
一,你的数码管是共阳的还是共阴的,来正确设置你的段码表。二,你的函数里面也没有while循环,所以你的程 ...

数码管是共阴的,码段正确,程序我又改动了一下,可以计数了,就是显示有问题,设置延迟大时,交替显示,延迟小时,显示不全。。。。。。用的仿真电路就是郭天祥的。。。。。
gdfch
6楼-- · 2019-07-16 21:20
woshiaokeman 发表于 2012-7-27 00:42
楼上正解,还有一个就是你可以试试段选和位选的位置调换。
这个在仿真和实际存在一定的差距我原来遇到这个 ...

我试着改动段选和位选,现在可以显示,但有个神奇的现象,到个别数字时不显示,然后又正常了。。。。程序如下,求达人可以仿真一下。。。。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dl=P2^6;
sbit wl=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar count,sec,min;
void delay(uint);
void scan();
  void main()
{
TMOD=0x01;
TL0=0x4c;
TH0=0x00;
EA=1;
ET0=1;
TR0=1;
while(1)
{
scan ();
}
}
/**************动态扫描******************/
void scan ()
{
wl=1;
P0=0xfe;
wl=0;
dl=1;
P0=table[min];
dl=0;
delay(20);
wl=1;
P0=0xfd;
wl=0;
dl=1;
P0=table[sec];
dl=0;
delay(20);
}
/**********************延迟**********************/
void delay(uint i)
{
uint j;
for(;i>0;i--)
  for(j=100;j>0;j--);
}
/*********************中断***********************/
void time0()interrupt 1
{
TL0=0x4c;
TH0=0x00;
count++;
if(count==20)
{
count=0;
sec++;
}
  if(sec==10)
  {
  sec=0;
  min++;
     }
   if(min==6)
   {
   min=0;
   }
}

一周热门 更多>