专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
请教我的代码问题出在哪?
2019-03-24 19:27
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
18222
19
1122
利用寒假学习学习keil c51。在学到动态扫描的时候,有这么一道题:利用实验板的三个数码管显示从000~999,每300ms增加一次,不断周而复始的循环。 可是我编好之后,发现只能点亮一个数码管。。 研究了一天,也没发现问题。。。
求坛友们,放假没事帮俺研究研究呗。。 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
辛昕
2019-03-26 14:55
#include<reg52.h>
#typedef uchar unsigned char;
#typedef uint unsigned int;
/*这是共阳管*/
/*所以,全暗是 0x00*/
#define DAWN 0
const uchar num[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit le = P3^7;
void T0_init(void);
void main(void)
{
T0_init();
while(1);
}
//------------------------------------------------------------
void T0_init(void)
{
TMOD = 0x01;
TH0 = 0xea; //6ms中断一次
TL0 = 0x66;
TF0 = 0; //中断标志位清零
ET0 = 1; //允许定时器0中断
EA = 1;
TR0 = 1;
}
//--------------------------------------------------------------------------
/*定时器六毫秒来一次,其实还可以再长一点,10到20毫秒刷新也够了*/
/*相比于放在主程序里,我想,放在定时器里,更方便,定期刷新*/
/*假设你使用的3位是0到2位——如果位置任意,可能要采用数组做一个地址掩码*/
void timer0(void) interrupt 1
{
uchar digit = 0;
TH0 = 0xea;
TL0 = 0x66;
static uint count = 0;
static uint number = 0;
uint Re_number;
count++;
if(count==50)
{
count=0;
number++;
if(number==1000)
number=0;
}
Re_number = number;
while(digit)
{
//这里应该还要有一个消影动作,但是,你的硬件图里,似乎没有一个地方是用来关闭138输出的。
//138的几个OE全都接地了,挺浪费的。
P2=digit;//这个顺序,也或许是 3-1-digit,具体视硬件如何连接了
P0=num[Re_number % 10];
Re_number /= 10;
}
}
复制代码
[
本帖最后由 辛昕 于 2012-1-17 12:22 编辑
]
加载中...
查看其它19个回答
一周热门
更多
>
相关问题
相关文章
基于51单片机的计算器设计
0个评论
51单片机300个proteus仿真实例下载
0个评论
51单片机 蜂鸣器
0个评论
51单片机驱动RC522模块
0个评论
基于51单片机的指纹密码锁
0个评论
AT89C51单片机制作简易密码锁
0个评论
51单片机汇编语言计数器
0个评论
51单片机精确延时设计
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- #include<reg52.h>
复制代码#typedef uchar unsigned char;
#typedef uint unsigned int;
/*这是共阳管*/
/*所以,全暗是 0x00*/
#define DAWN 0
const uchar num[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit le = P3^7;
void T0_init(void);
void main(void)
{
T0_init();
while(1);
}
//------------------------------------------------------------
void T0_init(void)
{
TMOD = 0x01;
TH0 = 0xea; //6ms中断一次
TL0 = 0x66;
TF0 = 0; //中断标志位清零
ET0 = 1; //允许定时器0中断
EA = 1;
TR0 = 1;
}
//--------------------------------------------------------------------------
/*定时器六毫秒来一次,其实还可以再长一点,10到20毫秒刷新也够了*/
/*相比于放在主程序里,我想,放在定时器里,更方便,定期刷新*/
/*假设你使用的3位是0到2位——如果位置任意,可能要采用数组做一个地址掩码*/
void timer0(void) interrupt 1
{
uchar digit = 0;
TH0 = 0xea;
TL0 = 0x66;
static uint count = 0;
static uint number = 0;
uint Re_number;
count++;
if(count==50)
{
count=0;
number++;
if(number==1000)
number=0;
}
Re_number = number;
while(digit)
{
//这里应该还要有一个消影动作,但是,你的硬件图里,似乎没有一个地方是用来关闭138输出的。
//138的几个OE全都接地了,挺浪费的。
P2=digit;//这个顺序,也或许是 3-1-digit,具体视硬件如何连接了
P0=num[Re_number % 10];
Re_number /= 10;
}
}
[ 本帖最后由 辛昕 于 2012-1-17 12:22 编辑 ]
一周热门 更多>