一、数码管
数码管是单片机常用的数字、字符显示部件,本项目是利用单片机 P0 接口驱动一个共阳型数码管依次显示 0~9 并循环,利用单片机驱动 1 个数码管显示比较简单的单元项目。
1、数码管结构原理
单片机系统常用的数码管有共阳极型和共阴极型两种类型,它是单片机常用的外围显示器件。两种类型的数码管外形和结构类似,只是数码管内部组成数码段和标点的 LED 接法有区别。共阳极型数码管的内部所有 LED 的阳极接在一起为公共极引脚 COM,称为位选端,阴极分别引出,依次命名为 a、b、c、d、e、f、g、DP 称为段选端。共阳极型数码管使用时,其公共极接电源正极或加低电平,段选端分别接驱动电路,只有段选端加低电平时,对应的段发光二极管点亮。共阴极型数码管与共阳极型数码管解法刚好相反,由于内部所有 LED的阴极接在一起,所以数码管显示时需要在数码管的公共端接电源负极或加低电平,段选高电平有效。
2、数码管显示字型码
数码管可以显示 0~9 的数字,加上小数点显示,驱动一个数码管显示的段选信号共需要 8 位二进制。共阳极型数码管,段选端加低电平时,对应的段发光二极管点亮。例如:11111110 —— A 段亮起。共阳极型数码管显示编码如下:(共阴极相反)
显示数字 | A-DP(二进制) | 十六进制 |
---|---|---|
0 | 11000000 | 0xC0 |
1 | 11111001 | 0xF9 |
2 | 10100100 | 0xA4 |
3 | 10110000 | 0xB0 |
4 | 10011001 | 0x99 |
5 | 10010010 | 0x92 |
6 | 10000010 | 0x82 |
7 | 11111000 | 0xF8 |
8 | 10000000 | 0x80 |
9 | 10010000 | 0x90 |
二、仿真
1、选择元器件
这次实验要用的元器件有:AT89C51、共阳极数码管。共阳极数码管选择位置如下:(CC 是阴极)
2、摆放模拟电路
本项目使用的是共阳极数码管,段选段收到低电平信号,段发光二极管发光。如果使用共阴极数码管,需要在 P0 口接上拉电阻,段选段才能收到高电平信号。
三、程序
共阳极数码管,COM 口接高电平,为位选段循环赋 0~9 的字型编码的十六进制即可。代码如下:
//单个共阳数码管在P0口驱动下,循环显示0-9
#include<reg51.h>
unsigned char i;
//数字0~9的显示方法
code unsigned char seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(unsigned int x) //延时函数
{
unsigned int i; //定义整形变量 i
unsigned char j; //定义字符变量 j
for(i=0;i<x;i++)
for(j=0;j<200;j++);
}
void main(void)
{
P2 = 0x01;
while(1) //进入主程序循环
{
P0 = seven_seg[i];
delay(1000);
i++; //数据cp每次加一
if(i >= 10)i = 0;
}
}
代码编写完毕后生成 HEX 文件在仿真电路中运行即可。
标题:实验三:数码管0-9显示 —— AT89C51
作者:Yi-Xing
地址:http://47.94.239.232:10014/articles/2020/09/28/1601304405921.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!