找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1869|回复: 7
打印 上一主题 下一主题
收起左侧

单片机数码管显示想加上可以停留的功能

[复制链接]
跳转到指定楼层
#
ID:947409 发表于 2021-6-30 16:33 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1黑币
在 8 个数码管上显示 0---9 这十个数字,且从左到右动态显示,然后我想加上可以停留的功能,比如显示完1以后,1不会消失,然后显示2
单片机源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88};//共阳数码

void delay(uint y)
{
uchar i;
while(y--) for(i=0;i<110;i++);
}void main()
{
uchar i,j=0x80;
while(1)
{
for(i=0;i<8;i++)
{
P2=0xff;
j=_crol_(j,1);
P0=dis_code[ i];
P2=j;
delay(500);
}
}}


该加上啥?

最佳答案

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

7#
ID:947409 发表于 2021-7-1 19:59 | 只看该作者
谢谢大家,我已经知道问题所在了,由于第一次问问题,没有组织好语言,对此很抱歉
回复

使用道具 举报

6#
ID:123289 发表于 2021-7-1 14:53 | 只看该作者
1、把8个LED显示当着是一幅画面。分一下组:你的动态显示过程一共有几个画面组成。
2、写好每个画面的显示程序。
3、每间隔一段时间切换一个画面。
这样考虑问题,你可以任意变化显示的内容,题目的问题也就跟着解决了。
回复

使用道具 举报

5#
ID:161164 发表于 2021-7-1 02:05 | 只看该作者
有delay(500);这个动作就只能显示一个位或多位同数(即1,22,333...)
回复

使用道具 举报

地板
ID:355873 发表于 2021-6-30 23:03 | 只看该作者
你不能用移位指令,移位指令只将1移动,移到后又变成0
回复

使用道具 举报

板凳
ID:914633 发表于 2021-6-30 22:48 | 只看该作者
for循环里应该是<10
回复

使用道具 举报

沙发
ID:914633 发表于 2021-6-30 22:30 | 只看该作者
8个数码管显示10个数 请问显示到7数码管全满后想要达到怎样的效果
回复

使用道具 举报

楼主
ID:213173 发表于 2021-6-30 16:33 | 只看该作者
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar dis_code[17]={//共阳数码管段码"0~f "
  6.                 0xc0,0xf9,0xa4,0xb0,
  7.                 0x99,0x92,0x82,0xf8,
  8.                 0x80,0x90,0x88,0x83,
  9.                 0xc6,0xa1,0x86,0x8e,0x00};
  10. void delay(uint y)
  11. {
  12.         uchar i;
  13.         while(y--)
  14.         for(i=0;i<110;i++);
  15. }
  16. void main()
  17. {
  18.         uchar i,j;
  19.         uint  k;
  20.         while(1)
  21.         {
  22.                 P2&=0x00;
  23.                 P0=dis_code[i];
  24.                 P2|=(0x01<<i);
  25.                 delay(1);
  26.                 i=++i%8;
  27.                 k++;
  28.                 if(k>=1000)
  29.                 {
  30.                         k=0;
  31.                         dis_code[16]=dis_code[0];
  32.                         for(j=0;j<16;j++)
  33.                                 dis_code[j]=dis_code[j+1];
  34.                 }
  35.         }
  36. }
复制代码
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表