標(biāo)題: 顯示程序 [打印本頁]

作者: smokingman    時間: 2008-7-4 16:22
標(biāo)題: 顯示程序

請教單片機(jī)數(shù)碼管顯示程序怎么寫?


作者: fanglin06    時間: 2008-7-5 09:50
那要看你的電路是怎么 個搭法````
我提供一匯編程序給你做個參考```

BCD2      EQU 30H;初始發(fā)

BCD1      EQU 31H
BCD0      EQU 32H


          ORG 0000H
          LJMP MAIN

          ORG 0100H
MAIN:     MOV SP,#60H           
            MOV A,#250     ;送顯示數(shù)
          CALL A_BCD       ;將顯示數(shù)轉(zhuǎn)換成BCD碼
LOOP:     MOV A,BCD0  ;送個位 顯示
          MOV B,#5FH
          CALL DSPL  ;調(diào)用顯示程序
          CALL DL2MS ; 延時2ms
          MOV A,BCD1;十位
          MOV B,#3FH
          CALL DSPL
          CALL DL2MS
          MOV A,BCD2;百位
          MOV B,#1FH
          CALL DSPL
          CALL DL2MS
          JMP LOOP

DL2MS:    MOV R7,#249
LOP:      NOP
          NOP
          DJNZ R7,LOP
          RET

A_BCD:   MOV B,#10   ; BCD碼轉(zhuǎn)換子程序
          DIV AB
          MOV BCD0,B
          MOV B,#10
          DIV AB
          MOV BCD1,B
          MOV BCD2,A
          RET


DSPL:    MOV DPTR,#TABHEX   ;顯示子程序
         MOVC A,@A+DPTR   
         MOV P0,A
         MOV P2,B
         RET

TABHEX:  DB 3Fh,06H,5BH,4FH,66H,6DH,7DH,07H
         DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H

          END


作者: 022rat    時間: 2008-7-11 01:15

上樓的是用匯編寫的,其實用C更加簡單,那我就給你發(fā)一個C寫的簡單單個數(shù)碼管顯示(自己好好加油~~)
#include<reg51.h>
#define uchar unsigned char
uchar temp,a;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void main()
{ temp=0;
 TMOD=0X10;
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 EA=1;
 ET1=1;
 TR1=1;
 P2=0x00;
 while(1)
 {
  if(a==20)
   { a=0;
    P2=0x01;
    if(temp==10)
    temp=0;
    P0=table[temp++];
   }
 }
}
void timer1() interrupt 3
{
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 a++; 
}


作者: a13758777532    時間: 2008-7-15 13:55
#include <reg51.h>
sbit y1=P3^5;
sbit y2=P2^4;
unsigned char code tab[]={0xc0,0x........};

void delay1(void)
{
unsigned char i;
for(i=200;i>0;i--);
}

void main(void)
{
unsigned char led;
unsigned int j;
while(1)
{
y1=0;
P1=tab[led/10];
delay1();
y1=1;
y2=0;
P1=tab[led%10];
delay1();
y2=1;
if(++j==2500)
{
led++;
if(led==100)
led=0;
}
}
}





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1