⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7段数码管.c

📁 用于51系列的单片机开发时基本的7段数码管驱动源代码
💻 C
字号:
/***************************************************
7段数码管动态显示程序
***************************************************/
#include <reg52.h>
#include <stdio.h>
#include <stdlib.h>
#include <absacc.h>
#include <ctype.h>                   
#include <string.h>
#include <stddef.h>
#include <intrins.h>
#include <absacc.h>
#include <stdarg.h>


#define TIMER0H 0xc4;
#define TIMER0L 0x00;
/*   7段数码管锁存器地址     */
#define LEDADDR 0x8000

// 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
/*  0-9 a-f 的7段数码管显示编码  */
unsigned char ledcode[16]={0x3F,0x0C,0x76,0x5E,0x4D,0x5B,0x7B,0x0E,0x7F,0x5F,0x6F,0x79,0x33,0x7C,0x73,0x63};
/*  存放要显示的数字值 */
unsigned char val[4];//
unsigned currled;


/*  写锁存器的子程序  */
void wraddr(unsigned int addr,unsigned char d)
{	unsigned char xdata *pa;

	pa=(unsigned char  xdata *)addr;
	*pa=d;
}
/*  显示子程序  */
void display(void)
{	
	unsigned char en[4]={1,2,4,8};


	if((val[currled]>=0)&&(val[currled]<=15))
	{	wraddr(LEDADDR,ledcode[val[currled]]);
		P1=en[currled];
	}
	else
	{	wraddr(LEDADDR,0x00);
		P1=en[currled];
	}
	if((currled>=0)&&(currled<3))
	{	currled++;
	}
	else
	{	currled=0;
	}
}
void time0(void) interrupt 1 
{	display();
	TL0 = TIMER0L;
	TH0 = TIMER0H;
}
/*  初始化子程序  */
void init(void)
{	
//timer0 init
	TL0 = TIMER0L;
	TH0 = TIMER0H;
	TR0=1;
	ET0=1;//test


// irq init
	EX0=0;
	IT0=0;
	EX1=0;	
	IT1=0;

	EA=1;
//输入要显示的数值
	val[0]=1;
	val[1]=2;
	val[2]=3;
	val[3]=4;
	currled=0;
}
/* 主程序入口  */
int main(void)
{	init();

	while(1)
	{		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -