由于上课的PPT不好上传,详细笔记请看我的Notion:
https://www.notion.so/7259b6dac1ff4e878fd1cb12ea360b92
#include "reg51.h"
#include<intrins.h> //可以使用_nop_函数的头文件
#define uchar unsigned char
const tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} ; //正向流水灯
uchar flag;
void delay(int x){ //延时程序
unsigned i,j,k;
while(x--){
for(i=0;i<0x01;i++)
for(j=0;j<0xff;j++)
for(k=0;k<0xff;k++);
}
}
//延时1s:
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void int1()interrupt 0 //外部中断0的中断服务函数
{
flag=0x01;
}
void int2()interrupt 2 //外部中断1的中断服务函数
{
flag=0x02;
}
void main(){
uchar i;
EA=1;
//总中断允许
EX0=1;
//允许外部中断0中断
EX1=1;
//允许外部中断1中断
IT0=1;
//选择外部中断0为跳沿触发方式
IT1=1;
//选择外部中断1为跳沿触发方式
P2=0xff;
while(1)
{
switch(flag){
case 1:
for(i=0;i<8;i++){
if(flag==0x02) break;
P2=tab[i];
delay(1);
}
if(flag==0x02) break;
P2=0x00;
delay(1);
break;
case 2:
//功能:要让1357灯亮,2468灯灭
P2 = 0xaa;
Delay1000ms();
P2 = 0x55;
Delay1000ms();
break;
//test: success!
//拓展:所有灯全亮,过1s,全灭
/*
P2=0x00;
delay(1);
P2=0xff;
delay(1);
break;
*/
}
}
}