目录
一. 系统功能简介 2
二. 硬件电路设计 2
1.Proteus原理图: 2
2.元件清单: 3
三. 软件设计 3
1. 流程图: 3
2. 程序: 4
四.系统调试 6
4.1仿真: 6
4.1.1步骤: 6
4.1.2 仿真图片: 6
4.1.3 结果: 7
4.2硬件电路调试: 7
4.2.1 步骤: 7
4.2.2运行结果照片: 8
4.2.3结论: 9
4.2.4系统使用说明: 9
五.系统设计感受 9
一. 系统功能简介
由P2口将所要显示的七段显示码直接输出到4位数字七段LED数码管模块,再由P1口的低
四位将扫描信号直接送到七段显示模块的4个公共端,使这个七段LED数码管模块闪烁“2008”3次,再闪烁“0315”3次,如此循环不停。
二. 硬件电路设计
1.Proteus原理图:
2.元件清单:
名称 | 型号 | 数量(个) |
电阻 | 3WATT100R | 8 |
电阻 | 3WATT1K | 4 |
LED数码管 | 7SEG-MPX1-CA | 4 |
三极管 | 2N3905 | 4 |
芯片 | AT89C51 | 1 |
三. 软件设计
1. 流程图:
no
yes
no
yes
2. 程序:
/* ch05-4-2.c - 直接驱动4位七节显示器实验,P1.0~3为扫描信号 P2接七节显示器 */
//==声明区====================================
#include <reg51.h> // 定义8051暂存器之标头档,P2-17~19
#define SCANP P1 // 定义扫瞄码由Port 1输出
#define SEG7P P2 // 定义七节显示码由Port 2输出
char code TAB[10]={ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, //数字0-4
0x92, 0x83, 0xf8, 0x80, 0x98 }; //数字5-9
char code disp[2][4]={ {2,0,0,8}, // 显示资料(显示器闪烁第0组)
{0,3,1,5}}; // 显示资料(第1组)
void delay1ms(int); // 声明延迟函数
void scanner(char); // 扫瞄函数
//==主程序====================================
main() // 主程序开始
{ char i,j; // 声明变数i,j
while(1) // 无穷循环,程序一直跑
{ for(i=0;i<2;i++) // 显示第0,1行字组,for循环(字组i)开始
for(j=0;j<3;j++) // 闪烁三次
{ scanner(i); // 扫瞄第i行字组
SCANP=0xff; // 全灭
delay1ms(480); // 延迟480 1m=0.48s
}
} // while循环结束
} // 主程序结束
//==子程序====================================
/* 延迟函数,延迟约x 1ms */
void delay1ms(int x) // 延迟函数开始
{ int i,j; // 声明整数变数i,j
for (i=0;i<x;i++) // 计数x次,延迟x 1ms
for (j=0;j<120;j++); // 计数120次,延迟1ms
} // 延迟函数结束
/* 扫瞄字组函数,显示第x组数字 */
void scanner(char x) // 扫瞄字组函数开始
{ char i,j,BCD,scan; // 声明变数
for (i=0;i<30;i++) // 扫瞄30次i循环
{ scan=0xf7; // 扫瞄信号初值1111 0111
for (j=0;j<4;j++) // 扫瞄4个数字j循环
{ SEG7P=0xff; // 关闭七段显示器(防止闪动)
SCANP=scan; // 输出扫瞄信号(低4位元)
BCD=disp[x][j]; // 读取第x组第j个数字之BCD码
SEG7P=TAB[BCD]; // 输出至七节显示器
delay1ms(4); // 延迟4ms
scan>>=1; // 产生下个扫瞄信号
} // 结束扫瞄4个数字j循环
} // 结束扫瞄30次i循环
} // scanner函数结束
四.系统调试
4.1仿真:
4.1.1步骤:
1.根据功能要求与电路结构,在Keil C里编写程序并进行生成,以产生.HEX文件。然后进行软件调试/仿真,看看其功能是否正常。若有错误或非预期的状态,则检查源程序,看看
哪里出了问题,修改将它记录在实验报告里。
2.若软件调试/仿真功能正常,可按图连接线路,并使用在线仿真器加载新的程序,以仿真该电路的动作。若非预期的状态,则检查线路的连接状态,看看哪里出了问题并将它记录在实验报告里。
3.若在线仿真功能正常,将程序刻录到89C51,再把该89C51放入实际电路,以取代刚才的在线仿真器,然后直接送电,看看是否正常。
4.编写实验报告。
4.1.2 仿真图片:
4.1.3 结果:
通过在线仿真器的仿真,实现了功能要求。
4.2硬件电路调试:
4.2.1 步骤:
根据原理图,在面包板上连接好各元件,保证焊接无错误,再把刻录好程序的89C51放入实际电路中,然后直接送电。
4.2.2运行结果照片:
4.2.3结论:
通过实际电路的运行,发现已经实现了功能要求。
4.2.4系统使用说明:
当电路送电时,LED数码管模块闪烁“2008”3次,再闪烁“0315”3次,如此循环不停,直到断电为止。
五.系统设计感受
这次的数码管闪烁显示设计,需要先用仿真器仿真,再把实际电路做出来。在用仿真器仿
真的步骤中,数码管我先采用的是7SEG-MPX4-CA,但是始终无法实现功能要求。于是,我先考虑三极管问题,我先后采用了2N3905,2N3906,但是仍无法实现功能要求。然后我又考虑数码管的问题,在先后尝试了多次后,终于在换成7SEG-MPX1-CA时,实现了功能要求。
在实际电路的焊接中,我先上网查了AT89C51和LED数码管的引脚图,在焊接时,一边对照引脚图,一边小心焊接。最后在将刻录好的AT89C51放入电路中,送电后,很好的实现了功能要求。
到此,数码管闪烁显示设计完成了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论