实例(5)-数码管动态显示

  • 格式:pdf
  • 大小:218.67 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SMG_ShowNum(dat%100/10); P0 = (P0&0xf0)|position[2];
3
嵌入式学习——51 单片机篇
delay_ms(2);
Βιβλιοθήκη Baidu
SMG_ShowNum(dat%10); P0 = (P0&0xf0)|position[3]; delay_ms(2); }
//主函数
void main()
2
嵌入式学习——51 单片机篇
//向 HC595 发送一个字节
void HC595_send_byte(unsigned char byte)
{
unsigned char i,temp;
for(i=0;i<=7;i++)
{
temp = byte&1<<i;
if(temp)
{
HC595_DAT = 1; //数据线
HC595_send_byte(seg[num]); }
void SMG_Display(unsigned int dat) {
SMG_ShowNum(dat/1000); P0 = (P0&0xf0)|position[0]; delay_ms(2);
SMG_ShowNum((dat%1000)/100); P0 = (P0&0xf0)|position[1]; delay_ms(2);
while(time--)
SMG_Display(num);
}
}
四、最终效果图
4
{
unsigned int num=0;
unsigned char time=0;
P0=0X00;
//初始化低四位为高电平,使能四位数码管
HC595_RST=0;
//HC595 的复位端,不能让他复位
while(1)
{ num = (num+1)%10000;//动态显示 0~9999
time = 100;
在主函数里将 num 变量加 1,再输出显示,这样就可以看到数码管上的数字从 0、1、2„„ 一直加到 9999。最后再变回 0。
实验代码如下: #include "STC12C5A.h"//包含头文件
/***数字编码表 0~9***/ unsigned char const seg[10] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; //段选 unsigned char const position[]={1,2,4,8}; //位选 sbit HC595_SCK = P0^4; sbit HC595_RCK = P0^5; sbit HC595_RST = P0^6; sbit HC595_DAT = P0^7;
2.1、数码管动态显示原理
数码管动态显示的目的就是要在几个数码管上显示不同的数字,但是我们知道,四位数 码管的 8 个段是连接在一起的,都接到 74HC595 的 QA-QH 输出端。因此,同一个时刻里 面,是不可能让四位数码管显示不同的数字的,除非用 4 个 74HC595 来控制,或者是其他 的连接方法,但是这样字就会浪费巨大的 IO 口资源,不太现实。
}
else
{
HC595_DAT=0;
} //下面是写时序 HC595_SCK=1;
//SCK(11 脚)
delay_us(1);
HC595_SCK=0;
delay_us(1);
} HC595_RCK=0;
//RCK(12 脚)
delay_us(1);
HC595_RCK=1;
}
//显示一个数 num void SMG_ShowNum(unsigned char num) {
嵌入式学习——51 单片机篇
实验(5) 数码管动态显示
一、实验目的:
1、 熟练调用数码管的驱动程序。 2、 掌握数码管动态显示的原理。 3、 学会编写数码管动态显示程序。
二、实验原理:
关于数码管的结构特性、74HC595 的功能以及如何利用 74HC595 来驱动数码管,我们 在上实验 4 已进行讲述。在上一个实验中,我们只是简单的学习了数码管的静态显示,也就 是说,开发板上四位的数码管只能显示同一个数字。这样的话,数字的显示范围只有 0~9, 共 10 个数字。在本实验中,我们就是利用数码管的动态显示功能来扩大显示范围,可达 0000~9999,总共可以显示 10000 个不同的数字。当然,我们也可以用它来显示一些简单的 英文字母,如“good”这类。下面,我们进一步学习数码管动态显示的原理和方法。
动态显示其实也是建立在静态显示的基础上,在多个数码管,轮流显示,在轮流显示过 程中,每位数码管的点亮时间为 1~3 个毫秒,由于人的视觉暂留特性以及发光二极管的余 辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是 一组稳定的显示数据,不会有闪烁感,这就是数管码动态显示的原理。
2.2、硬件原理图
1
嵌入式学习——51 单片机篇
图4 硬件电路与上一个静态显示实验是完全一样的。
三、程序设计
下面,我们可以根据实验原理来设计数码管动态显示程序。首先将实验 4 数码管的驱动 调用至本程序中。在编程时,需要输出段选和位选信号,位选信号选中其中一个数码管,然 后输出段码,使该数码管显示所需要的内容,延时一段时间后,再选中下一位数码管,再输 出对应的段码。这样子就编写出一个子函数 void SMG_Display(unsigned int dat);利用这个 函数实现数四位数码管的一次轮显。函数中每位数码管的点亮时间为 2ms,2ms 结束后马上 熄灭,再轮到下一位数码点亮。函数入口参数为 unsigned int,16 位整形数据,但在调用该 函数输入形参时,限制输入范围是 0~9999,因为我们只有四位数码管。
//us 延时 void delay_us(unsigned int t) {
while(t--); }
//延时函数(24M 晶振下延时 1ms) void delay_ms(unsigned int time) {
unsigned int t; for(;time>0;time--) {
t = 1500; while(t--); } }