P1口输出可调方波;key1上调频率;
key2下调频率;
注:若编译时出现没有T2MOD,可在头文件reg52.h中加上sfr T2MOD = 0xC9; (此方法通过百度知道搜索)
头文件夹目录为keil->C51->INC
此程序用的时52中的T2定时/计数器51中没有。
//这是书上的程序,做出来供参考一下 mcs-51单片机还是很强大的嘛 --来自初学者的感叹!
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
35hz:
35hz
83hz
50hz
单片机源程序如下:
- #include <reg52.h>
- #include "delay.h"
- #define unit unsigned int
- #define uchar unsigned char
- uchar fre;//定义频率变量
- uchar LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x39,0x5e,0x79,0x71};//0-e 共阴数码管
- sbit pulse=P1^0;//脉冲输出端
- sbit key1=P1^1;//按下 频率增大1
- sbit key2=P1^2;//频率减小1
- void main()
- {
- fre=50;//设频率初值50hz
- pulse=1;
- T2MOD=0X02;
- T2CON=0X00;
- TH2=(65536-(12000000/(24*fre)))/256;
- TL2=(65536-(12000000/(24*fre)))%256;
- RCAP2H=(65536-(12000000/(24*fre)))/256;
- RCAP2L=(65536-(12000000/(24*fre)))%256;
- EA=1;
- ET2=1;
- TR2=1;
- while(1)
- {
- if(key1==0)
- {
- delay(5);//去除抖动
- if(key1==0)
- {
- fre++;//频率+1
- if(fre==100)fre=99;//极限频率99hz
- RCAP2H=(65536-(12000000/(24*fre)))/256;
- RCAP2L=(65536-(12000000/(24*fre)))%256;
- while(!key1);
- do{delay(5);}
- while(!key1);//去除抖动
- }
- }
- if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
- fre--;//频率-1
- if(fre==7)fre=8;//极限8hz
- RCAP2H=(65536-(12000000/(24*fre)))/256;
- RCAP2L=(65536-(12000000/(24*fre)))%256;
- while(!key2);
- do{delay(5);}
- while(!key2);//去除抖动
- }
-
- }
- }
- }
- void counter2()interrupt 5
- {
- TF2=0;
- pulse=!pulse;
- }
复制代码
所有资料51hei提供下载:
52单片机的t2功能(可调频率方波).zip
(46.95 KB, 下载次数: 36)
|