题目:
所有习题均采用外部中断0下降沿进入外部中断0处理按键;
采用定时器定时,全部功能在中断中完成。晶振频率为12MHz。
没有按键时不输出波形,按上面的键,从P3.0输出频率为5kHz的方波,并且数码管显示“1”;
按下面的键从P3.0输出频率为5kHz占空比为20%的矩形波,并且数码管显示“2”。
要求:采用T0方式2定时。
仿真图如图1:

仿真所需元器件如图2:

电路图连接如图3:

注:右侧方波在protues 左侧栏虚拟仪器模式和激励源模式内可选
程序代码:
/***********************************************************************
*采用外部中断0下降沿进入外部中断0处理按键 *
*采用定时器定时,全部功能在中断中完成,晶振频率为12MHz *
*没有按键时不输出波形,按上面的键,从P3.0输出频率为5KHz的方波 *
*并且数码管显示“1“;按下面的键从P3.0输出频率为5KHz占空比为20%的矩形波,*
*并且数码管显示“2”。采用T0方式2定时 *
************************************************************************/
#include<reg51.h>
#define uchar unsigned char
data uchar a,b;
sbit P3_0 = P3^0;
uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main(){
TMOD=0x02; //定时器T0方式1定时
TL0= 256-100;
TH0=256-100; //输出频率为5khz设置的初值
ET0=1; //允许T0中断
EX0=1; //允许外部中断0
IT1; //外部0下降沿中断
EA=1; //总中断
while(1);
}
void int0_isr(void) interrupt 0{ //外部中断0按键检测
b=P1;
b=~b;
if(b==1){ //按上面的开关
a=1; //记录按键状态
}
else{
a=2;
}
TR0=1; //开定时器0
P2=table[b]; //数码管显示
}
void T0_int(void) interrupt 1{
if(a==1)
P3_0=~P3_0; //正常的
if(a==2){
//占空比为20%不会写了
}
}
单片机方波占空比不太会所以没有写
总体程序就是用外部中断检验按键状态然后用定时器来控制方波输出的频率和占空比
网友评论