51单片机实验二:数码管静态显示
目录
一、实验环境与实验器材
二、实验内容及实验步骤
1.单个数码管显示
2.六个数码管依次从0~F变换显示
3.proteus仿真
一、实验环境与实验器材
环境:Keli,STC-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-9void 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 1111delay(1000);}
}void main()
{while(1){seg();}}
视频:
静态数码管bz
注意:仿真电路绘画中,共阴共阳电路易混淆。(共阴接地,共阳接电源)