1. 单片机中二位数码管的显示,怎样用c语言写一段从0到99的程序啊
公阳,P0.2,P0.3 分别通过PNP管接个位,十位数码管公共端,P1口输出数据,都是低电平有效
#include <reg51.h>
sbit shi=P0^3; //十位公共极
sbit ge=P0^2; //个位公共极
#define Out P1 //数据输出端
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳
// 实际显示 0 1 2 3 4 5 6 7 8 9
//延时----------------------------
Delay(unsigned int t)
{
while(t--);
}
//主程序--------------------------
main()
{
unsigned char i=j=0;
while(1) //循环显示
{
for(i=0;i<200;i++)
{
Out=tab[j%10];
ge=0;
Delay(1000);
ge=1;
Out=tab[j/10];
shi=0;
Delay(1000);
shi=1;
}
j++;
}
}
2. 怎样在单片机中用C语言编写一个2位数码管显示0到99。管脚接线图如下:
//8字段定义
//先进行宏定义,然后进行查表,输出就OK了
unsigned int i ;
#define SEGA 0x04
#define SEGB 0x08
#define SEGC 0x10
#define SEGD 0x80
#define SEGE 0x20
#define SEGF 0x02
#define SEGG 0x01//
#define SEGDP 0x40//
#define NSEGG 0x7f//无解
#define NUM_0 SEGA + SEGB + SEGC + SEGD + SEGE + SEGF
#define NUM_1 SEGB + SEGC
#define NUM_2 SEGA + SEGB + SEGG + SEGE + SEGD
#define NUM_3 SEGA + SEGB + SEGC + SEGD + SEGG
#define NUM_4 SEGF + SEGG + SEGB + SEGC
#define NUM_5 SEGF + SEGG + SEGC + SEGD + SEGA
#define NUM_6 SEGA + SEGF + SEGE + SEGD + SEGC + SEGG
#define NUM_7 SEGA + SEGB + SEGC
#define NUM_8 SEGA + SEGB + SEGC + SEGD + SEGE + SEGF + SEGG
#define NUM_9 SEGA + SEGB + SEGC + SEGD + SEGF + SEGG
const unsigned char tNUMBER[] = {NUM_0,NUM_1,NUM_2,NUM_3,NUM_4,NUM_5,NUM_6,NUM_7,NUM_8,NUM_9};
if(i==9)
{P2 = tNUMBER[9];}
else
{P2 = 0x00;}
具体问题你也描述的不详细,所以只能写到这个地方了。
3. 利用单片机实现两位数码管显示功能。
DAT EQU 30H
SCANLED EQU 32H
FSDAT EQU 33H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#01H
MOV TH0,#0F4H
MOV TL0,#048H
MOV P2,#00H
MOV SCANLED,#0
MOV 30H,#5
MOV 31H,#0
MOV FSDAT,#50
SETB EA
SETB ET0
SETB TR0
LOOP:
JB P3.0,LOOP1
JNB P3.0,$
INC FSDAT
MOV A,FSDAT
CJNE A,#100,LOOP01
LOOP01:
JC LOOP02
MOV FSDAT,#99
LOOP02:
MOV A,FSDAT
MOV B,#10
DIV AB
MOV 30H,A
MOV 31H,B
SJMP LOOP
LOOP1:
JB P3.1,LOOP2
JNB P3.1,$
MOV A,FSDAT
JZ LOOP11
DEC FSDAT
LOOP11:
MOV A,FSDAT
MOV B,#10
DIV AB
MOV 30H,A
MOV 31H,B
SJMP LOOP
LOOP2:
JB P3.2,LOOP
JNB P3.2,$
MOV FSDAT,#50
MOV 30H,#5
MOV 31H,#0
SJMP LOOP
;--------------------
T0ISR:
PUSH ACC
CLR TR0
MOV TH0,#0F4H
MOV TL0,#48H
SETB TR0
MOV DPTR,#LEDTAB1
T000:
MOV R0,#DAT
MOV A,SCANLED
ADD A,R0
MOV R0,A
MOV A,SCANLED
JNZ T001
MOV P2,#02H
SJMP T0DIS
T001:
MOV P2,#01H
T0DIS:
MOV A,@R0
MOVC A,@A+DPTR
CPL A
MOV P0,A
INC SCANLED
MOV A,SCANLED
ANL A,#01H
MOV SCANLED,A
POP ACC
RETI
;--------------------
LEDTAB1:
DB 0C0H ;"0" 00H
DB 0F9H ;"1" 01H
DB 0A4H ;"2" 02H
DB 0B0H ;"3" 03H
DB 99H ;"4" 04H
DB 92H ;"5" 05H
DB 82H ;"6" 06H
DB 0F8H ;"7" 07H
DB 80H ;"8" 08H
DB 90H ;"9" 09H
DB 88H ;"A" 0AH
DB 83H ;"B" 0BH
DB 0C6H ;"C" 0CH
DB 0A1H ;"D" 0DH
DB 86H ;"E" 0EH
DB 8EH ;"F" 0FH
DB 0FFH ;" " 10H
;--------------------
4. 51单片机双位共阳数码管的汇编语言的动态显示
简单来说比如显示01,那么程序如下,只要循环调用这个子程序就可以
DISPLAY:
SETB P2.0
CLR P2.1
MOV P0,#0C0H
LCALL DELAY
CLR P2.0
SETB P2.1
MOV P0,#06H
LCALL DELAY
RET
5. 急求:单片机程序:两位数码管记秒【加分】;用汇编语言编写
我前几天刚做一个,用的是51单片机,12MHZ的晶振,2个共阴的数码管,
ORG 0030H
MAIN:JB P3.7,$
LCALL DELAY
JB P3.7,$
STA: MOV R1,#00
STA1:LCALL DELAY1S
INC R1
MOV A,R1
MOV B,#10
DIV AB
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
MOV A,R1
JNB P3.7,S1
CJNE A,#99,STA1
SJMP STA
S1: JB P3.7,$
LCALL DELAY
JB P3.7,$
MOV P1,#00H
MOV P2,#00H
LCALL DELAY1S
SJMP MAIN
DELAY: MOV R2,#20
D3: MOV R3,#248
DJNZ R3,$
DJNZ R2,D3
RET
DELAY1S:MOV R5,#100
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
图没传上来 去我空间里找吧http://hi..com/%B5%E7%D7%D3%B0%AE%BA%C3%D5%DF%D1%BE%D1%BE/blog/item/c92af7ce86941935f8dc6110.html
6. 求51单片机控制2个数码管的程序
两只数码管段码分别由P0,P2输出控制,P0是十位,P2是个位。P3.2,P3.4分别接两只按键,P32.清0,P3.4计数。
以上程序来自《单片机C语言程序设计实训100例--基于8051+Proteus仿真》
#include
<reg52.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
DSY_CODE[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
uchar
Count
=
0;
void
main()
{
P0
=
0x00;
P2
=
0x00;
TMOD
=
0x06;
TH0=255;
TL0=255;
ET0=1;
EX0=1;
EA
=1;
IP
=0x02;
IT0=1;
TR0=1;
while(1)
{
P0
=
DSY_CODE[Count/10];
P2
=
DSY_CODE[Count%10];
}
}
void
Clear_Counter()
interrupt
0
{
Count
=
0;
}
void
Key_Counter()
interrupt
1
{
Count
=
(Count
+
1)
%100;
}
7. 单片机用汇编写两个数码管显示0到99循环的程序
1、新建项目,做好准备。
8. 单片机求助,用汇编语言写一个双位数码管0到99循环
给你做一个C的吧
#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,dat,cnt=0;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
if(number>1)number=0;
switch(number)
{
case 0:P2=0x02;P0=distab[dat/10];
break;
case 1:P2=0x01;P0=distab[dat%10];
break;
default:break;
}
}
void t1isr() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
cnt++;
if(cnt>=20)
{
dat++;
dat%=100;
}
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
ET1=1;
TR0=1;
ET0=1;
EA=1;
while(1);
}
9. 两位数码管连在51单片机上,怎样用汇编语言编写,求程序非常感谢
;一位数码管连在51单片机上,按键后数码管加1,按一下加1. SP1 EQU P3.2 ORG 0000H MOV 30H, #3FH ;0 MOV 31H, #06H ;1 MOV 32H, #5BH ;2 MOV 33H, #4FH ;3 MOV 34H, #66H ;4 MOV 35H, #6DH ;5 MOV 36H, #7DH ;6 MOV 37H, #07H ;7 MOV 38H, #7FH ;8 MOV 39H, #6FH ;9 M_0: MOV R0, #30H DISP: MOV P2, @R0 WT: JB SP1, $ MOV R6, #40 DJNZ R7, $ DJNZ R6, $ - 2 JB SP1, WT JNB SP1, $ INC R0 CJNE R0, #3AH, DISP SJMP M_0 END
10. C语言 单片机编写两位数码管不用定时器延时1s,怎么编
void delay(void) //延时子程序
{
unsigned char m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
具体延时时间要根据你单片机的速度,晶振频率,指令计算