电子产业一站式赋能平台

PCB联盟网

搜索
查看: 2732|回复: 7
收起左侧

大一菜鸡求帮忙 大哥们 我快被急死了

[复制链接]

49

主题

288

帖子

1533

积分

三级会员

Rank: 3Rank: 3

积分
1533
发表于 2022-6-15 18:01:51 | 显示全部楼层 |阅读模式
为啥我这个程序没错 烧录进仿真软件就只亮一个灯 虽然我知道就是用 延时函数 但是我最近知道左移右移了 就不想用那种亮一个灯 延时一下的那种了 现在这种情况该如何解决呢

大一菜鸡求帮忙 大哥们 我快被急死了-1.jpg

大一菜鸡求帮忙 大哥们 我快被急死了-2.jpg
回复

使用道具 举报

585

主题

910

帖子

4977

积分

四级会员

Rank: 4

积分
4977
发表于 2022-6-15 18:02:15 | 显示全部楼层
你的延时不对吧,延时是无限长了
回复 支持 反对

使用道具 举报

587

主题

981

帖子

5126

积分

四级会员

Rank: 4

积分
5126
发表于 2022-6-15 18:02:53 | 显示全部楼层
引脚不能直接用移位。要先赋值16进制数,再移位
回复 支持 反对

使用道具 举报

600

主题

954

帖子

5061

积分

四级会员

Rank: 4

积分
5061
发表于 2022-6-15 18:03:37 | 显示全部楼层
#include <REGX52.H>
#include <INTRINS.H>


void Delay500ms()//@12.000MHz  这部分由烧写程序SPC_IST生成的
{
unsigned char i, j, k;


_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}




void main()//主函数部分,已调试好
{
while(1)
{
unsigned char i;
for(i=0;i<8;i++)
{
P2=~((~0xFE)<<i);//首先1111 1110翻转成0000 0001,左移i位,最后再翻转一次
Delay500ms();
}
}
}
回复 支持 反对

使用道具 举报

598

主题

943

帖子

5138

积分

四级会员

Rank: 4

积分
5138
发表于 2022-6-15 18:03:42 | 显示全部楼层
delay你才100,一下就过掉了,用65000试下
回复 支持 反对

使用道具 举报

2851

主题

4614

帖子

2万

积分

官网认证

Rank: 3Rank: 3

积分
25793

活跃会员热心会员推广达人优秀版主

发表于 2022-6-15 18:04:47 | 显示全部楼层
你知道51运行一次while循环才多少微秒吗?你这个100减完才多长时间啊,去查查吧。然后你试试把P0口的初值赋值挪到while前面试试看是不是又不一样了?你现在的程序看起来是延时太短然后while每一次都会重新把p0改成fe,看起来是没有变,实际上移位过程已经在非常短的时间里做完又重新赋值fe了,其他的灯都是一闪而过就灭了,只有第一个灯是始终给低电平。
回复 支持 反对

使用道具 举报

579

主题

911

帖子

5007

积分

四级会员

Rank: 4

积分
5007
发表于 2022-6-15 18:05:30 | 显示全部楼层
移位建议用左移函数crol或者用数组,你用单用<<会导致一到八个灯一起亮
回复 支持 反对

使用道具 举报

604

主题

947

帖子

5151

积分

四级会员

Rank: 4

积分
5151
发表于 2022-6-15 18:06:17 | 显示全部楼层
P0口为啥不上拉电阻?
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表