专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
数码管点亮后很暗
2019-07-16 01:39
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
8688
7
1700
求解:该程序为什么缺少while语句后数码管点亮后很暗而且显示不对是什么原因,while语句在这除了循环外在这还有什么作用?
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=0x7f;
dula=0;
while(1);
}
谢谢!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
wyb0104
1楼-- · 2019-07-16 05:09
精彩回答 2 元偷偷看……
加载中...
xouou
2楼-- · 2019-07-16 05:50
虽不晓,但觉吊~~~
楼主没看任何资料 直接自己写程序
加载中...
425070355
3楼-- · 2019-07-16 06:19
{:14:}
加载中...
wyb0104
4楼-- · 2019-07-16 07:27
你写程序的顺序有问题,本来是这样的:
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
wela=1;//位锁开
P0=0xfe;//P0赋值0xfe,就是最后一个数码管点亮
wela=0;//位锁关,锁定0xfe,锁定最后一个数码管亮
dula=1;//段锁开
P0=0x7f;//P0赋值0x7f,就是显示8
dula=0;//段锁关,锁定0x7f,锁定显示8
while(1);//while的空循环,程序停在这里不动了,不改变P0,也不改变位锁和段锁
}这样,程序貌似是正常的
但是去掉while(1)之后,程序不会停止在某一处,程序运行完后单片机会重复跑程序
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
wela=1;//位锁开,第一次运行是没什么,但第二次运行呢?P0赋值任然是0x7f,位的值给了0x7f,所以出现乱码
P0=0xfe;//改变P0口赋值
wela=0;//位锁关
dula=1;//段锁开,注意,P0值任然是0xfe,段的值给了0xfe,所以数码管变暗
P0=0x7f;//改变P0口赋值
dula=0;//段锁关
}出现问题了
所以我一般不这样写程序。建议改成:
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
while(1)//while循环写到这是因为while循环比程序重新运行要快,可以试一试把while去掉
{
P0=0xfe;//改变P0口赋值
wela=1;//位锁开,位的值赋给0xfe
wela=0;/位锁关,位的值锁定0xfe
P0=0x7f;//改变P0口赋值
dula=1;//段锁开,段的值赋给0x7f
dula=0;//段锁关,段的值锁定0x7f
}
}这样,不管你让程序停在某处还是让程序循环都不会出现错误
加载中...
heishe
5楼-- · 2019-07-16 11:19
相当于虽然赋值了却没有给显示的机会,你查查静态显示与动态显示就明白了
加载中...
极速style
6楼-- · 2019-07-16 11:46
精彩回答 2 元偷偷看……
加载中...
1
2
下一页
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
东软载波ESF0654 PDS开发板串口USART0代码分享
1 个回答
普通32位单片机使用linux的应用代码
5 个回答
东软载波ESF0654 PDS开发板AT24C04的调试
9 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
楼主没看任何资料 直接自己写程序
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
wela=1;//位锁开
P0=0xfe;//P0赋值0xfe,就是最后一个数码管点亮
wela=0;//位锁关,锁定0xfe,锁定最后一个数码管亮
dula=1;//段锁开
P0=0x7f;//P0赋值0x7f,就是显示8
dula=0;//段锁关,锁定0x7f,锁定显示8
while(1);//while的空循环,程序停在这里不动了,不改变P0,也不改变位锁和段锁
}这样,程序貌似是正常的
但是去掉while(1)之后,程序不会停止在某一处,程序运行完后单片机会重复跑程序
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
wela=1;//位锁开,第一次运行是没什么,但第二次运行呢?P0赋值任然是0x7f,位的值给了0x7f,所以出现乱码
P0=0xfe;//改变P0口赋值
wela=0;//位锁关
dula=1;//段锁开,注意,P0值任然是0xfe,段的值给了0xfe,所以数码管变暗
P0=0x7f;//改变P0口赋值
dula=0;//段锁关
}出现问题了
所以我一般不这样写程序。建议改成:
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
while(1)//while循环写到这是因为while循环比程序重新运行要快,可以试一试把while去掉
{
P0=0xfe;//改变P0口赋值
wela=1;//位锁开,位的值赋给0xfe
wela=0;/位锁关,位的值锁定0xfe
P0=0x7f;//改变P0口赋值
dula=1;//段锁开,段的值赋给0x7f
dula=0;//段锁关,段的值锁定0x7f
}
}这样,不管你让程序停在某处还是让程序循环都不会出现错误
一周热门 更多>