单个数码管定时切换数字显示程序具体 *** 作步骤如下,您可以参考一下。
基本上不算消耗太多时间。
每个指令的消耗时间可以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语言编写的程序谢谢!、数码管显示程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)