急救120…………真的很郁闷

[复制链接]
2497|5
 楼主| tyb520 发表于 2010-11-1 21:35 | 显示全部楼层 |阅读模式
真的很郁闷,我想用定时中断来写一段显示函数,不知道哪里出错了,请各位大虾指点下下………………
#include<reg52.h>
#define uchar unsigned char
void display();
uchar code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,   
                  0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xbf};
uchar code bitwei[]={0xe3,0xe7,0xeb,0xef,0xf3,0xf7,0xfb,0xff};//**对应的数码管1-8**
void main()
{
   TMOD=0x01;
   TH0=(65536-3000)/256;
   TL0=(65536-3000)%256;
   TR0=1;
   ET0=1;
   EA=1;
   for(;;);
}
void time() interrupt 1
{
   TH0=(65536-3000)/256;
   TL0=(65536-3000)%256;
   display();
}
void display()
{              
    uchar k=0,temp;
k=k+1;
P2=bitwei[k]; //*******P2接位选*******
temp=P2;
switch(temp)
{
   case 0xe3: P1=dis[1];break;//****P1接数据口*******
   case 0xe7: P1=dis[2];break;
   case 0xeb: P1=dis[3];break;
   case 0xef: P1=dis[4];break;
   case 0xf3: P1=dis[5];break;
   case 0xf7: P1=dis[6];break;
   case 0xfb: P1=dis[7];break;
   case 0xff: P1=dis[8];break;
   default: break;
}
}
highgear 发表于 2010-11-1 22:12 | 显示全部楼层
不知道你的错误是什么, 是编译错误, 还是程序错误?

只能大概的改改:
看样子, uchar k=0 必须是全局或者是静态变量。

其次,这样可能更好些: 
temp=bitwei[k]; //*******P2接位选*******
P2=temp;
aihe 发表于 2010-11-2 00:49 | 显示全部楼层
ls是对的
退出函数K就清零了
K要每次进入都加一次的话,不应该放入这个函数中
xwj 发表于 2010-11-2 07:22 | 显示全部楼层
2楼正解。而且你也没有考虑k的边界


再就是,如果P2口接有很重的负载的话,读出值可不一定等于赋入值,为什么要switch(temp)而不是switch(k)呢?
老鱼探戈 发表于 2010-11-2 12:46 | 显示全部楼层
2L说了,应该这样改:
1、改成局部静态变量:static uchar k=0;
2、改成全局变量,定义在函数外: uchar k=0;或则extern uchar k=0;
MIHAWK 发表于 2010-11-2 13:16 | 显示全部楼层
中断里面调用函数,似乎不大好吧:L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:脚踏实地的做人,脚踏实地的做事……

7

主题

276

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部