实验二中断显示控制 单片机控制led灯亮和灭,led灯初始状态从左到右两个灯间隔一个灯循环亮灭,然后从右到左循环亮灭,,当按下按键,led灯全亮,然后全灭。然后再恢复循环。 二、实验过程 (一)实验项目的方案分析 1.设计原理 STC12C5A60S2单片机内部包括微处理器、存储器(存放程序指令或数据的ROM、RAM等)、输入/输出口(I/O口)及其他功能部件如定时/计数器、中断系统等。它们通过地址总线、数据总线和控制总线连接起来。 本实验充分利用了8051芯片的I/O引脚。系统已采用STC12C5A60S2系列单片机为中心器件来设计数码管显示系统,实现数码管循环显示。 2.器件配置清单 表1器件配置表
(二)实验项目的硬件电路设计 通过Proteus仿真电路软件搭建电路,电路图如图所示。
图1硬件设计图 (三)实验项目的程序设计 1、C51程序编写
2、keil软件调试截图 通过Keil软件进行C51控制程序的编写,通过不断调试修改,最终的调试好的Keil 程序截图如图2所示。 
图2调试无措的Keil程序 (四)实验项目的虚拟仿真 打开Keil C软件将上面程序输入,调试无误后编译输出".hex"文件,打开Proteus软件,将之前编译好的".hex"文件加入到芯片中,开始运行仿真。
(五)实验项目的实际验证电路及验证结果 将单片机C51程序编译无误后,生成HEX文件,通过STC-ISP下载到单片机中,下载的软件界面如图4所示,搭建的实际电路如图5所示。 
图4下载HEX文件到单片机
图5面包板搭建的实际电路
以下为实际效果的截图:
总结: 感觉中断程序比前两个程序流水灯以及数码管显示要难一些,写程序过程中遇到当按下按键,led亮7个,有一个没亮,检查发现是写错了。改正后又有一些其他问题,在经过反复改正后,终于完成了。
单片机源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define LED P0
- sbit key=P3^2;
- uint i;
- void delay_1ms(uint t)
- {
- uint i;
- while(t--)
- for(i=0;i<120;i++);
- }
- main()
- {
- EA=1;
- EX0=1;
- IT0=1;
- while(1)
- {
- LED=0xfa;
- for(i=0;i<5;i++)
- {
- delay_1ms(1000);
- LED=(LED<<1)|0x01;
- }
- for(i=0;i<5;i++)
- {
- delay_1ms(1000);
- LED=(LED>>1)|0x80;
- }
- }
- }
- void EX_INT0() interrupt 0
- { P1=0X00;
- delay_1ms(1000);
- P1=0XFF;
- }
复制代码
完整的Word格式文档51黑下载地址:
外部中断说明书.doc
(1.21 MB, 下载次数: 15)
|