找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3713|回复: 4
收起左侧

请各位大神帮忙,138译码器如何同时8个数码管从0到8显示

[复制链接]
ID:218360 发表于 2018-1-20 23:08 | 显示全部楼层 |阅读模式
在学习51汇编程序,实验板用的138译码器,位选为P1.0---P1.1---.P1.2三个口,138的使能脚硬件置0,段选为P0口,如何让8个数码管同时显示0再媳灭1再媳灭再显示2如此循环,那位大神帮我写下这个程序给我看看,学习学习,最好注释下

1.jpg
2.jpg
3.jpg
回复

使用道具 举报

ID:155507 发表于 2018-1-21 10:26 | 显示全部楼层

  1. // 138译码器如何实现同时8个数码管从0到8显示
  2. // 让8个数码管同时显示0再媳灭1再媳灭再显示2如此循环
  3. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

  4. typedef unsigned int u16;          //对数据类型进行声明定义
  5. typedef unsigned char u8;


  6. sbit LSA=P1^0;  //控制138译码器
  7. sbit LSB=P1^1; //位选为P1.0---P1.1---.P1.2三个口
  8. sbit LSC=P1^2;

  9. u8 code smgduan[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  10.   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//显示0~F的值
  11. u8 d=0;
  12. /*******************************************************************************
  13. * 函 数 名         : delay
  14. * 函数功能         : 延时函数,i=1时,大约延时10us
  15. *******************************************************************************/
  16. void delay(u16 i)
  17. {
  18.   while(i--);       
  19. }

  20. void delayms(void)   //延时 ms
  21. {      
  22.   unsigned char a,b,c;     
  23.   for(c=1;c>0;c--)         
  24.   for(b=142;b>0;b--)            
  25.   for(a=2;a>0;a--);
  26. }

  27. /*******************************************************************************
  28. * 函 数 名       : DigDisplay
  29. * 函数功能      : 数码管动态扫描函数,循环扫描8个数码管显示
  30. *******************************************************************************/
  31. void DigDisplay()
  32. {
  33.   u8 i;
  34.   for(i=0;i<8;i++)
  35.   {
  36.     switch(i)         //位选,选择点亮的数码管,
  37.     {
  38.       case(0):
  39.       LSA=0;LSB=0;LSC=0; break;//显示第0位
  40.       case(1):
  41.       LSA=1;LSB=0;LSC=0; break;//显示第1位
  42.       case(2):
  43.       LSA=0;LSB=1;LSC=0; break;//显示第2位
  44.       case(3):
  45.       LSA=1;LSB=1;LSC=0; break;//显示第3位
  46.       case(4):
  47.       LSA=0;LSB=0;LSC=1; break;//显示第4位
  48.       case(5):
  49.       LSA=1;LSB=0;LSC=1; break;//显示第5位
  50.       case(6):
  51.       LSA=0;LSB=1;LSC=1; break;//显示第6位
  52.       case(7):
  53.       LSA=1;LSB=1;LSC=1; break;//显示第7位       
  54.     }
  55.     P0=smgduan[d];//发送段码 段选为P0口
  56.     delay(100); //间隔一段时间扫描       
  57.     P0=0x00;//消隐
  58.   }
  59.   
  60. }

  61. /*******************************************************************************
  62. * 函 数 名          : main
  63. * 函数功能        : 主函数
  64. * 输    入           : 无
  65. * 输    出            : 无
  66. *******************************************************************************/
  67. void main()
  68. {       
  69.   u16 y=0;
  70.   u8 d1=0;
  71.   while(1)
  72.   {       
  73.     DigDisplay();  //数码管显示函数       
  74.     delayms();
  75.     y++;

  76.     if (y>=100)
  77.     {
  78.       d1++; //段码显示函数
  79.       y=0;
  80.       if(d1 >8) //显示0~8。
  81.       d1=0;
  82.       
  83.     }
  84.     d = d1; //段码显示函数
  85.    
  86.     if (y>=50) // 段码媳灭
  87.     {
  88.       d = 17; //段码媳灭函数
  89.     }
  90.   }               
  91. }
复制代码
回复

使用道具 举报

ID:218360 发表于 2018-1-21 12:02 来自手机 | 显示全部楼层
angmall 发表于 2018-1-21 10:26

你好。大神,我需要的汇编程序。C我大概知道
回复

使用道具 举报

ID:155507 发表于 2018-1-21 22:35 | 显示全部楼层
  1. ; 138译码器如何实现同时8个数码管从0到8显示
  2. ; 让8个数码管同时显示0再媳灭1再媳灭再显示2如此循环

  3.                   ORG 00H
  4. JMP START
  5. ORG 0BH
  6. y        EQU        20H
  7. d        EQU        22H
  8. d1        EQU        23H
  9. i        EQU        24H

  10.   LSA BIT P1.0 ;控制138译码器
  11.   LSB BIT P1.1
  12.   LSC BIT P1.2

  13.         ORG        0100H
  14. ; FUNCTION main (BEGIN)
  15. START:
  16.           CLR     A
  17.           MOV     y,A
  18.           MOV     y+01H,A
  19.           MOV     d1,A
  20. ?C0001:
  21.           LCALL   DigDisplay
  22.           LCALL   delayms
  23.           INC     y+01H
  24.           MOV     A,y+01H
  25.           JNZ     ?C0033
  26.           INC     y
  27. ?C0033:
  28.           CLR     C
  29.           SUBB    A,#064H
  30.           MOV     A,y
  31.           SUBB    A,#00H
  32.           JC      ?C0003
  33.           INC     d1
  34.           CLR     A
  35.           MOV     y,A
  36.           MOV     y+01H,A
  37.           MOV     A,d1
  38.           SETB    C
  39.           SUBB    A,#08H
  40.           JC      ?C0003
  41.           CLR     A
  42.           MOV     d1,A
  43. ?C0003:
  44.           MOV     d,d1
  45.           CLR     C
  46.           MOV     A,y+01H
  47.           SUBB    A,#032H
  48.           MOV     A,y
  49.           SUBB    A,#00H
  50.           JC      ?C0001
  51.           MOV     d,#011H
  52.           SJMP    ?C0001
  53. ; FUNCTION main (END)

  54. ; FUNCTION DigDisplay (BEGIN)
  55. DigDisplay:                                                          
  56.            CLR     A
  57.           MOV     i,A
  58. ?C0007:
  59.           MOV     A,i
  60.            CJNE    A,#08H,?C0034
  61. ?C0034:
  62.           JNC     ?C0010
  63.           MOV     DPTR,#?C0035
  64.           MOV     R0,A
  65.           ADD     A,R0
  66.           ADD     A,R0
  67.           JMP     @A+DPTR
  68. ?C0035:
  69.           LJMP    ?C0011
  70.           LJMP    ?C0012
  71.           LJMP    ?C0013
  72.           LJMP    ?C0014
  73.           LJMP    ?C0015
  74.           LJMP    ?C0016
  75.           LJMP    ?C0017
  76.           LJMP    ?C0018
  77. ?C0011:
  78.            CLR     LSA
  79.            SJMP    ?C0037
  80. ?C0012:
  81.            SETB    LSA
  82. ?C0037:
  83.            CLR     LSB
  84.            CLR     LSC
  85.            SJMP    ?C0010
  86. ?C0013:
  87.            CLR     LSA
  88.            SJMP    ?C0038
  89. ?C0014:
  90.            SETB    LSA
  91. ?C0038:
  92.            SETB    LSB
  93.            CLR     LSC
  94.            SJMP    ?C0010
  95. ?C0015:
  96.            CLR     LSA
  97.            SJMP    ?C0039
  98. ?C0016:
  99.            SETB    LSA
  100. ?C0039:
  101.            CLR     LSB
  102.            SETB    LSC
  103.            SJMP    ?C0010
  104. ?C0017:
  105.            CLR     LSA
  106.            SJMP    ?C0040
  107. ?C0018:
  108.            SETB    LSA
  109. ?C0040:
  110.            SETB    LSB
  111.            SETB    LSC
  112. ?C0010:
  113.           MOV     A,d
  114.           MOV     DPTR,#smgduan
  115.           MOVC    A,@A+DPTR
  116.           MOV     P0,A
  117.           MOV     R7,#064H
  118.           MOV     R6,#00H
  119.           LCALL   _delay
  120.           CLR     A
  121.           MOV     P0,A
  122.           INC     i
  123.           MOV     A,i
  124.           CLR     C
  125.           SUBB    A,#08H
  126.           JC      ?C0007
  127. ?C0019:
  128.            RET     
  129. ; FUNCTION DigDisplay (END)
  130.                         USING   1
  131. ; FUNCTION _delay (BEGIN)
  132. _delay:                                                          
  133. ?C0020:
  134.            MOV     A,R7
  135.            DEC     R7
  136.            MOV     R4,AR6
  137.            JNZ     ?C0036
  138.            DEC     R6
  139. ?C0036:
  140.            ORL     A,R4
  141.            JNZ     ?C0020
  142. ?C0021:
  143. ?C0022:
  144.            RET     
  145. ; FUNCTION _delay (END)

  146. ; FUNCTION delayms (BEGIN)
  147. delayms:
  148.            MOV     R7,#01H
  149. ?C0023:
  150.            MOV     R6,#08EH
  151. ?C0026:
  152.            MOV     R5,#02H
  153. ?C0029:
  154.            DJNZ    R5,?C0029
  155. ?C0028:
  156.            DJNZ    R6,?C0026
  157. ?C0025:
  158.            DJNZ    R7,?C0023
  159. ?C0032:
  160.            RET     
  161. ; FUNCTION delayms (END)

  162. smgduan:          DB    3FH   ;0
  163.                         DB    06H   ;1
  164.                         DB    5BH   ;2
  165.                         DB    4FH   ;3
  166.                         DB    66H   ;4
  167.                         DB    6DH   ;5
  168.                         DB    7DH   ;6
  169.                         DB    07H   ;7
  170.                         DB    7FH   ;8
  171.                 DB 06FH,077H,07CH,039H,05EH,079H,071H,00H,00H
  172.                
  173.    END

复制代码
回复

使用道具 举报

ID:218360 发表于 2018-1-24 22:05 | 显示全部楼层

谢谢大神。。。。。好好去理解消化,真的太感谢了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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