-------------------------------------------display.h---------------------------------------
#ifndef __display_H__
#define __display_H__
#include <reg52.h>
sbit A_138=P2^0;
sbit B_138=P2^1;
sbit C_138=P2^2;//最高位
sbit LE=P3^7;
#define DATAIPUT P0
//左边一组数码管位选
#define LED1_1_CS() C_138=0;B_138=0;A_138=0;LE=1;
#define LED1_2_CS() C_138=0;B_138=0;A_138=1;LE=1;
#define LED1_3_CS() C_138=0;B_138=1;A_138=0;LE=1;
#define LED1_4_CS() C_138=0;B_138=1;A_138=1;LE=1;
//右边一组数码管位选
#define LED2_1_CS() C_138=1;B_138=0;A_138=0;LE=1;
#define LED2_2_CS() C_138=1;B_138=0;A_138=1;LE=1;
#define LED2_3_CS() C_138=1;B_138=1;A_138=0;LE=1;
#define LED2_4_CS() C_138=1;B_138=1;A_138=1;LE=1;
#define LED_OFF() LE=0;
#define FONT_0 0xC0
#define FONT_1 0xF9
#define FONT_2 0xA4
#define FONT_3 0xB0
#define FONT_4 0x99
#define FONT_5 0x92
#define FONT_6 0x82
#define FONT_7 0xF8
#define FONT_8 0x80
#define FONT_9 0x90
#define FONT_Dot 0x7F
#define FONT_no 0xFF
/*—--函数声明---*/
void timer_init(void);/*定时器初始化*/
void timer0_ISR(void);/*定时器中断服务程序入口函数*/
void
display(int x,int y);
#endif
---------------------------------display.c--------------------------------------------------
#include"display.h"
#include "intrins.h"
unsigned char code segtab[12]={
FONT_0,// 0xC0
FONT_1,// 0xF9
FONT_2,// 0xA4
FONT_3,// 0xB0
FONT_4,// 0x99
FONT_5,// 0x92
FONT_6,// 0x82
FONT_7,// 0xF8
FONT_8,// 0x80
FONT_9,// 0x90
FONT_Dot,// 0x7F
FONT_no// 0xFF
};
unsigned char Dis=0;//显示计数器
/**************************************
定时器初始化
***************************************/
void timer_init(void)
{
//T0初始化
TMOD|=0x01; //定时器0工作方式1
TH0 = 0xfc;
TL0 = 0x18;
TR0 = 1;
ET0 = 1;
EA=1;
}
void display(int num0,int num1)
{
int i=0;
switch(Dis)
{
case 0:Dis++;
i=num0/1000;
LED1_1_CS();
DATAIPUT=~segtab[i];
break;
case 1:Dis++;
i=num0%1000/100;
LED1_2_CS();
DATAIPUT=~segtab[i];
break;
case 2:Dis++;
i=num0%100/10;
LED1_3_CS();
DATAIPUT=~segtab[i];
break;
case 3:Dis++;
i=num0%10;
LED1_4_CS();
DATAIPUT=~segtab[i];
break;
case 4:Dis++;
i=num1/1000;
LED2_1_CS();
DATAIPUT=~segtab[i];
break;
case 5:Dis++;
i=num1%1000/100;
LED2_2_CS();
DATAIPUT=~segtab[i];
break;
case 6:Dis++;
i=num1%100/10;
LED2_3_CS();
DATAIPUT=~segtab[i];
break;
case 7:Dis++;
i=num1%10;
LED2_4_CS();
DATAIPUT=~segtab[i];
break;
default:Dis=0;
LED_OFF();
break;
}
}
/**************************************
T0定时器 1ms
***************************************/
void timer0_ISR(void) interrupt 1
{
display(1234,5678);
TH0 = 0xfc;
TL0 = 0x18;
}
---------------------------------main.c-----------------------------------
#include "reg52.h"
#include "display.h"
int main(void)
{
timer_init();
while(1);
}