51单片机实验二:数码管静态显示

发布于:2025-04-20 ⋅ 阅读:(45) ⋅ 点赞:(0)

目录

一、实验环境与实验器材

二、实验内容及实验步骤

1.单个数码管显示

2.六个数码管依次从0~F变换显示

3.proteus仿真


 

一、实验环境与实验器材

环境:KeliSTC-ISP烧写软件,Proteus.        

器材:TX-1C单片机(STC89C52RC)

图1.1 工具

二、实验内容及实验步骤

1.单个数码管显示

Keil编写及编译生成hex文件,STC烧写下载至单片机,单片机数码管静态显示‘8’

#include<reg52.h>
sbit dula=P2^6;                 // 申明U1锁存器的锁存端
sbit wela=P2^7;					// 申明U2锁存器的锁存端
void main()
{
    wela=1;								// 打开U2锁存端
	P0=0xFE;							// 送入位选信号
	wela=0;								// 关闭U2锁存端

    dula=1;								// 打开U1锁存端
	P0=0x7F;							// 送入位选信号
	dula=0;								// 关闭U1锁存端    
    while(1);
}

图2.1.1 烧录

图2.1.2 硬件效果

proteus 仿真效果

图2.2.3 Proteus仿真图“第一数码管显示8” 

2.六个数码管依次从0~F变换显示

#include "reg52.h"
#define uchar unsigned char     //定义无符号字符型
#define uint unsigned int       //定义无符号整形
sbit dula=P2^6;                 // 申明U1锁存器的锁存端
sbit wela=P2^7;					// 申明U2锁存器的锁存端
uchar num;
uchar code table[]={0x3f,0x06,0x5b,0x4f,      // 0-F共阴级数码管编码
					0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,
					0x39,0x5e,0x79,0x71};
void delayms(uint);						//声明延时函数

void main()
{
	wela=1;								// 打开U2锁存端
	P0=0xc0;							// 送入位选信号
	wela=0;								// 关闭U2锁存端
	while(1)
	{
		for(num=0;num<16;num++)			// 16个数循环显示
		{
			dula=1;						// 打开U1锁存端
			P0=table[num];				// 送入选段信号
			dula=0;						// 关闭U1锁存端
			delayms(500);				// 延时0.5s
		}
	}

}

void delayms(uint xms)        // 定义延时函数
{
	uint i,j;
	for(i=xms;i>0;i--)		  // i=xms即延时约xms毫秒 
		for(j=110;j>0;j--);
}

图 2.2.1 硬件初始显示

图2.2.2 硬件最后显示 

proteus仿真图:

图2.2.2 proteus 仿真图 

视频:

静态数码管显示0~F

 

3.proteus仿真

仿真图:

图2.3.1 Proteus仿真电路图 

因为仿真点亮画的简单,所以代码也相对简单:

#include "reg52.h"
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴0-9

void delay(unsigned int n)
{
	unsigned int i=0,j=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<120;j++);
	}
}

void seg()
{
	int i=0;
	for(i=0;i<16;i++)
	{
		P2=s[i];    //0011 1111
		delay(1000);
	}
}

void main()
{
	while(1)
	{
		seg();
	}

}

视频:

静态数码管bz

注意:仿真电路绘画中,共阴共阳电路易混淆。(共阴接地,共阳接电源)

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到