Main函数之BUZZER

合集下载

main 方法

main 方法

main 方法首先,让我们来看一下 main 方法的基本语法。

在Java中,main 方法是程序的入口点,它的语法格式如下:```java。

public class Main {。

public static void main(String[] args) {。

// 在这里编写你的程序代码。

}。

}。

```。

在这段代码中,我们定义了一个名为 Main 的类,并在其中定义了一个名为main 的方法。

该方法被声明为 public(公共的),static(静态的)和 void(无返回值)。

它接受一个类型为 String 数组的参数 args。

在 main 方法中,我们可以编写我们的程序代码,以实现我们想要的功能。

接下来,让我们来看一下 main 方法的作用。

作为程序的入口,main 方法是程序开始执行的地方。

当我们运行一个 Java 程序时,虚拟机会自动查找并执行名为main 的方法。

因此,我们可以将 main 方法看作是程序的起点,所有的程序逻辑都将从这里开始执行。

除了作为程序的入口,main 方法还可以接受命令行参数。

在上面的语法中,我们可以看到 main 方法接受一个类型为 String 数组的参数 args。

这些参数可以在程序运行时从命令行传入,我们可以根据这些参数来定制程序的行为。

在实际应用中,我们经常会用到 main 方法来执行一些初始化操作,比如初始化变量、加载配置文件等。

此外,我们还可以在 main 方法中调用其他方法,实现程序的逻辑功能。

总之,main 方法是程序的核心,它承担着程序执行的重要任务。

在使用 main 方法时,我们需要注意一些细节。

首先,main 方法必须被声明为public 和 static,这是因为虚拟机需要通过这个方法来启动程序。

其次,main 方法的参数类型必须是 String 数组,这是因为命令行参数都以字符串的形式传入。

最后,main 方法没有返回值,它的返回类型被声明为 void。

最新STC89C52门禁程序代码

最新STC89C52门禁程序代码

最新STC89C52门禁程序代码#include<reg52.h>#include<intrins.h>#include<define.h>#include<delay.h>#include<enter_out.h>#include<lcd.h>#include<keyboard.h>#include<display.h>#include<T1.h>/***********************主程序*************************/ void main(){LED = 0;//LED亮BUZZER = 0;//蜂鸣器响EA = 1;//开所有中断INT0_init();T1_init();lcd_init();P1 = 0x0f; //键盘初始化delay(100);LED = 1; //熄灭LEDBUZZER=1; //关蜂鸣器while(1){display();delay(50);}}/********************************************************** *****函数功能:与最近一次lcd显示界面比较,以此作是否清屏处理入口参数:出口参数:*********************************************************** ****/void judge_clear_lcd(){if( N_DISPLAY != N_DISPLAY_HISTORY ){lcd_wcmd(0x01); //清屏}}/********************************************************** *****函数功能:lcd显示第0幕入口参数:出口参数:*********************************************************** ****/void display0(){uchar i;judge_clear_lcd(); //是否清屏处理lcd_pos(0x00); //设置显示位置delay1(1);for(i=0; wel[i]!='\0'; i++){lcd_wdat(wel[i]);}N_DISPLAY_HISTORY=0; //记录历史显示界面编号}/********************************************************** *****函数功能:lcd显示第1幕入口参数:出口参数:*********************************************************** ****/void display1(){uchar i;judge_clear_lcd(); //是否清屏处理lcd_pos(0x00); //设置显示位置delay1(1);for(i=0; com_in[i] !='\0'; i++) //显示"Come in please !"{lcd_wdat(com_in[i]);}lcd_pos(0x40); //设置显示位置delay1(1);for(i=0; push[i] !='\0'; i++) //显示"Push the door !"{lcd_wdat(push[i]);}N_DISPLAY_HISTORY=1; //记录历史显示界面编号。

main()主函数

main()主函数

void main()//主函数{while( ! start_button())//用START键启动机器人{printf("7:%d 8:%d 9:%d\n",digital(7),digital(8),digital(9));//在LCD上显示7、8、9号传感器的数值}motor(0,60);//机器人以60%的功率前进0.5秒冲出起跑区motor(1,60);sleep(0.5);while(1)//永远循环{if( digital(9)==1&&digital(8)==0&&digital(7)==1)//如果7号和9号传感器为白,8号为黑,则机器人前进{motor(0,60);motor(1,60);}else if( digital(7)==0&&digital(9)==1)//如果7号为黑,9号为白,机器人右转 {while( digital(8)==1)//8号为白{motor(0,65);motor(1,-65);}}else if(digital(9)==0&&digital(7)==1)//如果9号为黑,7号为白,机器人左转 {while(digital(8)==1)//8号为白{motor(0,-65);motor(1,65);}}else if (digital(8)==1&&digital(9)==1&&digital(7)==1)//如果7\8\9号传感器都为白{ao();sleep(0.03);//停止电机0.03秒beep();//发出一声响声while(digital(7)==1)//如果7号传感器为白,则机器人右转{motor(0,65);motor(1,-65);}}else if(digital(7)==0&&digital(8)==0&&digital(9)==0)//如果7\8\9号传感器都为黑{motor(0,45);//机器人以45%的功率前进0.05秒motor(1,45);sleep(0.05);if ( digital(8)==0&&digital(9)==1&&digital(7)==1)//8号传感器为黑,7号和9号为白{motor(0,60);//机器人前进motor(1,60);}else if(digital(8)==0&&digital(7)==0&&digital(9)==0)//7\8\9号传感器还都为黑执行停机动作{motor(0,-60);motor(1,60);sleep(0.12);motor(0,60);motor(1,60);sleep(0.2);stop();sleep(1000.0);}}}}程序编写:潘小庆 QQ:25581800。

单片机的buz蜂鸣器的工作原理

单片机的buz蜂鸣器的工作原理

单片机的buz蜂鸣器的工作原理下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!单片机的Buzzer蜂鸣器的工作原理在单片机(Microcontroller)应用中,蜂鸣器(Buzzer)作为一种常见的输出设备,被广泛用于发出声音提示或警报。

c语言main函数

c语言main函数

c语言main函数C语言是一门广泛使用的编程语言,它的主要特点是简单易学、功能强大、易于移植等等。

而在C语言中,main函数则是最为重要的部分之一。

本文将详细介绍C语言中的main函数,包括其定义、作用、参数、返回值等等。

一、main函数的定义在C语言中,main函数是程序的入口点,也就是程序执行的第一个函数。

它的定义方式如下:```int main(int argc, char *argv[]){// 函数体return 0;}```其中,int表示函数返回值的类型,main表示函数名,括号中的两个参数分别是整型变量argc和字符型指针变量argv[]。

大括号内是函数的具体实现。

二、main函数的作用main函数是程序的起点,它的作用是为程序提供一个执行的入口。

当程序运行时,操作系统会调用main函数,并执行其中的代码。

因此,main函数的作用是初始化程序,分配内存空间,读取输入数据,处理逻辑等等。

三、main函数的参数在main函数中,argc和argv[]是两个重要的参数。

它们分别表示命令行参数的个数和具体的参数列表。

argc是一个整型变量,用于记录命令行参数的个数。

例如,如果在命令行中输入了“./program arg1 arg2 arg3”,那么argc的值就为4,因为除了程序名之外,还有三个参数。

argv[]是一个字符型指针数组,用于存储具体的命令行参数。

例如,如果在命令行中输入了“./program arg1 arg2 arg3”,那么argv[0]的值就是程序名“./program”,argv[1]的值是“arg1”,argv[2]的值是“arg2”,argv[3]的值是“arg3”。

四、main函数的返回值在C语言中,main函数的返回值是一个整型值。

它表示程序的执行结果,通常有以下两种情况:1. 返回0:表示程序执行成功,没有错误发生。

2. 返回非0值:表示程序执行失败,发生了某些错误。

px4固件模式相关

px4固件模式相关

(2)产生位置/速度设定值(期望值)-----_pos_sp<3>向量和_vel_sp<3>向量
(3)产生可利用的速度设定值(期望值)-----_vel_sp<3>向量
(4)产生可利用的推力定值(期望值)-----thrust_sp<3>向量
(5)根据推力向量计算姿态设定值(期望姿态)-----q_sp四元数矩阵和R_sp旋转矩阵
Command和subsystem_info是一个缓存值。
这个commander应用有几个循序组成,并且每个循环作为一个独立的线程执行。
1. command_handling_loop:在这个循环里,主要完成将mavlink应用中的mavlink命令转发给commander应用中。飞行器的状态是根据这个命令
就知道飞机应该处于什么状态,从而实现了飞机的状态切换。
而commander订阅vehicle_command消息来处理响应状态切换,比如遥控器发射的飞行状态指令切换,和地面站通过mavlink协议发来的飞行状态指令切换。
遥控器和MavLink(地面站)发布vehicle_command消息。
来提供经纬度和高度,这时候就需要飞机的GPS信号和气压计信号非常良好,如果飞机的GPS信号和气压计信号不好,飞机就不能执行定点飞行,
当然用光流也可以实现飞机的定点飞行。如果检查不通过,飞机会给地面站发送拒绝执行模式切换的消息,并且保持当前状态不做改变。
同样切换到自动飞行,定高飞行,离线模式,都需要做检查。
同样Commander发布了vehicle_control_mode这个消息,从字面理解这个消息就是”载具控制模式”。
而一些姿态、位置控制模块订阅了这个消息,即commander发布的vehicle_control_mode消息会影响飞行器的姿态控制和位置控制。

按键计数蜂鸣器实验报告(3篇)

按键计数蜂鸣器实验报告(3篇)

第1篇一、实验目的1. 了解按键电路的工作原理。

2. 掌握蜂鸣器的工作原理及其控制方法。

3. 学习使用C语言进行嵌入式编程。

4. 培养动手实践能力和团队合作精神。

二、实验原理1. 按键电路:按键电路由按键、上拉电阻和下拉电阻组成。

当按键未被按下时,上拉电阻将输入端拉高;当按键被按下时,下拉电阻将输入端拉低。

2. 蜂鸣器电路:蜂鸣器是一种发声元件,其工作原理是利用电磁铁的磁力使振动膜片振动,从而产生声音。

蜂鸣器的控制主要通过改变输入信号的频率来实现。

3. 计数原理:通过按键输入信号,实现计数器的计数功能。

当按键被按下时,计数器加一;当按键被连续按下时,计数器的计数值随之增加。

三、实验器材1. 单片机开发板(如STC89C52)2. 按键3. 蜂鸣器4. 电阻5. 接线6. 电脑7. 调试软件(如Keil uVision)四、实验步骤1. 设计电路图:根据实验要求,设计按键、蜂鸣器和单片机的连接电路图。

2. 编写程序:使用C语言编写程序,实现按键计数和蜂鸣器控制功能。

3. 编译程序:将编写好的程序编译成机器码。

4. 烧录程序:将编译好的机器码烧录到单片机中。

5. 调试程序:通过调试软件对程序进行调试,确保程序正常运行。

6. 测试实验:将单片机连接到实验电路中,进行按键计数和蜂鸣器控制测试。

五、实验代码```cinclude <reg52.h>define uchar unsigned chardefine uint unsigned intsbit key = P3^2; // 按键连接到P3.2端口sbit buzzer = P1^0; // 蜂鸣器连接到P1.0端口uchar count = 0; // 计数器void delay(uint t) {uint i, j;for (i = 0; i < t; i++)for (j = 0; j < 127; j++);}void buzzer_on() {buzzer = 0; // 使蜂鸣器发声}void buzzer_off() {buzzer = 1; // 使蜂鸣器停止发声}void main() {while (1) {if (key == 0) { // 检测按键是否被按下delay(10); // 消抖if (key == 0) {count++; // 计数器加一buzzer_on(); // 使蜂鸣器发声delay(500); // 发声时间buzzer_off(); // 停止发声}}}}```六、实验结果与分析1. 当按键未被按下时,蜂鸣器不发声。

篮球计分器 单片机 程序

篮球计分器  单片机  程序
if(fen==0&&miao==0){TR0=0;fm=0;} //比赛结束,关中断,响蜂鸣器
TH0=(65536-50000)/256; //初值重装
TL0=(65536-50000)%256;
count1++; // 计数加一,实现时间的计算
delayms(5) ;
}
void displayfen1(fen1) //显示时间分的个位
{ P2=0xfb ;
P0=table[fen1] ;
delayms(5) ;
}
void displaymiao10(miao10) // 显示时间秒 的十位
miao++;
if(miao==60) //计时一分时,分加一,秒重新开始
{ miao=0;
fen++;
displayfen(fen); //显示分的更新
sbit fm=P1^7 ; //蜂鸣器控制口
//定义全局变量
uchar count1,count2,miao10,miao1,fen10,fen1,adui10;
uchar adui1,bdui10,bdui1,fen,adui,bdui,x,a,b;
count2++; //count2加一,实现计时一秒 (20个中断 为时间一秒)
if(count2==20)
{
count2=0; //到一秒时,count2重新开始,时间秒加一
char miao;
char code table[]={
0x40,0x5B,0x22,0x0a, //数码管编码表
0x19,0x0c,0x04,0x5a,

main函数的标准定义

main函数的标准定义

main函数的标准定义学过C 语言的人都知道,main 函数是程序启动的入口函数,每一个C 语言程序里有一个main 函数,在程序里它是唯独一个不能被其他函数调用的特殊函数。

在众多的单片机C 语言编译器里对main 函数的写法都没有明确的要求,写法非常自由,可以写成带形参的函数,也可以写成无形参的函数,还可以写成返回值为任意数据类型的函数。

通用的写法都是:void main () {}。

而根据C99 标准的要求,main 函数是一个有返回值的函数,而且返回值类型必须为int。

下面这段英文描述是从C99 标准的PDF 文档上复制下来的:5.1.2.2.1 Program startupThe called at program startup is named main.The implementation declares no prototype for this .It shall be defined with a return type of int and with no parameters:int main(void) { /* ... */ }or with twoparameters (referred to here as argc and argv,though anynames may be used, as theyare local to the in which theyare declared):int main(int argc, char *argv[]) { /* ... */ }or equivalent;9)or in some other implementation-defined manner.从C99 标准的规定里可以看出,main 函数的标准定义一般为这两种形式:第一种形式:int main (void){return 0;}。

有源与无源蜂鸣器的区分

有源与无源蜂鸣器的区分

有源与无源蜂鸣器一)蜂鸣器的介绍1.蜂鸣器的作用蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

2.蜂鸣器的分类蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

3.蜂鸣器的电路图形符号蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。

(二)蜂鸣器的结构原理1.压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。

有的压电式蜂鸣器外壳上还装有发光二极管。

多谐振荡器由晶体管或集成电路构成。

当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。

压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。

在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。

2.电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。

接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。

振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

蜂鸣器的制作(1)制备电磁铁M:在长约6厘米的铁螺栓上绕100圈导线,线端留下5厘米作引线,用透明胶布把线圈粘好,以免线圈松开,再用胶布把它粘在一个盒子上,电磁铁就做好了.(2)制备弹片P:从铁罐头盒上剪下一条宽约2厘米的长铁片,弯成直角,把电磁铁的一条引线接在弹片上,再用胶布把弹片紧贴在木板上.(3)用曲别针做触头Q,用书把曲别针垫高,用胶布粘牢,引出一条导线,如图连接好电路.(4)调节M与P之间的距离(通过移动盒子),使电磁铁能吸引弹片,调节触点与弹片之间的距离,使它们能恰好接触,通电后就可以听到蜂鸣声.有源蜂鸣器和无源蜂鸣器教你区分有源蜂鸣器和无源蜂鸣器现在市场上出售的一种小型蜂鸣器因其体积小(直径只有llmm)、重量轻、价格低、结构牢靠,而广泛地应用在各种需要发声的电器设备、电子制作和单片机等电路中。

单片机蜂鸣器音乐

单片机蜂鸣器音乐

单片机蜂鸣器音乐单片机在我们的生活中无处不在,它被广泛地应用在各种电子产品中,为我们的生活带来了便利。

今天,我要向大家介绍的是一种基于单片机的蜂鸣器音乐播放器。

一、硬件部分1、单片机:我们选用的是AT89C51单片机,它具有低功耗、高性能的特点,非常适合用于音乐播放器。

2、蜂鸣器:蜂鸣器是用来发出声音的,我们将其连接在单片机的输出口上。

3、存储芯片:为了能够播放存储在芯片中的音乐,我们需要将音乐以某种格式存储在芯片中。

常用的存储芯片有EEPROM和Flash芯片。

4、按键:为了能够选择播放不同的音乐,我们需要添加一个按键。

二、软件部分1、音乐编码:我们需要将音乐转换成二进制编码,这样才能被单片机读取并播放。

常用的音乐编码格式有MIDI、WAV等。

2、音乐播放:当按下按键时,单片机读取存储芯片中的音乐数据,并通过蜂鸣器播放。

3、音乐选择:通过按键可以选择不同的音乐进行播放。

4、音量控制:我们可以通过编程来控制蜂鸣器的音量大小。

三、调试与测试1、硬件调试:检查连接是否正确,确保没有短路或断路的情况。

2、软件调试:将程序下载到单片机中进行调试,确保能够正常播放音乐。

3、综合测试:将所有硬件和软件都连接起来进行测试,确保能够正常工作。

四、总结与展望通过本次实验,我们成功地制作了一个基于单片机的蜂鸣器音乐播放器。

它具有简单、实用的特点,可以用来播放存储在芯片中的音乐。

未来,我们可以进一步扩展其功能,例如添加更多的按键来选择不同的音乐、添加显示屏来显示歌曲名称等。

我们也可以将其应用到其他领域,例如智能家居、智能安防等。

单片机蜂鸣器唱歌程序在许多应用中,单片机蜂鸣器经常被用来发出声音或音乐。

下面是一个使用单片机蜂鸣器唱歌的程序示例。

我们需要确定单片机和蜂鸣器的连接方式。

通常,单片机具有一个内置的蜂鸣器输出引脚,可以将蜂鸣器连接到这个引脚上。

在以下的示例中,我们将假设单片机具有一个内置蜂鸣器输出引脚,并将其连接到P1.0端口上。

STM32F103通用定时器PWM应用例程--蜂鸣器演奏乐曲

STM32F103通用定时器PWM应用例程--蜂鸣器演奏乐曲

STM32F103通用定时器PWM应用例程:蜂鸣器演奏乐曲一.说明:本例程是将流明LM3SLib_Timer.pdf文档中的例程9及例程10(PWM应用:蜂鸣器演奏乐曲),移植到STM32F103上。

二.流明LM3SLib_Timer.pdf例程9及例程10的拷贝:例程9.Timer PWM应用:蜂鸣器发声如图1.1所示,为EasyARM1138开发板上的蜂鸣器驱动电路。

蜂鸣器类型是交流蜂鸣器,也称无源蜂鸣器,需要输入一列方波才能鸣响,发声频率等于驱动方波的频率。

图1.1 蜂鸣器驱动电路程序清单1.9是Timer模块16位PWM模式的一个应用,可以驱动交流蜂鸣器发声,运行后蜂鸣器以不同的频率叫两声。

其中"buzzer.h"和"buzzer.c"是蜂鸣器的驱动程序,仅有3个驱动函数,用起来很简捷。

程序清单1.9 Timer PWM应用:蜂鸣器发声文件:main.c#include "systemInit.h"#include "buzzer.h"// 主函数(程序入口)int main(void){jtagWait(); // 防止JTAG失效,重要!clockInit(); // 时钟初始化:晶振,6MHzbuzzerInit(); // 蜂鸣器初始化buzzerSound(1500); // 蜂鸣器发出1500Hz声音SysCtlDelay(400* (TheSysClock / 3000)); // 延时约400msbuzzerSound(2000); // 蜂鸣器发出2000Hz声音SysCtlDelay(800* (TheSysClock / 3000)); // 延时约800msbuzzerQuiet( ); // 蜂鸣器静音for (;;){}}文件:buzzer.h#ifndef __BUZZER_H__#define __BUZZER_H__// 蜂鸣器初始化extern void buzzerInit(void);// 蜂鸣器发出指定频率的声音extern void buzzerSound(unsigned short usFreq);// 蜂鸣器停止发声extern void buzzerQuiet(void);#endif // __BUZZER_H__文件:buzzer.c#include "buzzer.h"#include <hw_types.h>#include <hw_memmap.h>#include <sysctl.h>#include <gpio.h>#include <timer.h>#define PART_LM3S1138#include <pin_map.h>#define SysCtlPeriEnable SysCtlPeripheralEnable#define GPIOPinTypeOut GPIOPinTypeGPIOOutput// 声明全局的系统时钟变量extern unsigned long TheSysClock;// 蜂鸣器初始化void buzzerInit(void){SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1); // 使能TIMER1模块SysCtlPeriEnable(CCP3_PERIPH); // 使能CCP3所在的GPIO端口GPIOPinTypeTimer(CCP3_PORT, CCP3_PIN); // 设置相关管脚为Timer功能TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR | // 配置TimerB为16位PWM TIMER_CFG_B_PWM);}// 蜂鸣器发出指定频率的声音// usFreq是发声频率,取值(系统时钟/65536)+1 ~20000,单位:Hzvoid buzzerSound(unsigned short usFreq){unsigned long ulVal;if ((usFreq <= TheSysClock / 65536UL) || (usFreq > 20000)){buzzerQuiet( );}else{GPIOPinTypeTimer(CCP3_PORT, CCP3_PIN); // 设置相关管脚为Timer功能ulVal = TheSysClock / usFreq;TimerLoadSet(TIMER1_BASE, TIMER_B, ulVal); // 设置TimerB初值TimerMatchSet(TIMER1_BASE, TIMER_B, ulVal / 2); // 设置TimerB匹配值TimerEnable(TIMER1_BASE, TIMER_B); // 使能TimerB计数}}// 蜂鸣器停止发声void buzzerQuiet(void){TimerDisable(TIMER1_BASE, TIMER_B); // 禁止TimerB计数GPIOPinTypeOut(CCP3_PORT, CCP3_PIN); // 配置CCP3管脚为GPIO输出GPIOPinWrite(CCP3_PORT, CCP3_PIN, 0x00); // 使CCP3管脚输出低电平}例程10.Timer PWM应用:蜂鸣器演奏乐曲程序清单1.10是Timer模块16位PWM模式的一个应用,能驱动交流蜂鸣器演奏一首动听的乐曲《化蝶》(乐谱参见图1.2)。

C51单片机实例温控程序(各模块详解附图

C51单片机实例温控程序(各模块详解附图

*
*
实际温度超过你设定的温度,蜂鸣器报警。
*
*
*
*
包括各个模块及详细的注释
*
*
方便 C51 单片机入门级别者阅读
*
*--------------------------------------------------------------------------------------*/
#include<stc12c5a.h> typedef unsigned char uchar ; typedef unsigned int uint; sbit heat= P1^3; uchar makesure; uchar tp=0; uchar num=0; uchar ad=0; uchar s60,s61,s62,s63,temp;
/*--------------------------------------------------------------------------------------------------------------------------------------------
*
*
*
该程序为一个完整的温度控制器程序
0x3e,0x3d,0x3d,0x3c,0x3b,0x3b,0x3a,0x39,0x38,0x38,0x37,0x36,0x36,0x36,0x35,0x35,
0x34,0x33,0x33,0x32,0x32,0x31,0x31,0x30,0x30,0x2f,0x2f,0x2e,0x2e,0x2d,0x2d,0x2c,
0x10,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0a,0x0a,0x09,

python main函数用法

python main函数用法

python main函数用法Python是一种高级编程语言,具有简单易学、可读性强、功能丰富等特点。

在Python中,main函数是一个非常重要的函数,它是程序的入口点。

在本文中,我们将详细介绍Python main函数的用法。

一、什么是main函数在Python中,main函数是一个特殊的函数,它是程序的入口点。

当我们运行一个Python程序时,操作系统会首先调用main函数,并从该函数开始执行程序。

二、如何定义main函数定义main函数非常简单,在Python中只需要使用如下代码:```pythondef main():# 在这里编写你的代码```以上代码定义了一个名为main的函数,并且该函数为空。

我们可以在这个空白处添加我们自己的代码。

三、如何调用main函数在Python中,如果我们想要调用一个名为main的函数,可以使用以下方式:```pythonif __name__ == '__main__':main()```以上代码首先判断当前模块是否为主模块(即被直接运行而不是被导入),如果是主模块,则调用名为main的函数。

四、示例:输出Hello World下面我们来看一个简单的示例,在控制台输出Hello World。

```pythondef main():print('Hello World')if __name__ == '__main__':main()```以上代码定义了一个名为main的函数,并且在其中使用print语句输出了一条消息。

在主程序中,我们使用if语句判断当前模块是否为主模块,如果是,则调用名为main的函数。

五、示例:读取文件并输出内容下面我们来看一个稍微复杂一些的示例,在控制台输出一个文本文件中的内容。

```pythondef main():with open('test.txt', 'r') as f:content = f.read()print(content)if __name__ == '__main__':main()```以上代码定义了一个名为main的函数,并且在其中使用with语句打开一个名为test.txt的文本文件,并读取其中的内容。

关于main函数的定义

关于main函数的定义

关于main函数的定义很多⼈甚⾄市⾯上的⼀些书籍,都使⽤了void main( ),其实这是错误的。

C/C++中从来没有定义过void main( )。

C++之⽗Bjarne Stroustrup在他的主页上的FAQ中明确地写着The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.( void main( )从来就不存在于C++或者C)。

下⾯我分别说⼀下C和C++标准中对main函数的定义。

⼀、 C语⾔中的main() 在C89中,main( )是可以接受的。

Brian W. Kernighan和Dennis M. Ritchie的经典巨著The C programming Language 2e(《C 程序设计语⾔第⼆版》)⽤的就是main( )。

不过在最新的C99标准中,只有以下两种定义⽅式是正确的: int main(void) int main(int argc, char *argv[]) (参考资料:ISO/IEC 9899:1999 (E) Programming languages ? C 5.1.2.2.1 Program startup) 当然,我们也可以做⼀点⼩⼩的改动。

例如:char *argv[]可以写成char **argv;argv和argc可以改成别的变量名(如intval和charval),不过⼀定要符合变量的命名规则。

如果不需要从命令⾏中获取参数,请⽤int main(void);否则请⽤int main(int argc, char *argv[])。

main函数的返回值类型必须是int,这样返回值才能传递给程序的调⽤者(如操作系统)。

如果main函数的最后没有写return语句的话,C99规定编译器要⾃动在⽣成的⽬标⽂件中(如exe⽂件)加⼊return 0;,表⽰程序正常退出。

c语言main中函数调用方法

c语言main中函数调用方法

c语言main中函数调用方法C语言是一种广泛应用的编程语言,其函数调用方法是程序中非常重要的一部分。

在C语言的主函数main中,我们可以通过不同的方式来调用其他函数,实现各种功能。

本文将详细介绍C语言主函数中的函数调用方法。

在C语言中,函数的调用是通过函数名和参数列表来完成的。

在主函数main中,我们可以使用以下几种方式来调用其他函数:1. 无返回值无参数的函数调用:在主函数中可直接调用无返回值无参数的函数。

例如,我们定义了一个名为printHello的函数,它没有返回值也没有参数,我们可以在主函数中通过printHello()来调用它。

2. 有返回值无参数的函数调用:在主函数中可以调用有返回值但没有参数的函数。

例如,我们定义了一个名为getSum的函数,它返回两个数的和,但不需要任何参数。

我们可以在主函数中通过sum = getSum()来调用它,并将返回值赋给sum变量。

3. 无返回值有参数的函数调用:在主函数中可以调用无返回值但有参数的函数。

例如,我们定义了一个名为printNum的函数,它没有返回值但需要一个整数参数。

我们可以在主函数中通过printNum(10)来调用它,将数字10作为参数传递给函数。

4. 有返回值有参数的函数调用:在主函数中可以调用既有返回值又有参数的函数。

例如,我们定义了一个名为getMax的函数,它返回两个数中的较大值,需要两个整数参数。

我们可以在主函数中通过max = getMax(a, b)来调用它,并将a和b作为参数传递给函数。

除了上述基本的函数调用方式外,C语言还提供了其他一些特殊的函数调用方法,例如递归调用和函数指针调用。

递归调用是指函数在其内部调用自身的过程。

在主函数中,我们可以通过递归调用来解决一些需要重复执行的问题。

例如,我们可以编写一个递归函数来计算一个数的阶乘。

在主函数中,我们可以通过调用这个递归函数来计算任意数的阶乘。

函数指针调用是指通过函数指针来调用函数的过程。

STM32F103通用定时器PWM应用例程--蜂鸣器演奏乐曲解析

STM32F103通用定时器PWM应用例程--蜂鸣器演奏乐曲解析

STM32F103通用定时器PWM应用例程:蜂鸣器演奏乐曲一.说明:本例程是将流明LM3SLib_Timer.pdf文档中的例程9及例程10(PWM应用:蜂鸣器演奏乐曲),移植到STM32F103上。

二.流明LM3SLib_Timer.pdf例程9及例程10的拷贝:例程9.Timer PWM应用:蜂鸣器发声如图1.1所示,为EasyARM1138开发板上的蜂鸣器驱动电路。

蜂鸣器类型是交流蜂鸣器,也称无源蜂鸣器,需要输入一列方波才能鸣响,发声频率等于驱动方波的频率。

图1.1 蜂鸣器驱动电路程序清单1.9是Timer模块16位PWM模式的一个应用,可以驱动交流蜂鸣器发声,运行后蜂鸣器以不同的频率叫两声。

其中"buzzer.h"和"buzzer.c"是蜂鸣器的驱动程序,仅有3个驱动函数,用起来很简捷。

程序清单1.9 Timer PWM应用:蜂鸣器发声文件:main.c#include "systemInit.h"#include "buzzer.h"// 主函数(程序入口)int main(void){jtagWait(); // 防止JTAG失效,重要!clockInit(); // 时钟初始化:晶振,6MHzbuzzerInit(); // 蜂鸣器初始化buzzerSound(1500); // 蜂鸣器发出1500Hz声音SysCtlDelay(400* (TheSysClock / 3000)); // 延时约400msbuzzerSound(2000); // 蜂鸣器发出2000Hz声音SysCtlDelay(800* (TheSysClock / 3000)); // 延时约800msbuzzerQuiet( ); // 蜂鸣器静音for (;;){}}文件:buzzer.h#ifndef __BUZZER_H__#define __BUZZER_H__// 蜂鸣器初始化extern void buzzerInit(void);// 蜂鸣器发出指定频率的声音extern void buzzerSound(unsigned short usFreq);// 蜂鸣器停止发声extern void buzzerQuiet(void);#endif // __BUZZER_H__文件:buzzer.c#include "buzzer.h"#include <hw_types.h>#include <hw_memmap.h>#include <sysctl.h>#include <gpio.h>#include <timer.h>#define PART_LM3S1138#include <pin_map.h>#define SysCtlPeriEnable SysCtlPeripheralEnable#define GPIOPinTypeOut GPIOPinTypeGPIOOutput// 声明全局的系统时钟变量extern unsigned long TheSysClock;// 蜂鸣器初始化void buzzerInit(void){SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1); // 使能TIMER1模块SysCtlPeriEnable(CCP3_PERIPH); // 使能CCP3所在的GPIO端口GPIOPinTypeTimer(CCP3_PORT, CCP3_PIN); // 设置相关管脚为Timer功能TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR | // 配置TimerB为16位PWM TIMER_CFG_B_PWM);}// 蜂鸣器发出指定频率的声音// usFreq是发声频率,取值(系统时钟/65536)+1 ~20000,单位:Hzvoid buzzerSound(unsigned short usFreq){unsigned long ulVal;if ((usFreq <= TheSysClock / 65536UL) || (usFreq > 20000)){buzzerQuiet( );}else{GPIOPinTypeTimer(CCP3_PORT, CCP3_PIN); // 设置相关管脚为Timer功能ulVal = TheSysClock / usFreq;TimerLoadSet(TIMER1_BASE, TIMER_B, ulVal); // 设置TimerB初值TimerMatchSet(TIMER1_BASE, TIMER_B, ulVal / 2); // 设置TimerB匹配值TimerEnable(TIMER1_BASE, TIMER_B); // 使能TimerB计数}}// 蜂鸣器停止发声void buzzerQuiet(void){TimerDisable(TIMER1_BASE, TIMER_B); // 禁止TimerB计数GPIOPinTypeOut(CCP3_PORT, CCP3_PIN); // 配置CCP3管脚为GPIO输出GPIOPinWrite(CCP3_PORT, CCP3_PIN, 0x00); // 使CCP3管脚输出低电平}例程10.Timer PWM应用:蜂鸣器演奏乐曲程序清单1.10是Timer模块16位PWM模式的一个应用,能驱动交流蜂鸣器演奏一首动听的乐曲《化蝶》(乐谱参见图1.2)。

使用按键自动控制LED闪烁及蜂鸣器鸣叫—LED闪烁与蜂鸣器鸣叫程序编写

使用按键自动控制LED闪烁及蜂鸣器鸣叫—LED闪烁与蜂鸣器鸣叫程序编写
2、完成本次任务要用到所复习的哪些知识点?
本次任务与前面所使用的按键控制LED灯亮灭有什么区别?
2 工作任务
(1)第一次按下按钮,LED灯持续闪亮,蜂鸣器鸣叫 (2)第二次按下按钮,LED灯熄灭,蜂鸣器停止鸣叫; (3)以后根据按键次数一直重复步骤1和2的现象。
3 知识准备: 蜂鸣器
1、作用:蜂鸣器是一种一体化结构的电子讯响器,广泛 应用于计算机、打印机、复印机、报警器、电话机等电 子产品中作发声器件
int main()
{int num=0;
//按键次数记录(初值赋0)
while ( 1 )
{if( k==0)
{delay(1000);
//延时重新判断按键是否按下,
延时消除抖动
if( k==0)
{num++;
if(num==1) flasher ();
buzzer();
if(num==2)num=0;
#define uint unsigned int
#define uchar unsigned char
sbit k=P1^1;
//定义P1.1引脚名为独立按键k
sbit led=P1^0;
//定义P1.0引脚名led
sbit buzzer=P2^0;
//定义P2.0引脚名为buzzer
/*延时函数*/
5
编写程序
(1)任务分析
① 程序流程图
说明:因为按一次为奇 数次点亮和鸣叫,按第 二次为偶数次熄灭和停 止鸣叫,以后一直循环, 所以可以通过判断按键 次数是奇数还是偶数来 控制LED灯和蜂鸣器
② 端口分配
单片机端口
驱动模块端口
P1.0
LED1

C编译LED流水灯实验程序

C编译LED流水灯实验程序

//C编译LED流水灯实验程序/*包含头文件*/#include<reg51.h>/* 宏定义*/#define uchar unsigned char#define uint unsigned int/* 延时子程序*/void delay(uint N){while(N!=0) N--;}/*主函数开始*/void main(){uchar a,b;a=0x01; //对变量a赋初始值为1while(1) //进入循环{if(a|0x00) //判断a的值是否为0{b=0x0ff^a; //对a的值与ff异或后赋值给变量bP2=b; //输出b变量的值,点亮相应的LEDa=a<<1; //对a进行左移一位运算delay(50000); //延时,使LED走马效果让人眼可以捕捉到}else //若a的值为0,说明8个LED均依次被点亮{P2=0x0ff; //关闭所有LED等待下次循环a=0x01; //重载a变量的值delay(50000);}}}/*********************************************************C语言编写:串行通信实验,用来测试学习板上的串口是否可用;在测试的时候用线将DB9串行接口RS232中的2脚和3脚短接;用短路卡将J41短接;运行程序后,可以观察LED显示数值的变化,验证程序的正确性**********************************************************/#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar code tab[16]={0x0fe,0x0fd,0x0fb,0x0f7,0x0ef,0x0df,0x0bf,0x7F}; //LED流水灯字符表void delay(uint v) //通用延时子程序{for(;v>0;v--) ;}main(){uint i;uchar j;TMOD=0x20; //初始化T1TH1=0xCC;TL1=0xCC;TR1=1; //无限循环执行发送和接收语句SCON=0x50;P2=0xFF; //灭P1口所有LEDwhile(j!=8){for(j=0;j<8;j++) //设置显示流水灯的显示循环次数{TI=0;delay(20000);SBUF=tab[j]; //查表得到当前要发送的数据,且通过串口发送出去while(RI==0) ; //RI=0等待串口中断RI=0; //RI=1清RIP2=SBUF; //接收数据并送P1口,LED显示接收到的数据while(TI==0) ;delay(20000); //延时}j=0; //重置参数j计数值}点阵LCD显示实验/*********************************************************************** * LCD.C,液晶操作程序* RS=1--状态,=0--数据* RW=1--读取,=0--写* EN=1--芯片有效,=0--芯片无效***********************************************************************/ /***********************************************************************功能描述:液晶应用程序,人机交互接口*显示参数: outdata,要输出的数据X:表示行数(0-1) Y:表示列数(0-15).x,y均为十六进制**********************************************************************/ #include "reg52.H"#define Lcd_Data P0#define Busy 0x80 //用于检测LCM状态字中的Busy标识sbit Lcd_RS=P1^3; //定义引脚sbit Lcd_RW=P1^2;sbit Lcd_EN=P1^1;typedef unsigned char uint8;typedef unsigned int uint16;uint8 code *Str_Display[]={"C","*EZST-51*"," Study&Expold!"};//显示提示内容void Lcd_WriteData(uint8 W_Data); //LCD写数据子程序void Lcd_WriteCmd(uint8 W_Cmd,BusyC); //LCD写指令子程序unsigned char Lcd_WaitBusy(void); //LCD检测忙子程序void Lcd_Init(void); //LCD初始化子程序void Lcd_CLS(void); //LCD清屏子程序void Lcd_Display(uint8 *buff,uint8 x,uint8 y); //在指定的位置显示特定的字符串void Byte_Display(uint8 Byte,uint8 x,uint8 y); //在指定位置显示一个字节的ASCII void Byte_CHG(uint8 Byte,uint8 * Byte_H,uint8 * Byte_L);void Delay5Ms(void);void delay(uint16 N); //通用延时子程序void main(void){Lcd_Init() ; //LCM初始化while(1) //显示提示内容的方式:先在第一行中间位置显示字符“C”;//延时40000MS后、清屏在下一屏第一行显示:*EZST-5X*// 第二行显示:Study&Expold!{Lcd_CLS(); //LCD显示清屏Lcd_Display(Str_Display[0],0,8); //在LCD正中间显示字符“C "delay(60000);Lcd_CLS(); //LCD显示清屏delay(60000);Byte_Display(0x59,1,6); //在LCD第二行显示一个字节的十六进制数59Hdelay(60000);Lcd_CLS();Lcd_Display(Str_Display[1],0,0);Lcd_Display(Str_Display[2],1,0);delay(60000);}}/***********************************************************************功能描述:液晶自定义字符显示子程序*入口参数: outdata--要输出的数据X--表示行数(0-1) Y--表示列数(0-15)x,y均为十六进制.**********************************************************************/void Lcd_Display(uint8 *buff,uint8 x,uint8 y){uint8 i;uint8 ramadd=0x80;if(x) ramadd+=0x40;ramadd+=y;Lcd_WriteCmd(ramadd,1);for(i=0;buff[i]!='\0';i++){ Lcd_WriteData(buff[i]);delay(10000);}}/************************************************************************ 功能描述: 将一个BYTE分离成两个字符,用来显示(如45H-->52H('4')-53H('5')).* 入口参数: BYTE,要分离的字节,BYTE_H,BYTE_L两个指针(返回用BYTE的高低四位) ***********************************************************************/void Byte_CHG(uint8 Byte,uint8 * Byte_H,uint8 * Byte_L){*Byte_L=(Byte&0x0f);if(*Byte_L>9)*Byte_L+=7;*Byte_L+=48;*Byte_H=(Byte&0xf0)>>4;if(*Byte_H>9)*Byte_H+=7;*Byte_H+=48;}/************************************************************************ 功能描述: 在指定位置显示一个字节的ASCII* 入口参数: BYTE,要显示的字节;(x,y)在LCD中的坐标***********************************************************************/void Byte_Display(uint8 Byte,uint8 x,uint8 y){uint8 Byte_H,Byte_L,End_H='H';Byte_CHG(Byte,&Byte_H,&Byte_L);Lcd_Display(&Byte_H,x,y);Lcd_Display(&Byte_L,x,y+1);Lcd_Display(&End_H,x,y+2);}//通用延时子程序void delay(uint16 N){for(;N>0;N--);}//-------------------------------------//LCD写数据子程序void Lcd_WriteData(uint8 W_Data){Lcd_WaitBusy(); //检测忙Lcd_Data = W_Data;Lcd_RS = 1;Lcd_RW = 0;Lcd_EN = 0; //若晶振速度太高可以在这后加小的延时Lcd_EN = 1;Lcd_EN = 0;}//LCD写指令子程序void Lcd_WriteCmd(uint8 W_Cmd,BusyC) //BusyC为0时忽略忙检测{if (BusyC) Lcd_WaitBusy(); //根据需要检测忙Lcd_Data = W_Cmd;Lcd_RS = 0;Lcd_RW = 0;Lcd_EN = 0;Lcd_EN = 1;Lcd_EN = 0;}//LCD检测忙子程序uint8 Lcd_WaitBusy(void){Lcd_Data = 0xFF;Lcd_RS = 0;Lcd_RW = 1;Lcd_EN = 0;Lcd_EN = 1;Lcd_EN = 1;while (Lcd_Data & Busy); //检测忙信号Lcd_EN = 0;return(Lcd_Data); //若不处于忙状态显示字符}//LCD清屏子程序void Lcd_CLS(void){Delay5Ms();Delay5Ms();Lcd_WriteCmd(0x38,1); //显示模式设置,开始要求每次检测忙信号Lcd_WriteCmd(0x08,1); //关闭显示Lcd_WriteCmd(0x01,1); //显示清屏Lcd_WriteCmd(0x06,1); // 显示光标移动设置Lcd_WriteCmd(0x0C,1); // 显示开及光标设置}//LCD初始化子程序void Lcd_Init(void) //LCM初始化{ delay(4000);Lcd_WriteCmd(0x38,0); //显示模式设置,不检测忙信号Delay5Ms();Delay5Ms();Lcd_WriteCmd(0x38,1); //显示模式设置,开始要求每次检测忙信号Lcd_WriteCmd(0x08,1); //关闭显示Lcd_WriteCmd(0x01,1); //显示清屏Lcd_WriteCmd(0x06,1); // 显示光标移动设置Lcd_WriteCmd(0x0C,1); // 显示开及光标设置}//5ms延时void Delay5Ms(void){uint8 i=5552;while(i--);}电压采集(ADC0809)实验#include "reg52.h"typedef unsigned char BYTE;typedef unsigned int WORD;sbit ADC0809_CS=P3^5;sbit ADC0809_EOC=P3^3;sbit SMG_EN1=P1^3;sbit SMG_EN2=P1^2;sbit SMG_EN3=P1^1;sbit SMG_EN4=P1^0;#define SMG_DA TA P0// 字形表, 为0亮// a_// f|_|b// e|_|c .p// d// 00001101//0 1 2 3 4 5 6 7 8 9 A B C D E Funsigned char code SMG_TABLE[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};/* Function */void Delay_10us(WORD n);void SMG_Display(BYTE S MGNum, BYTE tdata);/*********************************************************************** main()/*********************************************************************/void main(void){BYTE rdata=0,i=0;BYTE BCD_H=0,BCD_L=0;BYTE xdata * ptr;float result=0;int temp;while(1){ADC0809_CS=0;*ptr=0xff;i=200;while(ADC0809_EOC && (i>0))i--;rdata=*ptr;ADC0809_CS=1;BCD_H=(rdata>>4)&0x0f; //get the high half BYTEBCD_L=rdata&0x0f; //get the low half BYTESMG_Display(1,BCD_H);SMG_Display(2,BCD_L);/*// 显示十进制数据result=5*rdata/256.0;temp=(int)(10*result+0.5);BCD_H=temp/10;BCD_L=temp%10;SMG_Display(3,BCD_H);SMG_Display(4,BCD_L);*/}}// write the tdata to the SMGNumvoid SMG_Display(BYTE S MGNum, BYTE tdata){switch(SMGNum){case 1:SMG_EN1=0;break;case 2:SMG_EN2=0;break;case 3:SMG_EN3=0;break;case 4:SMG_EN4=0;break;default:break;}SMG_DA TA=S MG_TABLE[tdata];Delay_10us(100);SMG_EN1=1;S MG_EN2=1;SMG_EN3=1;SMG_EN4=1;}// delay_ms(WORD n), default use 12M XTAL,others should be modifed.void Delay_10us(WORD n){BYTE i=0;for(;n>0;n--)for(i=0;i<10;i++);}定时-计数器实验TIMER+LED.C.c/*C语言编译——定时计数器当定时器用实验分析:采用T1完成定时,每隔一段时间,发光二极管左移一次;*/#include <reg51.h>#define uint unsigned int#define uchar unsigned charvoid main(){uint i; //设置i为中间变量i=0x01;P2=0xff; //灭P2口所有二极管TMOD=0x10; //设置定时器1方式1EA=1;ET1=1;TR1=1;for(;;){TH1=0x00; //装载计数初值TL1=0x01;do{}while(!TF1); //查询等待TF1置位if(i<0x81) //判断变量i是否垒加八次,若已经垒加八次,则置i初始值0x01{ // 若为垒加八次,则继续循环P2=i^0xff;i<<=1;}elsei=0x01;TF1=0; //软件清TF1}}CONT+SMG.C.txt蜂鸣器发声控制实验/* 文件名:C语言编译蜂鸣器发声实验功能:学习I/O的基本操作,控制蜂鸣器的发声。

python中main函数的用法

python中main函数的用法

python中main函数的⽤法什么场景下会有main函数?当该python脚本被作为模块(module)引⼊(import)时,其中的main()函数将不会被执⾏。

main函数的作⽤?__ name__ == '__ main__'是Python的main函数⼊⼝。

并⾮说,加⼊这句才能使⽤python xxx.py来执⾏,⽽是说,这⾥可以判断,当前是否是直接被python直接调⽤执⾏。

main为什么只有⽂件当作执⾏程序的时候才会被执⾏呢?这是由于两⽅⾯原因,⼀⽅⾯,main函数是所有执⾏程序的⼊⼝;另⼀⽅⾯,python的解释器是顺序执⾏脚本的并且不会调⽤任何不属于程序本⾝的代码和函数,需要补充说明的⼀点是,如果是被作为⼀个模块或库import到程序中,则会直接成为代码的⼀部分。

参考代码:⽂件:main_function.pyimport datetimeprint('Hello World!')print('Time is ', datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S %A'))def main():print('this message is from main function')if __name__ == '__main__':main()执⾏结果:➜ main git:(master) ✗ py main_function.pyHello World!Time is 2019-07-22 09:50:50 Mondaythis message is from main function⽂件⼆:test_main.pyimport main_functionprint("Done!")执⾏结果:➜ main git:(master) ✗ py test_main.pyHello World!Time is 2019-07-22 09:52:00 MondayDone!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Main函数之BUZZER_PWM_Test分析
void BUZZER_PWM_Test( void )
{
U16 freq =800;// lci 1000 ;-----预设的蜂鸣频率
Uart_Printf( "\nBUZZER TEST ( PWM Control )\n" );
Uart_Printf( "Press +/- to increase/reduce the frequency of BUZZER !\n" ) ;
Uart_Printf( "Press 'ESC' key to Exit this program !\n\n" );
Buzzer_Freq_Set( freq ) ; -------改变蜂鸣的频率
while( 1 )
{
U8 key = Uart_Getch(); -------获取secureCRT上输入的字符
if( key == '+' )
{
if( freq < 2000 ) //lci 20000 ------上限是2000
freq += 10 ;
Buzzer_Freq_Set( freq ) ; --------当freq改变后,改变TCNTB0、TCMBP 的值
}
if( key == '-' )
{
if( freq > 11 )
freq -= 10 ;
Buzzer_Freq_Set( freq ) ;
}
Uart_Printf( "\tFreq = %d\n", freq ) ;
if( key == ESC_KEY ) ------退出测试
{
Buzzer_Stop() ; -------停止蜂鸣
return ;
}
}
}
void Buzzer_Freq_Set( U32 freq )分析:结合英文的datasheet看
void Buzzer_Freq_Set( U32 freq )
{
rGPBCON &= ~3; //看datasheet知:set GPB0 as tout0, pwm output rGPBCON |= 2; //GPB0=10,因为GPBO是多功能引脚
rTCFG0 &= ~0xff;
rTCFG0 |= 15; //prescaler = 15+1
rTCFG1 &= ~0xf;
rTCFG1 |= 2; //mux = 1/8
rTCNTB0 = (PCLK>>7)/freq; -----因为freq改变了,所以TCNTB0也跟着改变了
rTCMPB0 = rTCNTB0>>1; // 50%
rTCON &= ~0x1f; ------先将TCON[0:4]清零,待赋值
rTCON |= 0xb; //相应的引脚置0或置1决定了功能:disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0。

其实,inv-off的设置,还是有点学问。

这里无论是开还是关,效果是一样的。

因为占空比为1/2。

但如果不是1/2,见datasheetP319,由图可知,当inverter-on 时,先高后低,当inverter-off时,先低后高。

当为高时,驱动蜂鸣器。

rTCON &= ~2; //clear manual update bit。

注意看datasheet上的note,就知道为什么要手动关闭
关于定时器0的设置可以参看datasheet上面的,有一段讲到,定时器设置的顺序。

P316。

1、首先,给TCMPB、TCNTB赋值。

(因为启动时,没有值,必须手动设置)
2、TCON[1]update位置1(因为置1后,才将TCMPB、TCNTB的值,送到TCNT、TCMP)。

反相器随便。

3、TCON[0]start位置1,开启定时器,并将update清0(更新TCNTB、TCMPB必须先清0)。

}。

相关文档
最新文档