❶ AVR单片机数码管显示00-99
这个和你的硬件环境有关,共阴共阳,使用串行还是并行显示。还有avr单片机种类很多的,我用过8位的用过32位的。写这类驱动软件一定要了解硬件环境的。
一定要使用汇编么,C同样可以完成,免费的AVR C编译器可以使用 GCC。
❷ 用单片机控制两个led数码管采用静态连接方式要求两个数码管显示00-99,
程序是刚做的,没测试过,你试试,能用再给分吧。P0口是位选,P2口段选。#includeunsignedintbittime=0;unsignedcharbitdisplay=0;unsignedcharmg=0,ms=0;unsignedcharTab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00};voidtimer0(void)interrupt1{TH0=0xF0;TL0=0x60;switch(bitdisplay){case0:P2=Tab[mg];P0=0xFE;break;case1:P2=Tab[ms];P0=0xFD;break;}bitdisplay++;bittime++;if(bitdisplay>=2)bitdisplay=0;if(bittime>=500){bittime=0;mg++;if(mg>9){mg=0;ms++;}if(ms>9)ms=0;}}voidmain(void){TMOD=0x01;TH0=0xF0;TL0=0x60;TR0=1;EA=1;while(1);}
❸ 求单片机采用外部中断0和1控制数码管进行00到99的计数c语言程序
程序是刚做的,没测试过,你试试,能用再给分吧。P0口是位选,P2口段选。
#include<reg52.h>
unsigned
int
bittime=0;
unsigned
char
bitdisplay
=
0;
unsigned
char
mg=0,ms=0;
unsigned
char
Tab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,
0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00};
void
timer0(void)
interrupt
1
{
TH0=0xF0;
TL0=0x60;
switch(bitdisplay)
{
case
0:P2=Tab[mg];P0=0xFE;break;
case
1:P2=Tab[ms];P0=0xFD;break;
}
bitdisplay++;
bittime++;
if(bitdisplay>=2)
bitdisplay=0;
if(bittime>=500)
{
bittime=0;
mg++;
if(mg>9)
{mg=0;ms++;}
if(ms>9)
ms=0;
}
}
void
main(void)
{
TMOD=0x01;
TH0=0xF0;
TL0=0x60;
TR0=1;
EA=1;
while(1);
}
❹ 单片机控制四位数码管显示0000-9999
首先告诉你,AT89C51已基本上没人用了,代替它的是AT89S51。
共阳数码管,OK,单片机设计多数使用共阳数码管。
单片机控制四位数码管显示0000-9999
我给你提供一个每秒自动加1的四位数码管循环显示0000~9999的程序。
D0 equ 0c0h ; 11000000B
D1 equ 0F9h ; 11111001B
D2 equ 0A4h ; 10100100B
D3 equ 0B0h ; 10110000B
D4 equ 99h ; 10011001B
D5 equ 92h ; 10010010B
D6 equ 82h ; 10000010B
D7 equ 0F8h ; 11111000B
D8 equ 80h ; 10000000B
D9 equ 90h ; 10010000B
org 0000h
jmp start
org 0030h
start:
mov dptr,#data0
mov r2,#0
mov r3,#0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
next: call display
inc r2
cjne r2,#100,next
mov r2,#0
inc r3
cjne r3,#100,next
mov r3,#0
jmp next
display:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov r4,#250
lpr4: mov p2,#0ffh
mov a,r3
mov b,#10
div ab
movc a,@a+dptr
mov p0,a
clr p2.0
call t1ms
mov p2,#0ffh
mov a,b
movc a,@a+dptr
mov p0,a
clr p2.1
call t1ms
mov p2,#0ffh
mov a,r2
mov b,#10
div ab
movc a,@a+dptr
mov p0,a
clr p2.2
call t1ms
mov p2,#0ffh
mov a,b
movc a,@a+dptr
mov p0,a
clr p2.3
call t1ms
djnz r4,lpr4
ret
data0: db d0,d1,d2,d3,d4,d5,d6,d7,d8,d9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
t1ms:
mov r7,#250
djnz r7,$
mov r7,#250
djnz r7,$
ret
jmp $
end
❺ 单片机用汇编写两个数码管显示0到99循环的程序
1、新建项目,做好准备。
❻ 单片机数码管显示0到9
#include<reg51.h>
sbitk1=P1^0;
#define uint16 unsigned int
#define uchar unsigned char
uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(){
uint16 i=1000;
while(i--);}
void main()
{
uchar n ;
P2=0xfe;
P1=0xff;
while(1)
{
if(k1==0){
if(n>=9) n=0;
else n++;
P0=shuzu[n];
while(!k1);
delay();
while(!k1);
}
}
}
(6)单片机使数码管显示0099扩展阅读:
51单片机的功能特性
1,可以仿真63K程序空间,接近64K 的16位地址空间;
2,可以仿真64Kxdata 空间,全部64K 的16位地址空间;
3,可以真实仿真全部32 条IO脚;
4,完全兼容keilC51 UV2 调试环境,可以通过UV2 环境进行单步,断点, 全速等操作;
5,可以使用C51语言或者ASM汇编语言进行调试 ;
6,可以非常方便地进行所有变量观察,包括鼠标取值观察,即鼠标放在某 变量上就会立即显示出它此的值;
7,可选 使用用户晶振,支持0-40MHZ晶振频率;
8,片上带有768字节的xdata,您可以在仿真时选 使用他们,进行xdata 的仿真;
9,可以仿真双DPTR 指针;
10,可以仿真去除ALE 信号输出. ;
11,自适应300-38400bps 的所有波特率通讯;
12,体积非常细小,非常方便插入到用户板中.插入时紧贴用户板,没有连接电缆,这样可以有效地减少运行中的干扰,避免仿真时出现莫名其妙的故障;
13,仿真插针采用优质镀金插针,可以有效地防止日久生锈,选择优质园脚IC插座,保护仿真插针,同时不会损坏目标板上的插座. ;
14,仿真时监控和用户代码分离,不可能产生不能仿真的软故障;
15,RS-232接口不计成本采用MAX202集成电路,串行通讯稳定可靠,绝非一般三极管的简易电路可比。
❼ 单片机 数码管动态显示 0-99
你说的总是先亮第一个,是哪一个??有个位,还是十位?还有你说的一秒是指数字增一,延迟一秒?如果是,那你在MAIN WHILE中加个delayms延迟。具体是延迟多少,就要看你的晶振了。
❽ 51单片机数码管显示0-99的问题
那个lalala有什么用?看程序是在P0口接一个共阳数码管。那同样在P2口再接一个数码管。这样,P0口的数码管显示十位数,P2口的数码管显示个位数。或在P2,P3口各接一个数码管。见下图。
这种接法属于静态显示电路。这个学会后,再练习动态显示电路。
❾ 求用单片机驱动数码二级管的C语言程序,要求二级管显示00~99
两位数码管显示00~99,无需采用数码管扫描,通常采用静态显示。
给你提供一个两位数码管00~99循环加法计数的CC语言程序。
程序中,采用了软件延时的方法,每半秒自动加1。
#include<reg52.h>
unsignedcharcount=0;
unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//段码
voiddelay500ms(); //延时子程序声明
voiddisplay(unsignedcharX); //显示子程序声明
voidmain()
{
while(1)
{
delay500ms();
count++;
if(count>=100)count=0;
display(count);
}
}
voiddelay500ms()
{
unsignedchari,j,k;
for(i=5;i>0;i--)
for(j=200;j>0;j--)
for(k=248;k>0;k--);
}
voiddisplay(unsignedcharX)
{
P0=table[X/10];
P2=table[X%10];
}