焊接51单片机数码管模块需要什么,如果让他计时需要移位寄存器 数码管吗

后使用快捷导航没有帐号?
菜鸟求教,共阴极4位8段数码管不用锁存器该怎样焊接51单片?
在网上找了很多原理图按着焊都总是点不亮,要么点亮了段位不能操控,硬生生卡在这瓶口里,求达人指点指点,不胜感激!!!
共阴接P1的话,好像要接上拉电阻
我也是初学者
perlong 发表于
共阴接P1的话,好像要接上拉电阻
我也是初学者
你焊接之后能正常运作吗?我的段选接P0口带10K上拉电阻,位选接P2口带9013三极管,留下联系方式交流下?
其实不用三极管也可以驱动的!IO口电流可以驱以数码管的!你可以用P0=1; P2=0;试下看焊接是否正确!
直接用单片机的IO口接数码管就行了,驱动能力足够了。比如用P0口(8个)接数码管的8个段,用P2口的四个角接数码管的4个位。然后修改程序即可。
QQ图片27.png (173.07 KB, 下载次数: 0)
22:41 上传
我之前使用STC12驱动数码管,因为STC12的管脚可以配置成推挽输出模式,实际不用三极管驱动,直接接IO口驱动数码管也是没问题的,我之前做过的AVR的一个设计,没用其他驱动电路,直接接IO口。显示效果也是不错的。
郭杜良 发表于
我之前使用STC12驱动数码管,因为STC12的管脚可以配置成推挽输出模式,实际不用三极管驱动,直接接IO口驱 ...
朋友不如顺手发个焊接的电路图,要是可以的话附加个实物图来参考学习下,可以么?谢谢!
郭杜良 发表于
我之前使用STC12驱动数码管,因为STC12的管脚可以配置成推挽输出模式,实际不用三极管驱动,直接接IO口驱 ...
因为按照你的方法数码管点不量,软件也调试了好几遍也没反应
半夜梦遗 发表于
因为按照你的方法数码管点不量,软件也调试了好几遍也没反应
该软件吧,硬件是肯定没问题的。我以前用51直接接IO口驱动过数码管。
psb.jpg (80.95 KB, 下载次数: 0)
14:14 上传
Copyright &
Powered by君,已阅读到文档的结尾了呢~~
本设计主要以AT89C51单片机为核心,结合外围有关器件来实现矩阵键盘输入倒计时初始值进行数码管的倒计时功能,此次设计主要由硬件和软件两部分组成,硬件是由Protues 连接硬件电路图进行模拟仿真,软件是用Keil C 采用汇编语言或C语言编译程序。
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于单片机的倒计时钟的设计
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口关于51单片机的数码管问题_百度知道后使用快捷导航没有帐号?
查看: 3370|回复: 10
用51开发板把程序烧进去,数码管显示的数字不停的闪烁,大神看看问题出在哪了啊
在线时间2 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
#include &reg51.h&
#include &intrins.h&
#include &XPT2046.h&
//--定义使用的IO--//
#define GPIO_DIG P0& & & & & & & & & & & & & & & & //数码管IO口
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
#define GPIO_KEY P1&&& & & & & & & & & & & & //独立键盘用P1口
#define KEYUP_VAL& & & & 0xEF& & & & & & & & //P1.4&&增加
#define& & & & KEYDOWN_VAL& & & & 0xDF& & & & & & & & //P1.5&&减小
const unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
static uchar DisplayData[8];& & & & & & & & //用来存放要显示的8位数的值
static unsigned int g_iPressV& & & & //压力数据
static unsigned int g_iSpeedV& & & & //速度数据
static unsigned int g_iPowerV& & & & //功率数据
void Delay10ms(unsigned int c)& &//误差 0us
& & unsigned char a,
& & for (;c&0;c--)
& & & & & & & & for (b=38;b&0;b--)
& & & & & & & & {
& & & & & & & & & & & & for (a=130;a&0;a--);
& & & & & & & & }&&
& & & & }& && &
//void disp_init(void)
& & & & for(i = 0;i & 8;i++)
& & & & & & & & DisplayData[i] = 0;& & & &
void disp_setVal(unsigned int Val)
& & & & DisplayData[0]=DIG_CODE[0];
& & & & DisplayData[1]=DIG_CODE[0];
& & & & DisplayData[2]=DIG_CODE[0];
& & & & DisplayData[3]=DIG_CODE[Val%00];
& & & & DisplayData[4]=DIG_CODE[Val%];
& & & & DisplayData[5]=DIG_CODE[Val%];
& & & & DisplayData[6]=DIG_CODE[Val%100/10];
& & & & DisplayData[7]=DIG_CODE[Val%10/1];& & & & & & & & & & & & //最低位
void DigDisplay(void)
& & & & for(i=0;i&8;i++)
& & & & & & & & switch(i)& & & &&&//位选,选择点亮的数码管,
& & & & & & & & {
& & & & & & & & & & & & case(0):
& & & & & & & & & & & & & & & & LSA=0;LSB=0;LSC=0;//显示第0位
& & & & & & & & & & & & case(1):
& & & & & & & & & & & & & & & & LSA=1;LSB=0;LSC=0;//显示第1位
& & & & & & & & & & & & case(2):
& & & & & & & & & & & & & & & & LSA=0;LSB=1;LSC=0;//显示第2位
& & & & & & & & & & & & case(3):
& & & & & & & & & & & & & & & & LSA=1;LSB=1;LSC=0;//显示第3位
& & & & & & & & & & & & case(4):
& & & & & & & & & & & & & & & & LSA=0;LSB=0;LSC=1;//显示第4位
& & & & & & & & & & & & case(5):
& & & & & & & & & & & & & & & & LSA=1;LSB=0;LSC=1;//显示第5位
& & & & & & & & & & & & case(6):
& & & & & & & & & & & & & & & & LSA=0;LSB=1;LSC=1;//显示第6位
& & & & & & & & & & & & case(7):
& & & & & & & & & & & & & & & & LSA=1;LSB=1;LSC=1;//显示第7位& & & &
& & & & & & & & }
& & & & & & & & GPIO_DIG=DisplayData[i];//发送段码
& & & & & & & & j=5;& & & & & & & & & & & & & & & & & & & & & & & &&&//扫描间隔时间设定
& & & & & & & & while(j--);& & & &
& & & & & & & & GPIO_DIG=0x00;//消隐
unsigned char Key_Scan()
& & & & unsigned char keyValue = 0 , //保存键值
& & & & //--检测按键--//
& & & & if (GPIO_KEY != 0xFF)& & & & & & & & //检测按键否按下
& & & & & & & & Delay10ms(1);& & & & //消除抖动
& & & & & & & & if (GPIO_KEY != 0xFF)& & & & //再次检测按键是否按下
& & & & & & & & {
& & & & & & & & & & & & keyValue = GPIO_KEY;
& & & & & & & & & & & & i = 0;
& & & & & & & & & & & & while ((i&50) && (GPIO_KEY != 0xFF))& & & &&&//检测按键是否松开
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & Delay10ms(1);
& & & & & & & & & & & & & & & & i++;
& & & & & & & & & & & & }
& & & & & & & & }
& & & & return keyV& &//将读取到键值的值返回
unsigned int sys_getTorque(void)& & & & & & & & //获得扭矩
& & & & unsigned int resV
& & & & resVal = Read_AD_Data(0x94);& & & & & & & & //AIN0 电位器模拟压力
& & & & /*原始的AD数据范围为0~4095,需要转换的在下面对resVal利用公式转换成压力*/
& & & & /*这里没有转换,相当于压力从0N~4095N*/
& & & & return resV
void timer_init(void)
& & & & TMOD=0X01;& & & & & & & & //设置定时器1为模式一,即16位计算模式
& & & & TH0=()/256;& & & & //给计数寄存器赋值,50毫秒时间
& & & & TL0=()%256;
& & & & EA=1;& & & & & & & & //开启总中断
& & & & ET0=1;& & & & & & & & //开启定时器0中断
& & & & TR0=1;& & & & & & & & //启定定时器0
void main(void)
& & & & unsigned char keyV
& && & & & g_iSpeedVal = 4725;
& & & & disp_init();
& & & & timer_init();& & & & & & & & //定时中断初始化
& & & & while(1)
& & & & & & & & keyVal = Key_Scan();
& & & & & & & & switch(keyVal)& & & & & & & & & & & & & & & & & & & & & & & & //根据按键调节速度
& & & & & & & & {
& & & & & & & & case KEYUP_VAL:
& & & & & & & & & & & & g_iSpeedVal += 200;
& & & & & & & & & & & &
& & & & & & & & case KEYDOWN_VAL:
& & & & & & & & & & & & if(g_iSpeedVal & 200)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & g_iSpeedVal -= 200;
& & & & & & & & & & & & }
& & & & & & & & & & & & else
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & g_iSpeedVal = 0;
& & & & & & & & & & & & }
& & & & & & & & & & & &
& & & & & & & & default:
& & & & & & & & & & & &
& & & & & & & & }
& & & & & & & & DigDisplay();& & & & & & & & //更新显示的数据& & & &
void timer_task(void)
& & & & static unsigned int _clock = 0;& & & &
& & & & _clock += 1;
& && & & &
& & & & if(_clock == 50000)
& & & & & & & & _clock = 0;
& & & & switch(_clock % 10)& & & & & & & & & & & & & & & & & & & & & & & & //分配500ms任务周期
& & & & case 0:
& & & & & & & & g_iPressVal = sys_getTorque();& & & & & & & & //在这里获取扭矩的压力数据
& & & & & & & &
& & & & case 1:& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //计算功率
& & & & & & & & g_iPowerVal = ((unsigned long)g_iPressVal * (unsigned long)g_iSpeedVal) / 9545;
& & & & & & & &
& & & & case 2:& & & && && & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //更新显示数据
& & & && & & & & & disp_setVal(g_iPowerVal);
& & & & & & & &
& & & & default:
& & & & & & & &
void timer() interrupt 1
& & & & TH0=()/256;& & & & //重新赋值
& & & & TL0=()%256;
& & & & timer_task();
在线时间2 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
独立按键也没反应
在线时间1087 小时
威望11118 分
芯币19014 枚
E金币179 枚
TA的帖子TA的资源
程序有问题。一步一步的找吧,先写个简单的程序
在线时间1000 小时
威望4253 分
芯币6645 枚
E金币1592 枚
TA的帖子TA的资源
五彩晶圆(中级), 积分 4253, 距离下一级还需 1747 积分
五彩晶圆(中级), 积分 4253, 距离下一级还需 1747 积分
把程序分解吧,先运行一部分。使数码管显示某个数据,正常,再一点一点往上添加。
在线时间905 小时
威望4300 分
芯币5230 枚
E金币347 枚
TA的帖子TA的资源
五彩晶圆(中级), 积分 4300, 距离下一级还需 1700 积分
五彩晶圆(中级), 积分 4300, 距离下一级还需 1700 积分
这种问题,你贴一大堆可能没有人真正找时间帮你去看,不过程序的调试就是要靠自己的细心,有时候一个分好都会影响程序运行的效果。不过不要气馁,如果你用的是开发板,那么我建议你看看数码管的IO是否和有些模块的IO共用了或者怎样,就是说白了,首先排除你硬件的连接问题。如果硬件没有问题了,那么问题出在你的软件上面了。
在线时间4 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
你这段程序是自己写的,还是跟这教程写的,还是参考其他程序写的?
在线时间387 小时
威望663 分
芯币541 枚
TA的帖子TA的资源
纯净的硅(初级), 积分 663, 距离下一级还需 137 积分
纯净的硅(初级), 积分 663, 距离下一级还需 137 积分
初学者要首先要先学会分段调试。
另外,我喜欢把数码管驱动部分放进定时器,由定时器来控制,效果更好。
在线时间366 小时
威望877 分
芯币1167 枚
E金币36 枚
TA的帖子TA的资源
纯净的硅(中级), 积分 877, 距离下一级还需 323 积分
纯净的硅(中级), 积分 877, 距离下一级还需 323 积分
数码管,有两种显示,一种是动态的,用IO口来选择让哪个数码管亮,延时要把握好,时间长了显示会卡顿,时间短了会闪。还有一种是静态的,外接移位寄存器来驱动数码管,只需要定时显示,不需要延时函数来耗费CPU。
天地庄周马;江湖范蠡船。
微信:遗城浅落梦,我和你好像有一段缘分未尽
在线时间126 小时
芯币331 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 62, 距离下一级还需 138 积分
一粒金砂(中级), 积分 62, 距离下一级还需 138 积分
你找出出问题的部分贴出来就可以了,你贴了这么多的代码,恐怕没人会去看的!是吧,而且,你又没有你的硬件简介,
在线时间28 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
数码管闪,你确定延时够短?
在线时间90 小时
芯币479 枚
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
有没有其他电路占用引脚端口?
论坛测评队员
Powered by
逛了这许久,何不进去瞧瞧?}

我要回帖

更多关于 c语言数码管倒计时 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信