《单片机实验流水灯报告.doc》由会员分享,可在线阅读,更多相关《单片机实验流水灯报告.doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验七 LED流水灯程序姓名XXXX学号学院光电学院班级电子信息工程四班实验目的1、掌握单片机IO工作原理;2、掌握单片机IO驱动工作方式 实验环境PC机一台和HC6800单片机实验箱一台及KEIL程序设计调试软件、仿真软件等。内容与步骤内容:驱动LED闪烁,闪烁节奏和方式可自定义。原理分析:本实验采用P0口来进行输出来控制LED等的亮与暗(通过高低电平来控制);采用左移的指令来控制“流水”状态。采用延时函数功能进行延时,实现“流水”的控制。采用中断进行同时亮同时暗的控制。步骤:1、 打开KEIL,新建工程:Project/New Project,输入工程名128,并保存;2、 选项选择器件:
2、Atmel 的AT89C52;3、 新建程序文本,并另存为该文件为.C格式: (1)“File/New”,(2) File/Save As/键入欲使用的文件名及后缀名,即“文件名.C”。并“保存”;4、 添加该文件该工程:回到编辑界面后,单击“Target 1”前面的“”号,然后在“Source Group 1”上单击右键,单击“Add File to Group Source Group 1” 文件;5、 在KEIL的文件中各自输入相应的程序代码,并编译,调试。 (1)写完代码后单击“Project”菜单,再在下拉菜单中单击“Built Target”选项(或者使用快捷键F7),编译成功后(
3、0个errors),(每次修改程序后都要重新编译下,才能生效)。 (2)再单击“Debug”菜单,在下拉菜单中单击“Start/Stop Debug Session”(或者使用快捷键Ctrl+F5),点击RUN进行运行,或者按F11进行单步运行;6、 观察运行结果:在KEIL的view/memory window窗口中输入相应地址查看运行结果是否正确,查看变量i和P0的变化情况;7、 反复编译和调试程序,直到无错误为止(程序能实现相应的功能);8、 使用ISIS软件进行仿真或单片机实验箱或是单片机开发板来进行程序功能的验证,即能实现“流水”的功能。 过程分析 本实验主要是采用延时程序来控制“流
4、水”的功能,同时采用中断进行亮与暗闪烁的效果,使用C52的P0口进行对LED的控制。过程的主要分析如下:#include#includeunsigned int i=0; /定义变量i;unsigned char data x=0xfe; /定义初值;void delay() /延时函数; int a,j; for(a=0;a1000;a+) for(j=0;j100;j+); /主函数;void main() P0=x;delay(); for(;i=8;i+) P0=_crol_(x,i); /左移,实现流水功能;delay(); TH0=(65536-50000)/256; /赋初值;
5、TL0=(65536-50000)%256; EA=1; /开CPU中断; ET0=1; /开T0中断; TR0=1; /开始计数; void timer0() interrupt 1 /中断函数; int k=0; for(;k=3;k+) P0=0; delay(); P0=0xff; delay(); main(); /返回主函数; 在KEIL上运行如下:本实验功能的验证是采用仿真来进行:验证电路图及功能效果如下:所以实验程序的设计功能可以实现。 对于在进行实验的设计时,可能存在的错误,主要是C语言的一些使用规则的错误和对中断控制等代码的错误。等发生错误时,就应从代码的开始部分进行检查和
6、分析,对于错误的地方进行修改,直到程序无错误为止。对于验证其功能时,应画对仿真电路图,正确运用仿真软件等。 结果总结通过本次对流水灯程序的设计,初步了解了单片机I/O口的基本原理和驱动的工作方式等 ,认识了HC6800单片机实验箱的基本应用。本次实验既采用延时程序进行控制,又采用了中断功能进行控制,效果很明显,且再次熟悉了有关中断方面的知识等。思考题: 采用中断进行“流水”的控制程序代码如下:#include#includeunsigned int i;unsigned char data x=0xfe;void main() TH0=(65536-50000)/256; TL0=(65536
7、-50000)%256; EA=1; ET0=1; TR0=1; while(1) P0=x; void time0() interrupt 1 i+; if(i=20) i=0; P0=_crol_(x,1); TH0=(65536-50000)/256; TL0=(65536-50000)%256; 附录源程序代码:#include#includeunsigned int i=0;unsigned char data x=0xfe;void delay() int a,j; for(a=0;a1000;a+) for(j=0;j100;j+); void main() P0=x;delay(); for(;i=8;i+) P0=_crol_(x,i);delay(); TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; void timer0() interrupt 1 int k=0; for(;k=3;k+) P0=0; delay(); P0=0xff; delay(); main(); 教师评阅 成绩
限制150内