找回密码
 立即注册

QQ登录

只需一步,快速开始

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

我想让单片机数码管显示12位电话号码有没有什么比较简单的方法。郭天祥的tx1c板子。

[复制链接]
跳转到指定楼层
楼主
ID:632567 发表于 2019-11-8 21:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wela=P2^7;
sbit dula=P2^6;
void delay(uint);
uchar num;
/*uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
1111 1110=0xfe 1
1111 1101=0xfd 2
1111 1011=0xfb 3
1111 0111=0xf7 4
1110 1111=0xef 5
1101 1111=0xdf 6
1011 1111=0xbf 7*/
                                                                    

void main()
{          
  dula=0;
  wela=0;      
  num=0xfe;
  while(1)
  {
          dula=1;
        P0=0x06;
        dula=0;
        wela=1;
        P0=num;
        wela=0;                       
        delay(65000);//第一个数码管显1

        dula=1;
        P0=0x3f;         
        dula=0;
        wela=1;
        P0=0xfd;
        wela=0;               
        delay(65000);//第二个显0

        dula=1;
        P0=0x6d;
        dula=0;
        wela=1;
        P0=0xfb;
        wela=0;
        delay(65000);// 第三个显5

        dula=1;
        P0=0x07;
        dula=0;
        wela=1;
        P0=0xf7;
        wela=0;
        delay(65000); //第四个显7

        dula=1;
        P0=0x5b;
        dula=0;
        wela=1;
        P0=0xef;
        wela=0;
        delay(65000);//第五个显2

        dula=1;
        P0=0x06;
        dula=0;
        wela=1;
        P0=0xdf;
        wela=0;
        delay(65000);
                      //第六个显1

        wela=1;
        dula=1;
        P0=0xff;
        wela=0;
        dula=0;//清零
       
        num=0xbf;
        if(num==0xbf)
        num=0xfe;
}
大概是这样打出前六个在写出后六个数字没有规律 请各位老哥想想办法

TX-1C型单片机开发板原理图.pdf

1015.98 KB, 下载次数: 14

原理图

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

使用道具 举报

沙发
ID:123289 发表于 2019-11-9 08:49 | 只看该作者
1、先建立12个寄存器,用于存电话号码。
2、每个数码管,能根据各自的寄存器(12个之一),显示数字。
3、将电话号码存入12个寄存器中。
回复

使用道具 举报

板凳
ID:213173 发表于 2019-11-9 10:54 | 只看该作者
手机只有11位号码,加一个空位,6位移动循环显示。
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit wela=P2^7;
  5. sbit dula=P2^6;

  6. uchar code welai[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  7. uchar dis_buf[]={0x00,0x06,0x4f,0x3f,0x6d,0x06,0x6d,0x4f,0x7d,0x6f,0x4f,0x7d};//空,1,3,0,5,1,5,3,6,9,3,6

  8. void delay(uint z)
  9. {
  10.         uint i,j;
  11.         for(i=z;i>0;i--)
  12.                 for(j=125;j>0;j--);
  13. }

  14. void timing()
  15. {
  16.         static uint k=0;
  17.         uchar i,j;
  18.         k++;
  19.         if(k==500)
  20.         {
  21.                 k=0;
  22.                 j=dis_buf[0];
  23.                 for(i=0;i<11;i++)  
  24.                         dis_buf[i]=dis_buf[i+1];
  25.                 dis_buf[11]=j;
  26.         }
  27. }
  28. /********************************
  29.                 数码管显示程序
  30. ********************************/
  31. void display()
  32. {
  33.         static uchar i=0;                                //分时显示变量
  34.         P0=0x00;           dula=1; dula=0;        //消隐
  35.         P0=welai[i];   wela=1; wela=0;        //送位码
  36.         P0=dis_buf[i]; dula=1; dula=0;        //送段码
  37.         i++;
  38.         i%=6;
  39. }                                                                    

  40. void main()
  41. {         

  42.         while(1)
  43.         {
  44.                 timing();
  45.                 display();
  46.                 delay(2);
  47.         }
  48. }
复制代码
回复

使用道具 举报

地板
ID:632567 发表于 2019-11-11 15:16 | 只看该作者
wulin 发表于 2019-11-9 10:54
手机只有11位号码,加一个空位,6位移动循环显示。

有点没看明白这个程序的运行顺序,他是先进入主函数然后运行timing里的函数然后在运行diplay中的再延时并循环吗?
回复

使用道具 举报

5#
ID:213173 发表于 2019-11-12 09:31 | 只看该作者
单片机在想peach 发表于 2019-11-11 15:16
有点没看明白这个程序的运行顺序,他是先进入主函数然后运行timing里的函数然后在运行diplay中的再延时并 ...

timing();每隔约1秒,显存数组中12个成员循环移动一位。
diplay();每隔约2毫秒,数码管显示一位,12毫秒完成一轮动态显示。只显示显存数组中前6位。
delay(2);使主循环 while(1)周期控制在约2毫秒范围。
回复

使用道具 举报

6#
ID:690948 发表于 2020-2-7 21:27 来自手机 | 只看该作者
wulin 发表于 2019-11-9 10:54
手机只有11位号码,加一个空位,6位移动循环显示。

师傅,我研究了好久,还是没研究出来,能讲讲程序中的static 吗?没明白的地方就是display里的static
回复

使用道具 举报

7#
ID:213173 发表于 2020-2-8 05:39 | 只看该作者
34岁老学生 发表于 2020-2-7 21:27
师傅,我研究了好久,还是没研究出来,能讲讲程序中的static 吗?没明白的地方就是display里的static

static 关键字含义是指定为静态变量,分配在静态变量区。与局部临时变量的区别是使用后保存,不会销毁。用在display()中的目的是计数,使主程序调用一次display()就按序点亮一位数码管。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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