while(1)
{
DataPort=WeiMa[i]; //取位码
LATCH2=1; //位锁存
LATCH2=0;
if(Flag) //判断是否是闪烁标志?
DataPort=DuanMa[i]; //取显示数据,
//段码正常显示
else
DataPort=0; //不显示
LATCH1=1; //段锁存
LATCH1=0;
Delay(200); //扫描间隙延时,时间太长会闪
//烁,太短会造成重影
i++;
if(8==i) //检测8位扫描完全结束?如扫描
//完成则从第一个开始再次扫描8位
i=0;
j++;
if(200==j) //延时闪烁时间
{
j=0;
Flag=!Flag;
}
单片机程序 为什么闪烁时间比延时时间长了 程序就出错? 程序如下:
答案:2 悬赏:0
解决时间 2021-03-21 23:29
- 提问者网友:放荡不羁
- 2021-03-21 00:02
最佳答案
- 二级知识专家网友:茫然不知崩溃
- 2021-03-21 00:19
仅供参考:
while(1) {
i = 0;
if(Flag) //判断是否是闪烁标志?
for (k = 0; k < 100; k++) {
DataPort = WeiMa[i]; LATCH2 = 1; LATCH2 = 0; //取位码 //位锁存
DataPort = DuanMa[i]; LATCH1 = 1; LATCH1 = 0; //取显示数据,//段锁存
Delay(20); //扫描间隙延时,时间太长会闪
i++;
if(i >= 8) i = 0; //检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位
}
else
for (k = 0; k < 100; k++) {
DataPort = WeiMa[i]; LATCH2 = 1; LATCH2 = 0; //取位码 //位锁存
DataPort = 0 ; LATCH1 = 1; LATCH1 = 0; //不显示 //段锁存
Delay(20); //扫描间隙延时,时间太长会闪
i++;
if(i >= 8) i = 0; //检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位
}
j++;
if(j >= 20) { //延时闪烁时间
j = 0;
Flag = !Flag;
}
}
while(1) {
i = 0;
if(Flag) //判断是否是闪烁标志?
for (k = 0; k < 100; k++) {
DataPort = WeiMa[i]; LATCH2 = 1; LATCH2 = 0; //取位码 //位锁存
DataPort = DuanMa[i]; LATCH1 = 1; LATCH1 = 0; //取显示数据,//段锁存
Delay(20); //扫描间隙延时,时间太长会闪
i++;
if(i >= 8) i = 0; //检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位
}
else
for (k = 0; k < 100; k++) {
DataPort = WeiMa[i]; LATCH2 = 1; LATCH2 = 0; //取位码 //位锁存
DataPort = 0 ; LATCH1 = 1; LATCH1 = 0; //不显示 //段锁存
Delay(20); //扫描间隙延时,时间太长会闪
i++;
if(i >= 8) i = 0; //检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位
}
j++;
if(j >= 20) { //延时闪烁时间
j = 0;
Flag = !Flag;
}
}
全部回答
- 1楼网友:抱不住太阳的深海
- 2021-03-21 01:36
首先你的程序有这么几处错误、1)你定义p2=p2^1时应该在前面加上位定义指令sbit
2)你定义的无符号整型数unsigned int a;其中a的取值范围是
0~65535,而你的a=1000000;肯定是不对的。
如果你想控制多脚的话,可以对一个i/o直接赋值啊,比如让p0=0xff就是让p0的八个引脚全部为高电平,让p0=0x00就是让p0的八个引脚全部为低电平
看来你是对单片机刚刚入手吧,可以先多看看资料,再从编一些简单的小程序入手
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |