PIC16F877A-C语言-音乐

合集下载

C语言音乐谱曲技巧

C语言音乐谱曲技巧
所示 的形式 :
2 2
分别唱作 d、r、mi a o、l i iz 而每个音名 o e 、f、sl a ( ) 、s 或t【,
有低音 、中音、高音和最高音之分 ,共为 2 8个音 ,每 个音 对应一个 固定的频率 ,C 语 言中可用函数 su d频率) on( 来实 现 。第 二,如何 表示和控制每个音 的音长 ( 或节拍) 。在确
t ype e sr t df tuc
基金项 目:湖南科技学院 2 0 0 9年校 级课题湖 南科 技学
院“ 质量工程 ”教学改革项 目:以实验为导 向的课程体 系改
革 ” 。
{ c a n me / hr a ; 音名表示 /
c a hg ; h r ih
升降表示 /
示低 音、中音、高音和最高音_。 l 】 简谱 中音长 ( 或节拍)的表示是通过音名加后划线 和下
划 线来 表示 的。例如 ,2 一 一 和 2 分另表 丞 l 、2 、2、2 、2 { l 拍
拍 、3拍和半拍、四分之一 拍。假设 1 的时值为 1 ,那 拍 秒 么 ,上面 5个音 的音长分别为 1 秒、2秒、3秒和 O . 、 5秒
和 改进 的方向。
1基 于 C语 言 的乐谱表 示 与实现
11乐谱的 C语 言表 示 .
简谱 中音高 ( 或音调 )的表示是通过 1 7这 7个 阿拉 到
伯数字作为 音名 ,再 加上表示 升降的符号 “ ”来表示 的。 .
例如 ,r 的低音 、中音、高音和最高音依 次表示成如 图 1 e
第3 2卷 第 1 期 2
2 1 年 1 月 01 2
湖南科技学院学报
J u n l f n n Un v r i fS in ea d E g n ei g o r a a i est o c e c n n i e rn o Hu y

北邮小学期PIC单片机-蓝牙电子琴-实验报告

北邮小学期PIC单片机-蓝牙电子琴-实验报告

2013年小学期PIC单片机实验报告题目:蓝牙电子琴组号:班级:学号:姓名:老师:目录一摘要二论证与比较三原理1 蓝牙控制原理…………………………………………………..2 发音原理………………………………………………………3 中断控制………………………………………………………四硬件1 框图…………………………………………………………………………………2 原理图…………………………………………………………………………………五软件1 流程图………………………………………………………………………………2 程序…………………………………………………………………………………六实验总结七参考文献一摘要Microcontroller is known as the single chip microcomputer and single chip microcomputer. It is the central processing unit (CPU), random access memory (RAM), read-only memory (ROM), input/output port (I/O), etc. The main function of computer components are integrated on a chip microcomputer. Experiments using PIC16F877 single-chip microcomputer with a serial communication port (USART port), through the USART port with bluetooth module connection, you can through the mobile phone bluetooth bluetooth device to control the single-chip computer, also can realize the serial communication with other modules. PIC16F877 single chip microcomputer to control the corresponding port produce a certain frequency of square wave, amplification and then sent to the speakers can emit a certain frequency of sound. Interrupt to use bluetooth to real-time control MCU, thus realize the electric .单片机被称为单片微电脑或单片微型计算机。

PIC单片机电子密码锁

PIC单片机电子密码锁

一、系统主要功能1)基本要求1.硬件设计要求:(1)CPU使用PIC16F877A。

(2)用4x4矩阵键盘作为操作信息输入。

(3)用LCD1602或六位数码管作为信息输出。

(建议使用LCD1602)(4)用蜂鸣器及发光二极管作为错误报警及状态显示。

2.系统功能要求:(1)输入密码功能。

输入密码时用“*”号或“-”显示。

在输入密码时,具有清除前一位密码功能(用CLR键)。

密码输入完毕,按(ENTER键)确认并生效。

(2)上锁功能。

在锁开状态下,通过(LOCK键)上锁。

(3)在锁合的状态下,通过密码开锁功能。

开锁时,直接在键盘上输入六位密码,按(ENTER键)确认,如果密码正确,转入锁开状态。

(4)在锁开状态下,修改密码功能。

在键盘上输入六位新的密码,按(ENTER键)确认,代替旧密码,并保存在RAM中。

(4)在开锁时,如果输入密码三次错误,产生声、光报警功能。

(5)0~9为密码键数字键,E为ENTER键,C为清除键CLR键,D作为上锁键LOCK键,如果用到其他键时,可自行定义。

2)进阶要求密码保存在PIC16F877A内部的EEPROM中,以防断电密码丢失。

(不使用外挂的EEPROM,如:AT24C02等)二、系统设计要求1)根据系统的功能和目标,画出系统功能框图。

2)根据系统功能框图用Proteus画出仿真电路图。

3)根据系统的功能要求,画出程序流程图。

4)根据程序流程图,用PIC C语言编写系统源程序。

5)进行编译、调试建立目标代码。

6)在Proteus环境下进行仿真。

三、设计报告报告内容包括系统设计思路、方案选择、器件选择及电路元器件明细表、系统功能框图、程序流程图、源程序清单、系统工作原理和设计心得等。

四、评分标准:1、完成《基本要求》者,得分80~89分;2、完成《基本要求》及《进阶要求》者,得分90~100分;五、设计时间安排十九周的星期一至星期五(2011年6月27日至7月1日)1)周一:布置任务,进行方案选择、器件选择。

PIC单片机实现音乐播放

PIC单片机实现音乐播放

PIC单片机实现音乐播放源程序:以下程序要用二个定时器资源,凡是有二个定时器的PIC单片机均可实现,该范例需要的MCU是MICROCHIP PIC16C62INCLUDE "D:\PIC\P16XX.EQU" ;该文件在MICROCHIP光盘中可找到;**************************************************#define BeepOut RC,4;**************************************************W_TEMP EQU 0X20 ;(0XA0)STATUS_TEMP EQU 0X21BeepCnt equ 30hTmrBak equ 31hBeepMode equ 32hSflag equ 33h;**************************************************CSTIME100MS equ .8;;**************************************************;SflagFg_100ms equ 0FgBeep equ 1;**************************************************ORG 000H;GOTO MAIN ; Skip over interrupt vecterORG 04H ; Interrupt VectorGOTO INTZ;**************************************************OkTab:movf BeepCnt,waddwf PCL,fretlw .255-.130;0xf6 ;1 ;retlw .255-.126;0xfa ;2 ;retlw .255-.119; 0xfd ;3 ;retlw 0;**************************************************WhisleTab:movf BeepCnt,waddwf PCL,fretlw .255-.239;523Hz ;0 ;retlw .255-.179;698Hz ;1 ;retlw .255-.159;784Hz ;2 ;retlw .255-.119;1046Hz ;3 ;retlw .0;************************************************** HangTab:movf BeepCnt,waddwf PCL,fretlw .255-.159; 784Hz ;0 ;retlw .255-.119; 1046Hz ;1 ;retlw .255-.150; 830Hz ;2 ;retlw .255-.112 ;1109Hz ;3 ;retlw .255-.142 ;880Hz ;4 ;retlw .255-.106;1174Hz ;5 ;retlw .255-.134;932Hz ;6 ;retlw .255-.100;1244Hz ;7retlw .255-.126;988Hz ;8;retlw .255-.94;1318Hz ;9;retlw .255-.119;1046Hz ;10 ;retlw .255-.89;1397Hz ;11 ;retlw .0;************************************************** WelcomTab:movf BeepCnt,waddwf PCL,fretlw .255-.89;1397Hz ;11 ;retlw .255-.119;1046Hz ;10 ;retlw .255-.94;1318Hz ;9;retlw .255-.126;988Hz ;8;retlw .255-.100;1244Hz ;7retlw .255-.134;932Hz ;6 ;retlw .255-.106;1174Hz ;5 ;retlw .255-.142 ;880Hz ;4 ;retlw .255-.112 ;1109Hz ;3 ;retlw .255-.150; 830Hz ;2 ;retlw .255-.119; 1046Hz ;1 ;retlw .255-.159; 784Hz ;0 ;retlw .0;************************************************** BeepModeJmp:addwf PCL,fb psWhisle ;0b psOk ;1b psHang ;2b psWelcom ;3;************************************************** IO_SET:MOVLW B'11001011'MOVWF TRISAMOVLW B'00001100'movwf TRISBMOVLW B'00000011'movwf TRISC ; Set Port_C to all outputsBANK0_RETURN;**************************************************SYS_SET:BANK1_MOVLW B'00000111' ; 1:256 TMR0分频MOVWF OPTION_RBSF PIE1,TMR2IE ;TMR2中断允许BANK0_MOVLW B'00000001' ;开TMR1MOVWF T1CONbsf INTCON,TOIE ;TMR0中断允许BSF INTCON,PEIE ;允许所有未被屏蔽之外围接口中断RETURN;**************************************************MAIN: ; Main rotationCALL IO_SETMOVLW B'00000000' ;关所有中断MOVWF INTCON;****************************CALL SYS_SET;****************************call PlayPsWelcom ;上电提示音MAINLOOP:bsf INTCON,GIE ;开所有中断CLRWDT ; Clear WDTcall BeepForB MAINLOOP;**************************************************INTZ:PUSH ; Push ;中断服务程序BTFSC PIR1,TMR2IF ;测试TMR2中断标志位b INT_TMR2 ;BTFSC INTCON,TOIF ;测试TMR0中断标志位GOTO INT_TMR0IntRet:POP ; Pop;************************************************** INT_TMR2:BCF PIR1,TMR2IF ;清TMR2中断标志位movf TmrBak,wmovwf TMR2CPL BeepOutBeeperEnd:b IntRet;************************************************** INT_TMR0: ;定时0中断BCF INTCON,TOIF ; clear INTFMOVLW .255-.38 ;10msMOVWF TMR0;====================decfsz T100ms,fb int_tmr0_retmovlw CSTIME100MSmovwf T100msbsf Sflag,Fg_100ms;=====================int_tmr0_ret:b IntRet;************************************************** PlayPsWhisle:bsf Fg,FgBeepclrf BeepCntmovlw .0movwf BeepModemovlw CSTIME100MSmovwf T100msretlw 0;************************************************** PlayPsOk:bsf Fg,FgBeepclrf BeepCntmovlw .1movwf BeepModemovlw CSTIME100MSmovwf T100msretlw 0;************************************************** PlayPsHang:bsf Fg,FgBeepmovlw .2movwf BeepModemovlw CSTIME100MSmovwf T100msretlw 0;************************************************** PlayPsWelcom:bsf Fg,FgBeepclrf BeepCntmovlw .3movwf BeepModemovlw CSTIME100MSmovwf T100msretlw 0;************************************************** ;音乐播放程序;BeepMode=0 : psWhisle;BeepMode=1 : psOk;BeepMode=2 : psHang;BeepMode=3 : psWelcom;************************************************** BeepFor:btfss Sflag,Fg_100msb BeepForEndbcf Sflag,Fg_100msbtfss Sflag,FgBeepb BeepForEndMOVLW B'00000101' ;开TMR2 1:4分频MOVWF T2CONmovf BeepMode,wb BeepModeJmppsWhisle:call WhisleTabb BeepPlaypsOk:call OkTabb BeepPlaypsHang:call HangTabb BeepPlaypsWelcom:call WelcomTabb BeepPlayincf BeepCnt,fmovwf TmrBakmovf TmrBak,fbtfsc status,zb BeepOffmovlw .1xorwf TmrBak,wbtfsc status,zb BeepStopb BeepForEndBeepOff:clrf BeepCntbcf Sflag,FgBeepbcf BeepOutbcf T2CON,TMR2ONb BeepForEndBeepStop:bcf T2CON,TMR2ON ;stopbcf BeepOutBeepForEnd:retlw 0;************************************************** END。

基于PIC单片机的步进电机控制器设计

基于PIC单片机的步进电机控制器设计

摘要本文介绍了PIC单片机和步进电机的结构、工作原理以及指标参数,采用PIC系列单片机作为步进电机控制系统的核心,实现了软件与硬件相结合的控制方法。

硬件结构包括LCD显示电路、电机驱动电路、电源电路、键盘接口电路等等。

软件均采用模块化设计,通过调用一系列子程序,像中断程序、显示程序、键盘扫描程序、电机驱动程序等实现步进电机的转速和角度的精确控制。

采用单极性驱动电路对小功率步进电机进行驱动,电路简单,实用性好。

用LCD显示屏对步进电机的预设工作状态进行动态显示,直观、明了。

本文给出了系统设计的硬件原理图、编程流程图和软件程序。

关键字:PIC单片机步进电机硬件接口电路模块化程序AbstractThis paper describes the structure, working principle ,parameters and indicators of PIC microcontroller and stepper motor , uses a PIC MCU as the core of stepper motor control system, and a control method of combination of software and hardware is realized.The hardware structure includes LCD display circuit,motor drive circuit,The power supply circuit,Keyboard interface circuits and so on . The software adopts modular design, by calling a series of subroutines, like interrupt program, display program, keyboard scanning procedure, motor driver program to achieve the control of the speed and angle of the stepper motor. Unipolar drive circuit is used for driving low-power stepper motor, which is simple and really functional.LCD is used for dynamic displaying intuitively and clearly the state of the stepper motor.This paper presents the hardware schematics design of the system, programming flowcharts and software programs.Key words: PIC Microcomputer;Stepping Motor;Hardware Interface Circuit ;Modular Program;目录摘要 (I)Abstract (II)绪论................................................ 错误!未定义书签。

基于PIC单片机的出租车计费系统设计

基于PIC单片机的出租车计费系统设计

ISD1420语 音 模 块 等 ,实 现基 本 的 出租 车 计 价 器 1.2 数 据采 集 电路
功 能 。
数据采集主要采集车轮 的转速等开关 量信号 ,
本系统是 由 PIC单片机 、液晶显示模块 、计数脉 采集 电路如 图 2所示 ,外部开关量进入光 电耦合 器
冲发生器、系统实时时钟以及语音等模块组成 。系统 件 TLP521-4,TLP521-4的输 出端 连 接到单 片 机 的
内含 I2C总线接 口功能的具有极低功耗 的多功能时 处理后的信息进行显示 ,方便查看实时数据 。12864 E
图 1 系统 功 能框 图
1.1 PIC16F877单 片机 PIC16F877单 片机是一种具有 FLASH程序存储
器 的 8位 COMS单片机 ,采用高性 能的哈佛双总给 结构 CPU和 RISC指令 集 ,CPU可 同时访 问数据存 储器和程序存储器 ,是一种高速、低功耗及功能齐全 的微处理芯片 ,内部含有 FLASH、ROM、RAM、EEP- ROM、I/O端 口、A/D转换器 、捕捉器 /比较器 /PWM、 串行通信端 口、定时器 ,计数器和中断控制器 ,以及 数据总线、数据存储器总线和程序存储器总线。其中
在 录放操作结束后 ,芯片 自动进入低功耗节 电
图 3 语 音 播 放 电路 图
模式 、功耗仅 0.5 A。ISD1420系列有唯一 的录音控 路极其简洁 ,而且增加了芯片的可靠性 ,同时每次读 制 和边 缘 /电平触 发 两种 放 音控 制 。不 分段 时外 围线 写数据后 内嵌的字地址寄存器会 自动产生增量 ,电 路最简 ,也可按最小段 长为单位任 意组合分段 ,芯片 路如 图 4所 示 。 提供若干操作模式 ,大大提高了控制的灵活性。芯片

c语言编写的音乐播放器源代码)

include <windows.h> #include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>unsigned frequency[100];char hight[100];unsigned time[100];unsigned rate;void main(){voidset(unsignedf[],charh[],unsignedt[],int r,int num);void music(unsigned f[],unsigned t[],intnum);int flag=0;FILE *f1;int i,n,menu;char FileName[30];while(1){f1=NULL;i=n=0;printf("本程序采用编码的形式播放音乐。

\n");printf("\n用记事本编辑乐谱,然后通过输入文件名播放音乐\n");printf("乐谱文件可以自创,也可以抄别人的\n");printf("\n现在可以先输入数字再按回车播放音乐:\n");printf("1播放指定音乐music1\n");printf("2播放指定音乐music2\n");printf("3通过程序文件名播放音乐\n");printf("4退出\n");while(1){printf("menu=");scanf("%d",&menu);if(menu==1) {strcpy(FileName,"music1.txt");break;}if(menu==2){strcpy(FileName,"music2.txt");break;}if(menu==3){scanf("%s",FileName);break;}if(menu==4)exit(0);}printf("\n该文件的音乐编码如下:\n");if((f1=fopen(FileName,"r"))==NULL){ printf("不能打开文件!\n");exit(1);}fscanf(f1,"%d",&rate);while(!feof(f1)&&flag!=1){fscanf(f1," %d%c%d",&frequency[i],&hight[i],&time[i]);printf("%d%c%d",frequency[i],hight[i],time[i]);if(time[i]!=-1){i++;n++;}elseflag=1;}printf("\n");set(frequency,hight,time,rate,n);music(frequency,time,n);fclose(f1);}getch();}void set(unsigned f[],char h[],unsigned t[],int r,int num){int i,k;for(i=0;i<num;i++){t[i]=t[i]*r;switch(h[i]){case 'H':k=4;break;case 'M':k=2;break;case 'L':k=1;}switch(f[i]){case 1: f[i]=262*k; break;case 2: f[i]=296*k; break;case 3: f[i]=330*k; break;case 4: f[i]=349*k; break;case 5: f[i]=392*k; break; case 6: f[i]=440*k; break;case 7: f[i]=494*k; break;} }}voidmusic(unsignedf[],unsignedt[],intnum){int i;for(i=0;i<num;i++){Beep(f[i],t[i]);}。

PICkit3(ICD2)使用方法140722

ICD2或PICkit3使用方法一、工程文件的建立1、可事先根据任务要求用记事本、MPLAB IDE软件或其它手段编写好主文件或主函数(*.ASM或*.C)、子程序或子函数(*.INC或*.h)并与特殊功能存储器的定义文件(PIC16F877A.INC,C编译环境略)、连接文件(16f877a.lkr,可略)存放在某一路径XX(不能用中文)。

2、运行MPLAB IDE软件3、Project→New(选择工程文件名,如ex1407),Project Directory(选择路径XX,不能用中文)4、View 选择Project、Output5:编译器选择:(选择汇编语言或C语言)5_1:汇编语言:Project→Select Language→Toolsuite(如下图) →OK5_2:C语言:Project→Select Language→Toolsuite(如下图) →OK6、主函数加载:右击Source Files→Add Files *.asm或*.C(主程序或主函数,在路径XX下的文件)7、子函数加载:右击Header Files Add Files→*.INC和PIC16F877A.INC或*.h(在路径XX下的文件)8(略)、右击Linker script Add Files→16f877a.lkr(在路径XX下的文件)9、器件型号选择:Configure select Device→PIC16F877A10、参数设置:Configuration →Configuration Bits set in code 的√去掉晶振4MHz Oscillator 选XT,大于4MHz(如晶振20MHz)则选HS,其它选项可关闭原始界面:典型参考设置:11、编译并纠错(编译成功会自动生成ex1407.HEX、ex1407.mcp等文件)二、程序下载调试1、将ICD2或PICkit3只与PC机连接,与开发板是断开的2、工作方式选择Debugger或programmer,将出现如下界面,表示ICD2或PICkit3与PC机成功连接。

用PIC16F877A单片机制作的PWM参数测量仪

用PIC16F877A单片机制作的PWM参数测量仪用PIC16F877A单片机制作的PWM参数测量仪一、测量原理电路如上图(电源电路略)。

外部频率信号从单片机CCP1(RC2)脚输入,测量结果显示在液晶屏上。

PIC16F877A单片机内部有2个CCP模块。

当它工作在PWM方式时。

可以产生周期和电平宽度均可由编程决定的PWM波形;当它工作在捕捉方式时。

可以捕捉外部输入脉冲的上升沿或下降沿,当输入信号发生边沿跳变时,CCP模块立即把当时TMR1的16位计数值放入CCPRxH和CCPRxL寄存器。

并产生相应的中断。

利用CCP 模块的捕捉功能,可以很容易地完成。

PWM信号的周期、频率、脉宽、占空比等参数的测量。

PWM信号参数的测量以周期测频法为基础。

原理如右图所示。

把单片机的CCP1模块设置为捕捉模式,先把CCP1设置为捕捉脉冲的上升沿。

当脉冲信号上升沿到来时。

触发CCP中断,并在中断服务程序中记录下此时TMR1寄存器中16位的值T1:然后把CCP1模块设置成捕捉脉冲下降沿,当脉冲信号下降沿到来时,再次触发CCP中断。

并在中断服务程序中记录下此时TMR1寄存器中16位的值T2;最后把CCP1模块设置成捕捉脉冲上升沿,当脉冲信号上升沿到来时,触发CCP 中断,并在中断服务程序中记录下此时TMR1寄存器中16位的值T3,这样就完成了PWM信号一个周期的测量。

示例程序如下:通过T1~T3可算出PWM信号的周期、频率、脉宽、占空比等。

当PIC16F877A使用4MHz晶振时。

时钟周期=1/4MHz=250ns,指令周期=1μs,TMR1寄存器中16位数值的单位就是μs。

PWM信号各参数的计算方法如下:信号周期:T=(T3-T1)μs;信号频率:F=1000000/T;脉冲宽度:P=(T2-T1)μs;占空比:R=P/T×100%。

为了提高准确性。

可以重复测量多个周期的PWM信号参数,以平均值为最终测量结果。

C语言写歌曲

c语言经典教程:发声技术问题:乐谱的 1、2、3、4、5、6、7,加上高低音可以谱出动听的曲子,请编写程序,使计算机能够播放歌曲。

[分析]播放歌曲意味着让计算机发声,声音从 PC 机内的扬声器发出,所以这个问题将与硬件扬声器电路有关。

[解答]解决这一编程问题,让我们首先简单了解一下计算机发声的原理。

在PC 机的系统板上装有定时与计数器 8253 芯片,还有 8255 可编程并行接口芯片,由它们组成的硬件电路可用来产生 PC 机内扬声器的声音,对于 286、386、486、586 等 PC 微机,因为采用了超大规模集成电路,因而看不到这些芯片,它们均集成在外围电路芯片上了。

当我们操作计算机时,常常听到的发声,就是由软件控制这些电路而产生的。

声音的长短和音调的高低,均可由程序进行控制。

在扬声器电路中,定时器的频率决定了扬声器发音的频率,所以可通过设定定时器电路的频率来使扬声器发出不同的声音。

对定时器电路进行频率设定时,首先对其命令寄存器(口地址为 0x43>写命令字,如写入 0xb6,这可用outporb(0x43,0xb6>;来实现,则表示选择该定时器的第二个通道,计数频率先送低 8 位(二进制>,后送高 8 位。

接着用口地址 0x42 送频率计数值,先送低 8 位,后送高 8 位,即用outportb(0x42,低 8 位频率计数值>和 outportb(0x42,高 8 位频率计数值>来实现。

通过这两步使定时器电路产生一系列方波信号,此信号是否能推动扬声器发音,还要看由 8255 产生的门控信号和送数信号是否为 1,而它们也可编程,口地址为 0x61。

为了不影响 8255 口地址 61H 中的其他高位,应先输入口地址 6lH 的现有值 bits,即用 bits= inportb(0x61>来实现,然后就可用 outportb(0x61,bits|3>来允许发声,而用 outportb(0x61,bits&0xfc>来禁止发声,且不改变 8255 其它位原来的值,关于这方面的详细内容可以参阅 IBM PC/XT 接口技术方面书籍有关内容。

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