第一篇:单原理,数码管动态显示实验单原理实验报告
宁德师范学院计算机系
实验报告
(2014—2015 学年 第 2 学期)
课程名称 单片机原理 实验名称 数码管动态显示实验 专 业计算机科学与技术(非师范)
年 级 2012 级 学号 B2012102147 姓名 王 秋 指导教师 杨烈君 实验日期 2015.4.17
实验目的 :
1.巩固 Proteus 软件和 Keil 软件的使用方法
2.学习端口输入输出的高级应用
3.掌握 7 段数码管的连接方式和动态显示法
4.掌握查表程序和延时等子程序的设计
实验 要求:
1.在 Proteus 软件中画好 51 单片机最小核心电路,包括复位电路和晶振电路
2.在电路中增加八位 7 段数码管(共阳/共阴自选),将 P2 口作数据输出口与 7 段数码管数据引
脚相连,P3 引脚输出位选控制信号
3.在 Keil 软件中编写程序,采用动态显示法,实现数码管分别显示数字 1-8
4.实现指定数值的显示 (可使用 缓存数值)
5.实现类似时钟的效果,如“ 13-23-25” 13 时 23 分 25 秒
6.实现时钟的自动计时
7.扩展要求: 结合 LED 显示,实现带数码显示的交通灯
实验设备(环境):
1(计算机
2(Proteus ISIS 7 Professional 应用程序
3(Keil 应用程序
实验内容:
数码管动态显示技术 要求实现:
1(动态显示法,实现数码管分别显示数字 1-8;
2(实现指定数值的显示(可使用 缓存数值)(33355223);
3(实现类似时钟的效果,如“ 13-23-25” 13 时 23 分 25 秒;
4(实现时钟的自动计时;
扩展要求: 结合 LED 显示,实现带数码显示的交通灯;
实验步骤、实验结果及分析:实验步骤:
1、使用 Proteus ISIS 7 Professional 应用程序,建立一个.DSN 文件 2、在“库”下拉菜单中,选中“拾取元件”(快捷键 P),分别选择以下元件:AT89C51、CAP、CAP-ELEC、CRYSTAL、RESPACK-8。
3、构建仿真电路:
连接图
显示 1-8
显示 33355223
显示时间 13.23.25
时钟自动计时
连接图
红绿灯效果图 1
红绿灯效果图 2
4、创建一个 Keil 应用程序:新建一个工程项目文件;为工程选择目标器件(AT89C52);为工程项目创建源程序文件并输入程序代码;保存创建的源程序项目文件;把源程序文件添加到项目中。
5、把用户程序经过编译后生成的 HEX 文件添加到仿真电路中的处理器中(编辑元件?文件路径)2 实验程序 <流程图>
开始
定义数组
开始 Ledcode[]开始
定义数组
定义数组
定义数组
Dispbug[]Ledcode[]Ledcode[]存放指定数
While 定义 Dispbug[]While(1)存放指定数(1)YYFor 定义子函数
ForN(i=0;i<8(i=0;i<8PutTime())),...,调用延 YY 时函数
P3=1< For 调用延时 N 调用延时(i=0;i 开始 P3=1< Ledcode[]i++ 调用延时定义 Dispbug[]函数存放指定数 If(ms>=60)定义子函数 YPutTime()comsec=(com,...,sec+1)% 60;,ms=0 While(1)If(comsec <20) YY Sec1=20-comsec;PutTime()Sec2=30-comsec;R1=1;y1=0;g1=0;r2=0;y2=0;g2=1; YForIf(comsec>=20(i=0;i<8)&& comsec<30)sec1=60-comsec;sec1=30-comsec;Sec2=60-comsec;Sec2=30-comsec;R1=0;y1=1;g1=0;R1=1;y1=0;g1=0;r2=1;y2=0;g2=0;r2=0;y2=1;g2=0; Y If(comsec>=30 If(Comsec>60)&& comsec<50) sec1=60-comsec;YSec2=50-comsec;R1=0;y1=0;g1=1;r2=1;y2=0;g2=0; 程序源代码: 1(动态显示法,实现数码管分别显示数字 1-8; #include #define uchar unsigned char #define uint unsigned int uchar code Ledcode[]={ 0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义一个数组里面放入 1-8 void delay(uint x) { while(x--); } void main() { uchar i; while(1) { for(i=0;i<8;i++) { P3=1< P2=~Ledcode[i];//P2 口用来显示所需要显示的数值 delay(500); } } } 2.实现指定数值的显示 (可使用 缓存数值)(33355223); #include 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() { unsigned int i; for(i=0;i<8;i++){ P3=1< P2=~LedCode[DispBuf[i]];//显示指定数的位置 delay(500); } } 3.实现类似时钟的效果,如“ 13-23-25” 13 时 23 分 25 秒; #include 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]; void delay(unsigned int x) { while(x--); } void PutTime() { DispBuf[7]=Sec%10;//取对应秒数的个位放在最右边显示 DispBuf[6]=Sec/10;//取对应秒数的十位放在右起第二位显示 DispBuf[5]=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++) { P3=1< P2=~LedCode[DispBuf[i]]; delay(500); } } } 4.实现时钟的自动计时; #include 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];void delay(unsigned int x){ while(x--); } void PutTime() { DispBuf[7]=Sec%10; DispBuf[6]=Sec/10; DispBuf[5]=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,ms;//定义一个 ms 用于控制秒数加一的延时 PutTime(); for(i=0;i<8;i++) { P3=1< P2=~LedCode[DispBuf[i]]; delay(500); } ms++;//控制加一的时延 if(ms>=20) { Sec++;ms=0; } if(Sec>=60)//表示进位,当秒满六十则向分钟进一,同时秒数清零 { 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() { DispBuf[3]=sec2 % 10; DispBuf[2]=sec2 / 10; DispBuf[1]=sec1 % 10; DispBuf[0]=sec1 / 10;} void display() { uchar i; for(i = 0;i < 8;i ++) { P3=0; P1=~LedCode[ DispBuf[i] ]; P3=1< delay(100); } } 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 亮 sec1=20-comsec;sec2=30-comsec; r1=1;y1=0;g1=0; r2=0;y2=0;g2=1; } if(comsec>=20 && comsec<30){ //comsec 在 20 与 30 之间时y2、r1 亮 sec1=30-comsec;sec2=30-comsec; 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){ sec1=60-comsec;sec2=60-comsec; r1=0;y1=1;g1=0; r2=1;y2=0;g2=0; } } } 过程总结: 本实验是将单片机的 P2 口做为输出口,将四个数码管的七段引脚分别接到 P2.0 至P2.7.由于电路中采用共阳极的数码管,所以当 P2 端口相应的引脚为 0 时,对应的数码管段点亮。程序中预设了数字 0-9 的段码。由于是让八个数码管显示不同的数值,所以要用扫描的方式来实现。因此可定义扫描函数,接到单片机的 P3 口。 在实验中,预设的数字段码表存放在数组 LedCode 中,由于段码表是固定的,因此存储类型可设为 code.在 Proteus 软件中按照要求画出电路,再利用 Keil 软件按需要实现的功能编写 c 程序,生成 Hex 文件,把 Hex 文件导到 Proteus 软件中进行仿真。 心得体会: 实验数码管显示程序的编程方法 1)先准备好要显示的数据,放入相应的显示存储单元中。 2)根据要使用的数码管的具体位置来确定扫描初值和扫描方向。 3)根据使用数码管的个数来确定扫描的位数。 4)查表将要显示的数据转换为能使数码管正确显示相对应的段码。 5)分时送段码和位码,数码管开始循环显示。 指导教师评语: 1、完成所有规定的实验内容,实验步骤正确,结果正确; 2、完成绝大部分规定的实验内容,实验步骤正确,结果正确; 3、完成大部分规定的实验内容,实验步骤正确,结果正确; 评定等级:A(优秀)B(良好)C(中等)D(及格)E(不及格) 成绩评定 教师签字 年 月 日 备注: 注:1、报告内的项目或设置,可根据实际情况加以补充和调整 2、教师批改学生实验报告应在学生提交实验报告 10 日内 实验五 七段数码管动态显示实验 一、实验目的 掌握数码管动态显示数字的原理 二、实验内容 动态显示:按图5-2连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255 C口的PC1,PC0。编程在十位和个位两个数码管上显示“56”。 三、编程提示 实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。 . 看清实验目的和要求 2. 注意实验步骤 3. 连接实验线路时请注意开关的位置 4. 根据原理框图编写程序,保存为学号名+SY2 例:1928101sy5 5. 记录下实验中遇到的问题,实验的实际意义 6. 准备实验报告的数据 如何解决的,搞懂 实验六 竞赛抢答器 一、实验目的 1、了解微机化竞赛抢答器的基本原理。 2、进一步学习使用并行接口。 二、实验内容 图7-1为竞赛抢答器(模拟)的原理图,逻辑开关K0~K7代表竞赛抢答按钮0~7号,当某个逻辑电平开关置“1”时,相当某组抢答按钮按下。在七段数码管上将其组号(0~7)显示出来,并使微机扬声器响一下。 三、编程提示 设置8255为C口输入、A口输出,读取C口数据,若为0表示无人抢答,若不为0则有人抢答。根据读取数据可判断其组号。从键盘上按空格键开始下一轮抢答,按其它键程序退出。 附加试验: 可编程定时器/计数器(8253) 一、实验目的: 掌握8253的基本工作原理和编程方法。 二、实验内容 按图3-2连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。用示波器观察OUT0,OUT1输出电平的变化和波形。同时用七段数码管段码显示出来 三、编程提示 8253控制寄存器地址283H 计数器0地址280H 计数器1地址281H CLK0连接时钟 1MHZ 请各位同学在上机实验前编好程序,要检查! 实验时间 周四 计科83班:8:00-9:30 网工 82:9:40-11:10 网工 81:12:30-14:00 计科81班:14:00-15:30 计科82班:15:30-17:00 实验地点:教学楼B610 1.到5楼计算中心值班室请值班老师开门 2.这周日上午为自由实验时间,愿意去的同学请先向各班长或课代表报名 《数据结构》实验报告二 分校: 学号: 日期: 班级: 姓名: 程序名: L2311.CPP 一、上机实验的问题和要求: 单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求: 1.从键盘输入20个整数,产生带表头的单链表,并输入结点值。 2.从键盘输入1个整数,在单链表中查找该结点。若找到,则显示“找到了”;否则,则显示“找不到”。 3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。4.从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。5.将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结点值,观察输出结果。 6.删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。 7.把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。8.(★)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。 二、程序设计的基本思想,原理和算法描述: (包括程序的结构,数据结构,输入/输出设计,符号名说明等) 三、源程序及注释: 四、运行输出结果: 五、调试和运行程序过程中产生的问题及采取的措施: 六、对算法的程序的讨论、分析,改进设想,其它经验教训: 七、对实验方式、组织、设备、题目的意见和建议: 数据通路组成实验 一、实验目的 (1)将双端口通用寄存器组和双端口存储器模块联机; (2)进一步熟悉计算机的数据通路; (3)掌握数字逻辑电路中故障的一般规律,以及排除故障的一般原则和方法; (4)锻炼分析问题与解决问题的能力,在出现故障的情况下,独立分析故障现象,并排除故障。 二、实验电路 图9.14示出了数据通路实验电路图,它是将前面进行的双端口存储器实验模块和一个双端口通用寄存器组模块连接在一起形成的,存储器的指令端口不参与本次实验,通用寄存器组连接运算器模块,本实验涉及其中的操作数寄存器DR2。 由于RAM是三态门输出,因而可以将RAM连接到数据总线BUS上。此外,BUS上还连接着双端口通用寄存器组。这样,写入RAM的数据可由通用寄存器提供,而从RAM读出的数据也可送到通用寄存器保存。 RAM和DR2在前面的实验中使用过。对于通用寄存器组RF,它由一个在系统可编程(In System Programable)芯片ispLSI 1016固化了通用寄存器组的功能而成,其功能与双端口寄存器组MC14580相类似,内含四个8位的通用寄存器,带有一个输入端口和两个输出端口,从而可以同时写入一路数据,读出两路数据。输入端口取名为WR端口,连接一个8位的缓冲寄存器ER(已集成在ispLSI 1016芯片中),输出端口取名为RS端口、RD端口,分别连接运算器模块的两个操作数寄存器DR1、DR2,其中,连接DR1的RS端口还可通过一个8位的三态门RSO直接向BUS输出。双端口通用寄存器组模块的控制信号中,RS1、RS0用于选择从RS端口读出的通用寄存器,RD1、RD0用于选择从RD端口读出的通用寄存器,上述选择信号在T1脉冲的上升沿到来时生效。而WR1、WR0则用于选择从WR端口写入的通用寄存器。WRD是写入控制信号,WRD=1时,在T2上升沿的时刻,从ER写入数据;WRD=0时,ER中的数据不写入通用寄存器中。LDER信号控制ER从BUS写入数据,RS-BUS信号则控制RS端口到BUS的输出三态门。以上控制信号各自连接一个二进制开关。 三、实验设备 (1)JYS-4计算机组成原理实验仪一台(2)双踪示波器一台(3)直流万用表一只(4)逻辑测试笔一支 四、实验任务 (1)将实验电路与操作面板的有关信号进行线路连接,方法同前面的实验。(2)用8位数据开关向RF中的四个通用寄存器分别置入以下数据(十六进制):R0=0F,R1=F0,R2=55,R3=AA。 给R0置入0F的步骤是:先用8位数码开关将0F置入ER,并且选择WR1=WR0=0,再将ER的数据置入RF。给其他通用寄存器置入数据的步骤与此类似。 (3)分别将R0至R3中的数据同时读入到DR2寄存器和BUS上,观察其数据是否存入R0至R3中的数据,并记录数据。其中BUS上的数据可直接用指示灯显示,DR2中的数据可用逻辑笔测试有关引脚。 (4)用8位数码开关向AR1送入一个地址0F,然后将R0中的0F写入RAM。用同样的方法,依次将R1至R3中的数据写入RAM中的F0、55、AA单元。 (5)分别将RAM中AA单元的数据写入R0,55单元的数据写入R1,F0单元写入R2,0F单元写入R3。然后将R3、R2、R1、R0中的数据读出到BUS上,通过指示灯验证读出的数据是否正确,并记录数据。 (6)进行RF并行输入输出试验。 1.选择RS端口对应R0,RD端口对应R1,WR端口对应R2,并使WRD=1,观察并行输入输出的结果。选择RS端口对应R2,验证刚才的写入是否生效。记录数据。2.保持RS端口和WR端口同时对应R2,WRD=1,而ER中置入新的数据,观察并行输入输出的结果,RS端口输出的是旧的还是新的数据?(7)在数据传送过程中,发现了什么故障?如何克服的? 五、实验要求(1)做好实验预习和准备工作,掌握实验电路的数据通路特点和通用寄存器组的功能特性。(2)写出实验报告,内容为 1.实验目的; 2.如碰到故障,记录故障现象,排除故障的分析思路,故障定位及故障的性质; 3.实验数据记录; 4.值得讨论的其他问题。 南 京 晓 庄 学 院 《数据库原理与应用》 课程实验报告 实验一 SQL Server 2005常用服务与实用工具实验 所在院(系): 数学与信息技术学院 班级: 学号: 姓名: 1.实验目的 (1)了解Microsoft 关系数据库管理系统SQL Server的发展历史及其特性。(2)了解SQL Server 2005的主要组件、常用服务和系统配置。 (3)掌握Microsoft SQL Server Management Studio 图形环境的基本操作方法。了解使用“SQL Server 2005 联机从书”获取帮助信息的方法;了解“查询编辑器”的使用方法;了解模板的使用方法。 2.实验要求 (1)收集整理Microsoft关系数据库管理系统SQL Server的相关资料,总结其发展历史及SQL Server 2005主要版本类别和主要功能特性。 (2)使用SQL Server配置管理器查看和管理SQL Server 2005服务。 (3)使用Microsoft SQL Server Management Studio连接数据库;使用SQL Server帮助系统获得所感兴趣的相关产品主题/技术文档。 (4)使用Microsoft SQL Server Management Studio“查询编辑器”编辑并执行Transact-SQL查询语句。 (5)查看Microsoft SQL Server 2005模板,了解模板的使用方法。(6)按要求完成实验报告。 3.实验步骤、结果和总结实验步骤/结果 (1)简要总结SQL Server系统发展历史及SQL Server 2005主要版本类别与主要功能特性。 (2)总结SQL Server Management Studio的主要操作方法。 (3)总结查询编辑器的功能和主要操作方法,并举例说明。 (4)总结“模板”的使用方法,并举例说明。 4.实验思考: 查询相关资料,简要描述SQL Server 2005的主要服务。第二篇:实验五___七段数码管动态显示实验_xs
第三篇:单链表实验报告
第四篇:计算机组成原理实验报告+++数据通路实验
第五篇:数据库原理实验报告