单个数码管定时切换数字显示程序

单个数码管定时切换数字显示程序,第1张

单个数码管定时切换数字显示程序具体 *** 作步骤如下,您可以参考一下。

基本上不算消耗太多时间。

每个指令的消耗时间可以KEIL模拟仿真的时候可以大概算出时间。

if(++t!=350)return,这句是没有达到350,就退出中断函数,到了中断时间载再进入就是另外一次了。

要注意:t取多少这个,要根据单片机的运行速率,显示刷新率来决定的;这个程序运行之后只在数码管的最高位显示了数字,并不能实现每隔一秒钟依次显示0-7

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

uchar num,count,ge,shi;

void delayxms(uint);

void display(uchar,uchar);

uchar code table[]={0xc0,0xf9,0xa4,0xb0,

    0x99,0x92,0x82,0xf8,

0x80,0x98};

void main()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

while(1)

{

display(shi,ge);

}

}

void T0_time() interrupt 1

{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

count++;

if(count==5)

{

count=0;

num++;

if(num==100)

num=0;

shi=num/10;

ge=num%10;

}

}

void delayxms(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void display(uchar shi,uchar ge)

{

 P2=0x02;

 P0=table[ge];

 delayxms(20);

 P2=0x01;

 P0=table[shi];

 delayxms(20);

}

两位数码管显示38-00倒记时 8段数码管显示两位数码管显示38-00倒计时(动态扫描方式)p2做LED显示数据输出口p10;p13分别控制数码管个位数和十位数显示 8段数码管从内部接线上分共阳和共阴两种。在电路设计时应根据情况决定采用共阳或共阴,其基本原则是:若单片机IO口直接驱动数码管个段,最好采用共阳数码管,因为51单片机IO口输出高电平时输出的电流很小,数码管不会太亮;若数码管是通过驱动芯片与单片机相连的,就要看驱动芯片对数码管极性的要求啦。下面的实验采用共阳数码管。;=======================================

;constant define ;常数定义

csp equ 60h ;堆栈开始使用的位置

;=======================================

;variable define ;变量定义

vadigit equ 30h ;数码管个位数存放内存位置

vbdigit equ 31h ;数码管十位数存放内存位置

vcnt1 equ 32h ;计数器数值存放内存位置;=======================================

;Func: 程序开始

;=======================================

org 0000h

ajmp mainorg 0030h ;到0030h处避开00-30h的敏感地址

;=======================================

;Func: 程序初始化

;=======================================

main: ;初始化特殊寄存器及变量

mov sp,#csp ;指定堆栈开始使用的位置

star:

mov vcnt1,#0 ;初始化计数器,从0开始

lop1:

acall display ;调用显示子程序

inc vcnt1 ;对计数器加1

mov a,vcnt1

cjne a,#100,lop1 ;判断计数器是否满100

mov vcnt1,#0 ;满100就清零重新开始

ljmp lop1 ;不满就循环执行;=======================================

;Func: 8字型LED显示子程序

;Input: vcnt1

;=======================================

display:

mov a,vcnt1 ;将temp中的十六进制数转换成10进制

mov b,#10 ;10进制/10=10进制

div ab ;a除以b,商在a,余数在b

mov vbdigit,a ;十位在a

mov vadigit,b ;个位在b

mov dptr,#digittab ;指定查表起始地址

mov r0,#4

dpl1:

mov r1,#250 ;

dplop:

mov a,vadigit ;取个位数

movc a,@a+dptr ;查个位数的7段代码

mov p1,a ;送出个位的7段代码

clr p32 ;开个位显示

acall delayus ;显示162微秒

setb p32 ;关闭个位显示,防止鬼影

mov a,vbdigit ;取十位数

movc a,@a+dptr ;查十位数的7段代码

mov p1,a ;送出十位的7段代码

clr p33 ;开十位显示

acall delayus ;显示162微秒

setb p33 ;关闭十位显示,防止鬼影

djnz r1,dplop ;循环执行250次

djnz r0,dpl1 ;循环执行250X4=1000次

ret;=======================================

;Func: 162us延时子程序

;=======================================

delayus:

mov r7,#80 ;///2+2X80=162微秒,延时按110592MHZ计算

djnz r7,$

retorg 0600h

;=======================================

digittab: ;实验板上的7段数码管0~9数字的共阳显示代码

db 0c0h;0

db 0f9h;1

db 0a4h;2

db 0b0h;3

db 099h;4

db 092h;5

db 082h;6

db 0f8h;7

db 080h;8

db 090h;9

end

1 静态数码管显示

点亮数码管需要用到P0端口和P2部分端口,P0端口负责显示要输出的数字,P2部分端口负责让哪个数码管点亮,具体的去看电路图,这次还包含了74HC245和74HC138芯片

现在让单片机数码管区域第三位的数码管显示数字5,程序如下

#include"reg52h"

//定义P2端口

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

//用数组来表示数码管上每个数字输出对应的相关电平输入

int str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};

void Display(int Location,int Number)

{

//利用case语句将8个数码管显示的位置一一列举

switch(Location)

{

case 1: LSC=0;LSB=0;LSA=0; break;

case 2: LSC=0;LSB=0;LSA=1; break;

case 3: LSC=0;LSB=1;LSA=0; break;

case 4: LSC=0;LSB=1;LSA=1; break;

case 5: LSC=1;LSB=0;LSA=0; break;

case 6: LSC=1;LSB=0;LSA=1; break;

case 7: LSC=1;LSB=1;LSA=0; break;

请问朋友你开关是电源开关还是控制键盘?

如果是电源开关,那么汇编程序好写。

程序如下:

P2口送位控制,P0口送显示数据(P10——P16对应数码管abcdefg),用于共阳数码管,

ORG 0000H;跳过中断入口

LJMP START;

ORG 0030H;主程序开始

START:MOV SP,#60;初始化堆栈

MOV DPTR,#TAB;显示数据表格首址送数据指针

MOV R0,#0FEH;位控制寄存器

MOV R1,#0;取码寄存器

MOV P2,#0FFH;

MOV R4,#255;延时控制

MOV P0,#0FFH;

MOV R2,#8;要显示8个数,既8个数码管同时显示01234567;

L1:MOV A,R1;

MOVC A,@A+DPTR;

MOV P0,A;送显示数据

MOV P2,R0;送位控制

DJNZ R4,$;延时

MOV P2,#0FFH;关显示

INC R1;显示下一个数据,

MOV A,R0;

RL A;下一位数码管显示

MOV R0,A;

DJNZ R2,L1;

AJMP START;

TAB:DB 0C0H;0

DB 0F9H;1

DB 0A4H;2

DB 0B0H;3

DB 99H; 4

DB 92H; 5;

DB 82H; 6

DB 0F8H;7

END

以上就是关于单个数码管定时切换数字显示程序全部的内容,包括:单个数码管定时切换数字显示程序、求单片机0~99共阳数码数码管显示用C语言编写的程序谢谢!、数码管显示程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9449276.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存