标题:
未添加任务标志时均正常工作,添加后数码管无显示
[打印本页]
作者:
flaysim
时间:
2018-12-17 17:02
标题:
未添加任务标志时均正常工作,添加后数码管无显示
本帖最后由 flaysim 于 2018-12-17 19:59 编辑
目前找不到原因,求正确回答,可提供完整的程序
发现一个非常有趣的东西,
void Interrupt_T0() interrupt 1
{
uint8 i; ->static uint8 i = 0; 这样改一下居然显示了?excuese me,郁闷,完全没搞懂为什么会这样
TH0 = 0XFC;
TL0 = 0x66;
for(i = 0; i <TASK_NUM; i++)
{
if(TASK_Count[ i])
{
TASK_Count[ i]--;
if(TASK_Count[ i] == 0)
{
TASK_Mark[ i] = 0x01;
} } }}
最终结果出来了:主要问题是我在读取DS1302时钟时读了8位,多读了1位. 在未加标志位时运行良好,但是加了之后不知道怎么的起了冲突,导致计数君0x01之后就变成了0xFF....
引以为戒吧
#include <reg52.h>
#include "Nixie_tube.h"
#include "my_define.h"
#include "ds1302.h"
//void NT_display(uint8 wei,uint8 num);//例如.wei = 3,num = 7 ->点亮第三位的数码管并在上面显示7
#define TASK_NUM (1) //任务数
uint16 TASK_Count[TASK_NUM]; //任务计时数组
uint8 TASK_Mark[TASK_NUM]; //任务标志数组
void Init_T0()
{
EA = 1;
ET0 = 1;
TMOD &= 0xf0;
TMOD |= 0x01;
TH0 = 0XFC;
TL0 = 0x66;
TR0 = 1;
}
void Interrupt_T0() interrupt 1
{
uint8 i;
TH0 = 0XFC;
TL0 = 0x66;
for(i = 0; i <TASK_NUM; i++)
{
if(TASK_Count[i])
{
TASK_Count[i]--;
if(TASK_Count[i] == 0)
{
TASK_Mark[i] = 0x01;
}
}
}
}
void main()
{
uint8 i;
SetTime_ds1302(); //设置DS1302初始值
Init_T0();
TASK_Count[0] = 15; //计数15ms
TASK_Mark[0] = 0; //标志位清零
while(1)
{
TR0 = 0;
ReadTime_ds1302(); //从DS1302中读数据
TR0 = 1;
timedata_Change(); //DS1302数据格式转化
if(TASK_Mark[0] == 0x01) //当标志位为1时
{
TASK_Count[0] = 15; //重新计数15ms
TASK_Mark[0] = 0; //标志位清零
for(i = 0; i < 6; i++) //数码管显示时分秒
{
NT_display(i,timedata_1wei[i]);
delay(200);
}
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1