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

📄 display.c

📁 本程序是用51单片机设计的一个时钟程序,对于想了解单片机的C语言和汇编语言的开发人员是一个不错的例程.
💻 C
字号:
/*
*********************************************************************************
*      此模块为显示程序,刷新速率为50Hz,每刷新一次为20ms,每个字段显示5ms      *
*********************************************************************************
*/
#include <reg668.h>
#include <constant.h>

sbit	Disp0	=	P1^0;			//数位(1)选通位
sbit	Disp1	=	P1^1;			//数位(2)选通位
sbit	Disp2	=	P1^2;			//数位(3)选通位
sbit	Disp3	=	P1^3;			//数位(4)选通位
sbit	Disp4	=	P1^4;			//数位(5)选通位
sbit	Disp5	=	P1^5;			//数位(6)选通位
sbit	Disp6	=	P1^6;			//数位(7)选通位
sbit	Disp7	=	P1^7;			//数位(8)选通位

sbit	Speaker	=	P3^5;			//扬声器控制脚

sbit	Dot	=	P0^7;			//小数点显示位

extern bit Dot_Value;
extern unsigned char formflag;
extern unsigned char CountTime2;
extern unsigned char Disp_array[Eight];
unsigned char code Seven_seg[26][2]={
	{0x00,0x0C0},				//字形0
	{0x01,0x0F9},				//字形1
	{0x02,0x0A4},				//字形2
	{0x03,0x0B0},				//字形3
	{0x04,0x99},				//字形4
	{0x05,0x92},				//字形5
	{0x06,0x82},				//字形6
	{0x07,0x0F8},				//字形7
	{0x08,0x80},				//字形8
	{0x09,0x90},				//字形9
	{0x0A,0x88},				//字形A
	{0x0b,0x83},				//字形b
	{0x0C,0x0C6},				//字形C
	{0x0d,0x0A1},				//字形d
	{0x0E,0x86},				//字形E
	{0x0F,0x8E},				//字形F
	{0x10,0x0FF},				//无显示
	{0x11,0x0F8},				//字形T
	{0x12,0x0FE},
	{0x13,0x0C9},				//字形||
	{0x14,0x0C8},				//字形n
	{0x15,0x86},				//字形E
	{0x16,0x0CE},				//字形r
	{0x17,0x92},				//字形S
	{0x18,0x89},				//字形H
	{0x19,0x0C7}				//字形L
};

/*
共阳极数码管,低电平有效。
**********************************************************************************
*                           (1)       (2)       (3)       (4)                    *
*                  P0.0----$$$$$$    $$$$$$    $$$$$$    $$$$$$-----a            *
*                  P0.1----$    $    $    $    $    $    $    $-----b            *
*                  P0.2----$    $    $    $    $    $    $    $-----c            *
*                  P0.3----$____$    $____$    $____$    $____$-----d            *
*                  P0.4----$    $    $    $    $    $    $    $-----e            *
*                  P0.5----$    $    $    $    $    $    $    $-----f            *
*                  P0.6----$    $    $    $    $    $    $    $-----g            *
*                  P0.7----$$$$$$    $&&&&& *  $$$$$$    $$$$$$-----dp           *
*                             |         |         |         |                    *
*                           P1.0      P1.1      P1.2      P1.3                   *
**********************************************************************************
Disp_array[0]第一位字段值;
Disp_array[1]第二位字段值;
Disp_array[2]第三位字段值;
Disp_array[3]第四位字段值;
P0.7 ------- 对应Dot(小数点);
*/
void Display (void) interrupt 1 using 1		//使用Time2产生5ms中断
{
	unsigned char i;
	register unsigned char Seg_data;
	
	TH0 = 0x0E2;				//刷新定时常数;
	TL0 = 0x00;
	TF0 = 0;
	i = Disp_array[CountTime2];
	Seg_data = Seven_seg[i][1];
	switch (CountTime2)
	{
		case	0:			//显示第一位
			Disp7 = 0;
			P0 = ~Seg_data;
			Disp0 = 1;
			//Disp1 = 0;
			//Disp2 = 0;
			//Disp3 = 0;
			break;
		case	1:			//显示第二位
			Disp0 = 0;
			P0 = ~Seg_data;
			//Dot = Dot_Value;	//显示小数点
			Disp1 = 1;
			//Disp2 = 0;
			//Disp3 = 0;
			break;
		case	2:			//显示第三位
			//Disp0 = 0;
			Disp1 = 0;
			P0 = ~Seg_data;
			Disp2 = 1;
			//Disp3 = 0;
			break;
		case	3:			//显示第四位
			//Disp0 = 0;
			//Disp1 = 0;
			Disp2 = 0;
			P0 = ~Seg_data;
			Disp3 = 1;
			//CountTime2 = 0x00;
			break;
		case	4:
	    		//Speaker = ~Speaker;
			Disp3 = 0;
			P0 = ~Seg_data;
			Disp4 = 1;
			break;
		case	5:
			Disp4 = 0;
			P0 = ~Seg_data;
			if (formflag==0)
			{
				Dot = Dot_Value;//显示小数点
			}
			Disp5 = 1;
			//P0=0x0ff;
			//while (TRUE);
			break;
		case	6:
			Disp5 = 0;
			P0 = ~Seg_data;
			Disp6 = 1;
			break;
		case	7:
			Disp6 = 0;
			P0 = ~Seg_data;
			Disp7 = 1;
			//CountTime2=0x00;
			break;
	}
	CountTime2 = (CountTime2+1)%8;
}

⌨️ 快捷键说明

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