当前位置:文档之家› 单片机原理 数码管动态显示实验-单片机原理-实验报告

单片机原理 数码管动态显示实验-单片机原理-实验报告


} void main() { unsigned int i; for(i=0;i<8;i++){
P3=1<<i; P2=~LedCode[DispBuf[i
3. 实现类似时钟的效果,如“ 13-23-25” 13 时 23 分 25 秒;
#include<reg51.h>
unsigned char code LedCode[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsigned char Hour=13,Min=23,Sec=25;
unsigned char DispBuf[8];
指导教师评语: 1、完成所有规定的实验内容,实验步骤正确,结果正确; 2、完成绝大部分规定的实验内容,实验步骤正确,结果正确; 3、完成大部分规定的实验内容,实验步骤正确,结果正确;
评定等级:A(优秀) B(良好) C(中等) D(及格) E(不及格) 成绩评定
教师签字
年月日
备注:
注:1、报告内的项目或设置,可根据实际情况加以补充和调整 2、教师批改学生实验报告应在学生提交实验报告 10 日内
DispBuf[4]=Min%10;
DispBuf[3]=Min/10;
DispBuf[2]=10;
DispBuf[1]=Hour%10;
DispBuf[0]=Hour/10; } void main() { long n=0; while(1) {
unsigned char i; PutTime(); for(i=0;i<8;i++) {
实验要求:
1. 在 Proteus 软件中画好 51 单片机最小核心电路,包括复位电路和晶振电路 2. 在电路中增加八位 7 段数码管(共阳/共阴自选),将 P2 口作数据输出口与 7 段数码管数据 引脚相连 ,P3 引脚输出位选控制信号 3. 在 Keil 软件中编写程序,采用动态显示法,实现数码管分别显示数字 1-8 4. 实现指定数值的显示 (可使用 缓存数值) 5. 实现类似时钟的效果,如“ 13-23-25” 13 时 23 分 25 秒 6. 实现时钟的自动计时 7. 扩展要求: 结合 LED 显示,实现带数码显示的交通灯
2 实验程序 <流程图>
程序源代码:
1.动态显示法,实现数码管分别显示数字 1-8;
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Ledcode[]={
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定义一个数组里面放
连接图 显示 1-8 显示 33355223
显示时间 13.23.25 时钟自动计时 连接图
红绿灯效果图 1 红绿灯效果图 2
4、创建一个 Keil 应用程序:新建一个工程项目文件;为工程选择目标器件(AT89C52);为工程 项目创建源程序文件并输入程序代码;保存创建的源程序项目文件;把源程序文件添加到项目中。 5、把用户程序经过编译后生成的 HEX 文件添加到仿真电路中的处理器中(编辑元件→文件路径)
}
}
}
2. 实现指定数值的显示 (可使用 缓存数值) (33355223);
#include<reg51.h> unsigned char code LedCode[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40 }; unsigned char DispBuf[8]={3,3,3,5,5,2,2,3}; //指定要显示的数的位置 void delay(unsigned int x){ while(x--);
void main ()
{
while(1)
{
uchar ms;
PntTime();
display();
ms++;
if( ms >=60){
ms=0;
comsec=(comsec+1) % 60; //定义一个计数变量,使其一直保持在 60 内
}
if( comsec <20){
//comsec 在 20 以内时 g2、r1 亮
Min++;Sec=0; } if(Min>=60) {
Hour++;Min=0; } if(Hour>=24) //当小时数满 24 小时时,则小时数清零,完成计时 {
Hour=0; } } }
5. 扩展要求: 结合 LED 显示,实现带数码显示的交通灯; #include "reg52.h" #define uint unsigned int #define uchar unsigned char #define Disp_Null 10 uchar code LedCode[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar DispBuf[8]; sbit r1=P2^0;sbit y1=P2^1;sbit g1=P2^2; sbit r2=P2^3;sbit y2=P2^4;sbit g2=P2^5; uchar sec1;sec2;comsec; void delay(uint x) {
while(x--); } void PntTime( ) {
void delay(unsigned int x)
{
while(x--);
}
void PutTime()
{
DispBuf[7]=Sec%10; //取对应秒数的个位放在最右边显示
DispBuf[6]=Sec/10; //取对应秒数的十位放在右起第二位显示
DispBuf[5]=10;
//此处表示秒跟分之间用横杆隔开
unsigned char i,ms; //定义一个 ms 用于控制秒数加一的延时 PutTime(); for(i=0;i<8;i++) {
P3=1<<i; P2=~LedCode[DispBuf[i]]; delay(500); } ms++; //控制加一的时延
if(ms>=20) {
Sec++;ms=0; } if(Sec>=60) //表示进位,当秒满六十则向分钟进一,同时秒数清零 {
入 1-8
void delay(uint x)
{
while(x--);
}
void main()
{
uchar i;
while(1)
{
for(i=0;i<8;i++)
{
P3=1<<i;
//P3 口表示从第一个位开始显示数值
P2=~Ledcode[i]; //P2 口用来显示所需要显示的数值
delay(500);
宁德师范学院计算机系
实验报告
(2014—2015 学年 第 2 学期)
课程名称
单片机原理
实验名称 数码管动态显示实验
专 业计算机科学与技术(非师范)
年级
2012 级
学号 B2012102147 姓名 王 秋
指导教师
杨烈君
实验日期
2015.4.17
实验目的:
1. 巩固 Proteus 软件和 Keil 软件的使用方法 2. 学习端口输入输出的高级应用 3. 掌握 7 段数码管的连接方式和动态显示法 4. 掌握查表程序和延时等子程序的设计
r1=1;y1=0;g1=0;
r2=0;y2=1;g2=0;
}
if(comsec>=30 && comsec<50){ //g1、r2 在 comsec 增加 20 内亮
sec1=60-comsec; sec2=50-comsec;
r1=0;y1=0;g1=1;
r2=1;y2=0;g2=0;
} if(comsec>=50){
实验设备(环境):
1.计算机 2.Proteus ISIS 7 Professional 应用程序 3.Keil 应用程序
实验内容:
数码管动态显示技术 要求实现: 1.动态显示法,实现数码管分别显示数字 1-8; 2.实现指定数值的显示 (可使用 缓存数值) (33355223); 3.实现类似时钟的效果,如“ 13-23-25” 13 时 23 分 25 秒; 4.实现时钟的自动计时;
扩展要求: 结合 LED 显示,实现带数码显示的交通灯;
实验步骤、实验结果及分析: 1 实验步骤:
1、使用 Proteus ISIS 7 Professional 应用程序,建立一个.DSN 文件 2、在“库”下拉菜单中,选中“拾取元件”(快捷键 P),分别选择以下元件:AT89C51、CAP、CAP-ELEC、 CRYSTAL、RESPACK-8。 3、构建仿真电路:
在实验中,预设的数字段码表存放在数组 LedCode 中,由于段码表是固定的,因此存储类型可 设为 code.在 Proteus 软件中按照要求画出电路,再利用 Keil 软件按需要实现的功能编写 c 程序, 生成 Hex 文件,把 Hex 文件导到 Proteus 软件中进行仿真。
心得体会:
实验数码管显示程序的编程方法 1)先准备好要显示的数据,放入相应的显示存储单元中。 2)根据要使用的数码管的具体位置来确定扫描初值和扫描方向。 3)根据使用数码管的个数来确定扫描的位数。 4)查表将要显示的数据转换为能使数码管正确显示相对应的段码。 5)分时送段码和位码,数码管开始循环显示。
相关主题