动态数码管_单片机_普中

 1 动态数码管:动态显示是利用减少段选线,分开位选线,利用位选线不同时选择通断,改变段选数据来实现的。

 2 功能要求:控制动态数码管从左至右显示数字 0-7。

 3 硬件设计

4 软件设计

smg_dynamic.c
 1 #include "reg52.h"    //建立软件与单片机硬件的连接关系
 2 
 3 typedef unsigned int u16; //对系统默认数据类型进行重定义
 4 typedef unsigned char u8;
 5 
 6 #define SMG_SEG P0    //使用宏定义数码管段选信号端口
 7 
 8 sbit LSA = P2^2;   //定义数码管位选信号控制管脚,38译码器
 9 sbit LSB = P2^3;
10 sbit LSC = P2^4;
11 
12 //共阴数码管显示0-F的段码数据
13 u8 smg_code[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
14                    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
15 
16 void delay_10us(u16 ten_us)
17 {
18      while(ten_us--);
19 }
20 
21 void smg_display(void)
22 {
23   u8 i = 0;
24   for(i=0;i<8;i++)
25   {
26     switch(i)
27     {
28        case 0 : LSC = 1; LSB = 1;  LSA = 1; break;
29        case 1 : LSC = 1; LSB = 1;  LSA = 0; break;
30        case 2 : LSC = 1; LSB = 0;  LSA = 1; break;
31        case 3 : LSC = 1; LSB = 0;  LSA = 0; break;
32        case 4 : LSC = 0; LSB = 1;  LSA = 1; break;
33        case 5 : LSC = 0; LSB = 1;  LSA = 0; break;
34        case 6 : LSC = 0; LSB = 0;  LSA = 1; break;
35        case 7 : LSC = 0; LSB = 0;  LSA = 0; break;
36     }
37     SMG_SEG =  smg_code[i];     //传送段选数据
38     delay_10us(100);  //延时一段时间(约1ms),等待显示稳定
39     SMG_SEG =  0x00;  //消影,先关闭段选端,待位选端稳定后(中间状态),再打开段选
40   }
41 }
42 
43 void main()
44 {
45     while(1)
46     {
47          smg_display();    //8个数码管依次点亮,不断循环    
48     }    
49 }

5 实验现象

使用USB线将开发板和电脑连接成功后(电脑能识别开发板上CH340串口),把编译后产生的.hex文件烧入51单片机芯片内,实现现象如下:数码管上从左向右依次显示01234567。

6 参考资料:

(1)普中51单片机课程。

 

posted @ 2022-01-22 11:45  豌豆茶  阅读(723)  评论(0编辑  收藏  举报