[51单片机] 我在学习的时候数码管怎么显示很暗啊

[复制链接]
7256|17
 楼主| zhoufeng0918 发表于 2016-7-18 16:18 | 显示全部楼层 |阅读模式
本帖最后由 zhoufeng0918 于 2016-7-18 16:29 编辑

开始好好的 忽然烧个程序 数码管便暗了 数码管是好的 没坏 其他程序我测试过了。之前也碰到过 个位与十位打开的时候中间加个延时液显示很暗,后来发现了 把延时去掉就变亮了 也不知道为什么 延时是5ms,现在同样的一个 延时液去掉了 还是很暗 求大神啊 没人交都是自学的
问题找到了 就是把按键去抖的5ms去掉就变得很亮了 不知道怎么回事啊 这个去抖延时不能省啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
joyme 发表于 2016-7-20 15:48 | 显示全部楼层
用定时器的方式做,不要用while方式延时
datouyuan 发表于 2016-7-21 11:43 | 显示全部楼层
楼主的代码只能演示,不能用于实际的工程.
每个函数或功能都用掉了mcu的大量时间,想添加新功能都会对现有功能造成影响.

数码管显示要分成2个函数
void display(uchar* data );//
void display_proc(void);//中断调用,每隔5mS执行一次,每次只显示一位

按键稍微麻烦些.

这些代码主体思想是不要用软延时阻塞的方式写代码.
datouyuan 发表于 2016-7-21 13:51 | 显示全部楼层

  1. uchar dsp_data[2];        //dsp_data[0]为个位数值,dsp_data[1]为十位数值,

  2. void display(uchar* data )//
  3. {
  4.         dsp_data[0]=*data;
  5.         dsp_data[1]=*(data+1);
  6. }
  7. void display_proc(void)//中断调用,每隔5mS执行一次,每次只显示一位
  8. {
  9.         static uchar dsp_bit=1;        //0表示显示个位 1表示显示十位

  10.         d0=0;
  11.         P0=tab[dsp_data[dsp_bit]];
  12.         d0=1;
  13.         P0=0xff;

  14.         //循环显示每个位       
  15.         if(0==dsp_bit) dsp_bit=1;
  16.         else dsp_bit--;

  17. }

根据楼主的代码改写的关于显示的驱动.
下面是使用示范

  1. //使用示范
  2. void display_num(uchar* num)//
  3. {
  4.         uchar data[2];
  5.         data[0]=num%10;
  6.         data[1]=num/10;
  7.         display( data );
  8. }


gx_huang 发表于 2016-7-21 19:50 | 显示全部楼层
数码管亮和暗,首先要知道硬件原理,要亮度均匀,每个发光单元的导通时间和导通电流要一致才行。
最佳办法是定时器中断显示,每进一次中断,显示一位,保证亮度均匀。
如果不用中断,可以把显示程序做成延时函数,显示一次等于延时一段时间,主程序要不停的调用这个显示延时函数。
按键延时,也是调用显示函数。
jackhwang 发表于 2016-7-22 07:59 | 显示全部楼层
你是不是有按键按下,数码管就变暗了。
yaosongjin 发表于 2016-7-26 11:58 | 显示全部楼层
把按键延时改成定时器延时就好了,比如将定时器设置1ms溢出,在主程序里记数当记到10次也就是10ms如果按键还是按下的就执行按键程序
shuiqinghan2012 发表于 2016-8-10 11:32 | 显示全部楼层
datouyuan 发表于 2016-7-21 11:43
楼主的代码只能演示,不能用于实际的工程.
每个函数或功能都用掉了mcu的大量时间,想添加新功能都会对现有功 ...

感谢这段回复,我也遇到了类似的问题,一直在思考如何改写
icecut 发表于 2016-8-10 11:44 | 显示全部楼层
本帖最后由 icecut 于 2016-8-10 11:46 编辑
shuiqinghan2012 发表于 2016-8-10 11:32
感谢这段回复,我也遇到了类似的问题,一直在思考如何改写

看我签名里,百度传课免费单片机教程的资料.以前也上传到21ic 过.中断驱动刷新数码管
视频看前面.文字简介:http://antriver.com/mcudoc/546330dea501fb6e04d74c3b下载连接还在21ic
shuiqinghan2012 发表于 2016-8-10 11:46 | 显示全部楼层
icecut 发表于 2016-8-10 11:44
看我签名里,百度传课免费单片机教程的资料.以前也上传到21ic 过.中断驱动刷新数码管
视频看前面.文字简介: ...

这个链接打不开,视频链接可以发下
icecut 发表于 2016-8-10 11:53 | 显示全部楼层
本帖最后由 icecut 于 2016-8-10 11:55 编辑
shuiqinghan2012 发表于 2016-8-10 11:46
这个链接打不开,视频链接可以发下

http://antriver.com/mcudoc/546330dea501fb6e04d74c3b
我更新了.应该能打开,以前后面多了个.所以打不开
优酷地址http://v.youku.com/v_show/id_XODI0NjA4MTAw.html

文件下载:https://bbs.21ic.com/icview-831950-1-1.html
视频讲解:http://www.chuanke.com/3359313-127775.html
shuiqinghan2012 发表于 2016-8-10 12:06 | 显示全部楼层
icecut 发表于 2016-8-10 11:53
http://antriver.com/mcudoc/546330dea501fb6e04d74c3b
我更新了.应该能打开,以前后面多了个.所以打不开
...

Tks
datouyuan 发表于 2016-8-10 16:14 | 显示全部楼层
shuiqinghan2012 发表于 2016-8-10 11:32
感谢这段回复,我也遇到了类似的问题,一直在思考如何改写

数码管,按键扫描等功能的延时(大于几十mS)不要采用死等的方式,要采用计数的方式.
kk118a 发表于 2016-8-10 23:35 | 显示全部楼层
你的打印函数呢?定时器
duhemayi 发表于 2016-8-11 08:39 | 显示全部楼层
延时太短了吧
ahui1105 发表于 2016-8-15 11:37 | 显示全部楼层
锦锐客户带LCD/LED驱动的MCU,可以了解一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

73

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部