找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机制作—两位数码管显示 c语言 汇编程序+电路图

[复制链接]
跳转到指定楼层
楼主
ID:85192 发表于 2015-7-10 02:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lianlian 于 2015-7-10 02:42 编辑

两位数码管 第一位显示段名,第二位显示段


两位数码管第一位显示段名(A、B、C、D、E、F、G 及H),第二位显示段,其中,段闪烁。按键按下切换下一段的的段名和段显示。

程序清单(汇编):

;2011 04 05 D:\DPJ\数码管段显\数码管段显2.asm
S0 BIT P3.7
ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H
MAIN:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
MOV R0,#10
MOV DPTR,#TAB

MAIN1:
ACALL DISP
JB S0,$-2
ACALL DISP
JNB S0,$-2
INC R1
INC R1
CJNE R1,#16,MAIN1
MOV R1,#0
AJMP  MAIN1

DISP:
MOV A,R1
MOVC A,@A+DPTR
MOV P2,A
CLR P3.0
ACALL D1MS
SETB P3.0
INC R1
JNB F0,RT
CLR F0
MOV A,R1
MOVC A,@A+DPTR
MOV P2,A
CLR P3.1
ACALL D1MS
SETB P3.1
RT:

MOV A,R1
DEC A
MOV R1,A
RET

T0INT:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,RTI
MOV R0,#10
SETB F0
RTI:
RETI

D1MS:
MOV R7,#25
MOV R6,#20
DJNZ R6,$
DJNZ R7,$-4
RET

TAB:
        
DB      077H;A
DB      001H;A
DB      07CH;b
DB      002H;b
DB      039H;C
DB      004H;C
DB      05EH;d
DB      008H;d
DB      079H;E
DB      010H;E
DB      071H;F
DB      020H;F
DB      06FH;g
DB      040H;g
DB      076H;H
DB      080H;H

END



程序清单(51c):

//2011 04 05  D:\DPJ_C\数码管段显\数码管段显c2.c

  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. uchar code tab[ ]={0x77,0x01,0x7c,0x02,0x39,0x04,0x5e,0x08,
  4.                               0x79,0x10,0x71,0x20,0x6f,0x40,0x76,0x80};
  5. uchar i,j,a,b;
  6. sbit P3_0=P3^0;
  7. sbit P3_1=P3^1;
  8. sbit S0=P3^7;

  9. void delay_ms(unsigned int ms)
  10. {
  11. while(ms--)
  12. for(j=123;j>0;j--);
  13. }

  14. void disp( )
  15. {
  16. P2=tab[i];
  17. P3_0=0;
  18. delay_ms(2);
  19. P3_0=1;
  20. if(b==1)
  21. {
  22.   b=0;
  23.   P2=tab[i+1];
  24.   P3_1=0;
  25.   delay_ms(2);
  26.   P3_1=1;
  27. }
  28. }

  29. void t0init( )
  30. {
  31. TMOD=0x01;
  32. TH0=0x3c;
  33. TL0=0xb0;
  34. EA=1;
  35. ET0=1;
  36. TR0=1;
  37. }

  38. void main( )
  39. {
  40. t0init();
  41. while(1)
  42. {
  43.   disp( );
  44.   while(S0==0)
  45.   {
  46.    disp( );
  47.    if(S0==1)
  48.    i=i+2;
  49.    if(i==16)
  50.    i=0;
  51.   }
  52. }
  53. }

  54. void t0int() interrupt 1
  55. {
  56. TH0=0x3c;
  57. TL0=0xb0;
  58. a++;
  59. if(a==10)
  60. {
  61.   b=1;
  62.   a=0;
  63. }
  64. }
复制代码



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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