最新简单实例掌握PROTEUS速成 - 图文(8)

2019-03-28 20:26

图5-28外部中断子情境原理图

5.4.2 步骤二:源程序设计与目标代码文件生成 (1)程序流程图

开始 中断子程序 声明变量 流水灯左移7, 右移7次 中断设定 no 数码管顺序显示 3次? yes 继续执行主程序 主程序 中断子程序

图5-29 外部中断流程图

(2)源程序设计 #include

#include //包含_crol_和_cror_函数所在的头文件

#define uchar unsigned char #define uint unsigned int

sbit d1=P1^0; //定义P1口的第一个引脚 char i,j,m,n,temp,k; uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x98,0x88,0x83,

0xa7,0xa1,0x06,0x8e};//共阳极数码管编码 void delay(int z); void main() { }

void my_int0() interrupt 0 //外部中断0的中断服务程序:中断后流水灯上

下循环三次

{

temp=0xfe; //给流水灯赋初值 P1=temp; // 让第一个灯点亮 for(k=0;k<3;k++)// 实现循环三次的功能 {

EA=1; //中断总允许 EX0=1; //允许外部中断0中断

IT0=0; //外部中断0的触发方式为低电平触发 while(1) { }

for(i=0;i<16;i++) //主程序一直在从事顺序显示数字的工作 { }

P0=table[i]; //将段码逐个送至P0口 delay(500); //延时500ms

for(m=0;m<7;m++)//左移7次

{

delay(200);

temp=_crol_(temp,1);//库函数里面的循环左移函数,将

temp的值左移一位后重新赋给temp

}

P1=temp; //将左移一位后的temp值送P1口显示

for(n=0;n<7;n++)//右移7次

{

delay(200);

temp=_cror_(temp,1);//库函数里面的循环右移函数,将

temp的值右移一位后重新赋给temp

}

}

}

P1=temp;//将右移一位后的temp值送P1口显示

delay(200); d1=1;

void delay(int z)//延时子函数 { }

5.4.3 步骤三:PROTEUS仿真

加载目标代码文件,双击编辑窗口的AT89C51器件,在弹出属性编辑对话框Program File一栏中单击打开按钮

,出现文件浏览对话框,找到

,启动

int x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--);

zhongduan.hex文件,单击“打开”按钮,完成添加文件。单击按钮仿真,仿真运行片段如图5-30、5-31、5-32所示。

图5-30中是主程序的运行片段,主程序中数码管从0至F顺序显示

图5-31中,按下按钮后,在单片机P3.2引脚上有低电平,立即产生中断,数码管从0至F顺序显示的工作停下来,流水灯上下循环移动三次。

图5-32中,完成中断服务程序后,返回主程序原断点处继续执行,数码管接着原来的数字继续顺序显示。

图5-30主程序中数码管从0至F顺序显示

图5-31按下按钮后数码管停下来,流水灯上下循环移动三次

图5-32完成中断服务程序后,返回主程序原断点处继续执行,数码管接着

原来的数字继续顺序显示。

5.5 扩展练习

主程序中数码管从0至9顺序显示数字,中断发生后(在单片机P3.2引脚上有低电平),数码管从9至0反序显示。


最新简单实例掌握PROTEUS速成 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:煤炭地质勘查实习报告 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: