本帖最后由 suqianfu 于 2020-4-11 22:29 编辑

大佬,我添加了一点注释,不知道理解得对不对

#include                                                 //调用头文件

#define uchar unsigned char                                //

#define uint unsigned int

float fosc=12000000;                                        //声明单片机运行频率表12Mhz

sbit KEY1=P1^0;                                                        //声明按键1占用脚

sbit KEY2=P1^1;                                                        //声明按键2占用脚

sbit KEY3=P1^2;                                                        //声明按键3占用脚

sbit KEY4=P1^3;                                                        //声明按键4占用脚

sbit OUTPUT=P2^0;                                                //声明输出占用脚

uchar zkb;                                                                //声明占空比变量

uint freq;                                                                //声明频率变量

uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H;//声明时间变量

void delay(uchar n)                                                //延时函数

{

uchar i;                                                            //局部整型变量

while(n--)                                                            //循环(执行次数)

{for(i=255;i>0;i--)                                                //赋值I为255,I大于0,I--自减1.直至循环执行次数清零(无中生友系列)

{}

}}

void chushihua(void)                //名为(初始化)之子函数

{

P1=0x0f;                                //赋值P1口数据

freq=500;                                //赋值频率=500

zkb=50;                                         //赋值占空比为50%

TIMER0_L=0xe0;                         //定时变量,定时器0初始时间高8位赋值,具体定时时间自己查资料

TIMER0_H=0xb1;                        //定时变量,定时器0初始时间低8位赋值,具体定时时间自己查资料

TIMER1_L=0xf0;                        //定时变量,定时器1初始时间高8位赋值,具体定时时间自己查资料

TIMER1_H=0xd8;                        //定时变量,定时器1初始时间低8位赋值,具体定时时间自己查资料

TL0=0xe0;                                //定时器0初始时间高8位赋值,具体定时时间自己查资料

TH0=0xb1;                                //定时器0初始时间低8位赋值,具体定时时间自己查资料

TL1=0xf0;                                //定时器0初始时间高8位赋值,具体定时时间自己查资料

TH1=0xd8;                                //定时器0初始时间高8位赋值,具体定时时间自己查资料

TMOD=0x11;                                //设定定时器工作模式

IT0=1;                                        //设定外部中断模式

EX0=1;                                        //启动外部中断

ET0=1;                                        //启动定时器0中断

ET1=1;                                        //启动定时器1中断

EA=1;                                        //启动全局中断使能

TR0=1;                                    //启动定时器0

TR1=1;                                    //启动定时器1

}

void main(void)                    //主程序

{

chushihua();                        //调用初始化子程序

while(1)                                //循环

{ }

}

void Timer0_freq() interrupt 1        //中断子程序--频率

{

TR1=1;                                                    //启动定时器1

TL0=TIMER0_L;                                        //定时器0高8位重新赋值定时函数,具体定时时间自己查资料

TH0=TIMER0_H;                                        //定时器0低8位重新赋值定时函数,具体定时时间自己查资料

OUTPUT=1;                                                //输出高电平

}

void Timer1_zkb() interrupt 3        //中断子程序--占空比

{

TR1=0;                                                    //关闭定时器1

TL1=TIMER1_L;                                    //定时器1高8位重新赋值定时函数,具体定时时间自己查资料

TH1=TIMER1_H;                                    //定时器1低8位重新赋值定时函数,具体定时时间自己查资料

OUTPUT=0;                                                //输出低电平

}

void keyscan() interrupt 0 using 1        //中断子程序--按键检测

{

float TF0,TZ1;                                        //声明浮点变量....这句话不是看得太懂...理解错了勿怪

EX0=0;                                                    //关闭外部中断

delay(10);                                                //延时10

if(P1!=0x0f)                                    //演示后如果检测到P1口不等于0X0F这个值,判断按键按下

{

if(KEY1==0) freq+=500;                    //如果是按键1按下,则频率变量增加500

if(KEY2==0) freq+=50;                        //如果是按键2按下,则频率变量增加50

if(freq>10000) freq=500;                //如果频率变量超过10000,则频率变量重新置为500

if(KEY3==0) zkb+=10;                        //如果是按键3按下,则占空比变量增加10

if(KEY4==0) zkb++;                                //如果是按键4按下,则占空比变量增加1

if(zkb>100) zkb=1;                                //如果占空比超过100,则占空比变量重新置为1

TF0=(65536-fosc/(12.0*freq));        //定时器溢出标记TF0赋值为65536减去时钟频率12分频        ??不是太理解

TZ1=(65536-(fosc*zkb)/(12.0*100*freq));        //TZ1这个啥玩意?跟上一行大概意思吧

TIMER0_H=(uint)TF0/256;

TIMER0_L=(uint)TF0%256;

TIMER1_H=(uint)TZ1/256;

TIMER1_L=(uint)TZ1%256;

}

P1=0x0f;                                                //重新赋值P1口初始化

EX0=1;                                                    //启动外部中断

TR0=1;                                                        //重新启动定时器0TR0

TR1=1;                                                    //重新启动定时器1TR1

}

51单片机生成C语言矩形波,基于51单片机产生占空比和频率可调的方波信号发生器(附全部代码)...相关推荐

  1. 51单片机c语言产生可调脉宽方波,基于51单片机产生占空比和频率可调的方波信号发生器(附全部代码)...

    本帖最后由 suqianfu 于 2020-4-11 22:29 编辑 大佬,我添加了一点注释,不知道理解得对不对 #include                                  ...

  2. c51单片机时钟c语言程序设计,基于51单片机的电子时钟设计..doc

    -- I -- - - I -- 设计题目: 基于 51 单片机的电子时钟设计 摘要 单片机,是集 CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器.自 20 世纪 70 年代问 ...

  3. 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]

    /***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...

  4. 单片机万年历c语言程序设计,基于AT89C51单片机的多功能

    基于AT89C51单片机的多功能电子万年历的设计(附程序)(12000字) AT89C51 SCM-BASED ELCTRONIC DESIGN CALENDAR 摘要 本文介绍了基于AT89C51单 ...

  5. 单片机万年历c语言程序设计,基于AT89C51单片机的多功能电子万年历的设计(附程序)...

    基于AT89C51单片机的多功能电子万年历的设计(附程序)(12000字) AT89C51 SCM-BASED ELCTRONIC DESIGN CALENDAR 摘要 本文介绍了基于AT89C51单 ...

  6. 51单片机生成C语言矩形波,单片机产生方波、锯齿波、三角波程序

    单片机 产生方波.锯齿波.三角波程序 #include#define uchar unsigned char #define uint unsigned int unsigned char x=0,m ...

  7. 51单片机微波炉c语言程序,基于51单片机的微波炉控制C源程序.doc

    #include #define GET_KEY P1 #define GET_LED P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned ...

  8. 51单片机频率计c语言程序,基于51单片机的频率计程序

    这个是电路原理图 *********************************************** **************入门级频率计设计****************** ** ...

  9. c51单片机音乐盒c语言,毕业论文-基于AT89C51单片机的音乐盒设计(C程序).doc

    精品论文 基于单片机的音乐盒设计 [摘要]本设计是一个基于AT89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒.该音乐盒主要由按键电路. ...

最新文章

  1. 人工智能企业云知声首度公开“医疗+AI”战略
  2. RTX5 | 配置文件RTX_Config.h(一)
  3. Linux文本界面配置yum源,修改Linux默认语言 配置yum源
  4. 构造java_Java构造方法
  5. 【C++】演讲比赛流程管理系统
  6. linux+极点五笔输入法,Linux技巧之Ubuntu11.04下安装极点五笔输入法
  7. 数据湖(十一):Iceberg表数据组织与查询
  8. Excise_day03
  9. 苹果app退款_苹果App Store应用,5月最新退款
  10. 海南省软考报名时间成绩查询海南省教育考试院海南省人事考试网报名入口
  11. Linux(一) VFS虚拟文件系统
  12. linux c语言 cmos,c语言编写程序读写CMOS内容
  13. AVX | 关于RC电路耦合、相移、滤波、微分、积分的那些事儿~
  14. react 项目添加百度统计
  15. Spring Boot集成Druid异常discard long time none received connection.
  16. office 完美插件
  17. windows 位图结构详解
  18. 2020年阿里实习生产品运营一面面经
  19. Aqwa 带你掌握船舶与海洋工程水动力理论与工程应用
  20. 小程序一键复制文本内容

热门文章

  1. 汉诺塔问题——分治思想
  2. 聪明的质检员 二分验证答案
  3. c# spire.xls 设置文字为微软雅黑_让Word、PPT看傻,原来Excel文字排版也漂亮
  4. 数电4_2——常用的组合逻辑电路(1)编码器
  5. 网站建设推广的几个绝招
  6. 12.13 Daily Scrum
  7. pb文件转json文件python脚本
  8. Echarts 实现在一个画布中画出多个上下排列柱状图
  9. HP 5200LX驱动安装历程
  10. 2017届中兴综合面试