找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求程序编写思路 按下S2实现8个数码管从左往右依次显示1357EFHL

[复制链接]
跳转到指定楼层
楼主
在线求助,这个咋写,拜托了
按下S2实现8个数码管从左往右依次显示1357EFHL(时间间隔是1秒,要求从左往右依次显示时,已经显示完的数字或者字母依旧显示)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:752974 发表于 2021-11-25 10:18 | 只看该作者
开一个缓冲区,将“1357EFHL”的段码按要求依次换位,再送显就可以。
回复

使用道具 举报

板凳
ID:311903 发表于 2021-11-25 13:49 | 只看该作者
先实现,从左往右依次显示功能(动态扫描),实现后按键就是个出发条件了
回复

使用道具 举报

地板
ID:123289 发表于 2021-11-25 15:56 | 只看该作者
1、设置8个变量:S1,S2...S8。
2、编写程序,8个数码管分别从S1-S8中取数据,译码并显示。
3、当你需要移位时,只需要做:A=S1,S2=S1,S3=S2,S4=S3...,S1=A。就行了,而且只做一次。
记住:LED1只从S1中取数据显示(含译码),不要直接给数据到LED1显示(不灵活)。想改变LED1,改变S1就可以了。

更高阶:再设置X1-X8,专门放置S1-S8的译码值,只样显示就从X1-X8取码直接显示。如果你要改变显示内容,就改变S1-S8,并做一次译码译成X1-X8。
这样的显示方案:机动灵活,只在显示内容变动时,做一次译码就可以了,更改显示内容就与扫描显示无关了。
回复

使用道具 举报

5#
ID:213173 发表于 2021-11-27 04:44 | 只看该作者
按一次键,开始按秒速依次显示1357EFH,再按一次键清屏,如此反复。


  1. #include <reg51.h>
  2. typedef unsigned int u16;
  3. typedef unsigned char u8;

  4. sbit S2=P3^0;

  5. u8 code display[]={0x06,0x4F,0x6D,0x07,0x79,0x71,0x76,0x38};//1357EFHL
  6. u16 i;
  7. u8 j,s;
  8. bit KeySec;
  9. bit flag;

  10. void InitTimer0()
  11. {
  12.     TMOD = 0x01;
  13.     TH0 = 0xFC;
  14.     TL0 = 0x18;
  15.     EA = 1;
  16.     ET0 = 1;
  17.     TR0 = 1;
  18. }

  19. void key_scan()
  20. {
  21.         static bit sign;
  22.         static u8 count;       

  23.         if(!S2)
  24.         {
  25.                 if(++count>=10&&sign==0)
  26.                 {                       
  27.                         sign=1;
  28.                         KeySec=~KeySec;
  29.                 }
  30.         }
  31.         else
  32.         {
  33.                 sign=0;
  34.                 count=0;
  35.         }
  36. }

  37. void main()
  38. {
  39.         InitTimer0();
  40.         while(1)
  41.         {
  42.                 if(flag)
  43.                 {
  44.                         flag=0;
  45.                         key_scan();
  46.                         if(KeySec)
  47.                         {
  48.                                 P0=0x00;
  49.                                 P2=~(0x01<<j);
  50.                                 if(j<=s)
  51.                                         P0=display[j];
  52.                                 else P0=0x00;
  53.                         }
  54.                         else
  55.                         {
  56.                                 P0=0x00;
  57.                                 s=0;
  58.                                 i=0;
  59.                         }
  60.                 }
  61.         }
  62. }

  63. void Timer0Interrupt(void) interrupt 1
  64. {
  65.         TH0 = 0xFC;
  66.         TL0 = 0x18;
  67.         if(++i>=1000)
  68.         {
  69.                 i=0;
  70.                 if(++s>=7)
  71.                         s=7;
  72.         }
  73.         flag=1;
  74.         j=++j%8;
  75. }
复制代码



回复

使用道具 举报

6#
ID:332444 发表于 2021-11-27 06:33 | 只看该作者
到我博客去找有众多例子https://blog.csdn.net/xianfajushi
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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