单片机C语言应用100例
单片机C语言应用100例,单片机,语言,应用,利用,运用
/实例79:简易电子琴#include /包含51单片机寄存器定义的头文件sbit P14=P14; /将P14位定义为P1.4引脚sbit P15=P15; /将P15位定义为P1.5引脚sbit P16=P16; /将P16位定义为P1.6引脚sbit P17=P17; /将P17位定义为P1.7引脚unsigned char keyval; /定义变量储存按键值sbit sound=P37; /将sound位定义为P3.7unsigned int C; /全局变量,储存定时器的定时常数unsigned int f; /全局变量,储存音阶的频率/以下是C调低音的音频宏定义#define l_dao 262 /将“l_dao”宏定义为低音“1”的频率262Hz#define l_re 286 /将“l_re”宏定义为低音“2”的频率286Hz#define l_mi 311 /将“l_mi”宏定义为低音“3”的频率311Hz#define l_fa 349 /将“l_fa”宏定义为低音“4”的频率349Hz#define l_sao 392 /将“l_sao”宏定义为低音“5”的频率392Hz#define l_la 440 /将“l_a”宏定义为低音“6”的频率440Hz#define l_xi 494 /将“l_xi”宏定义为低音“7”的频率494Hz/以下是C调中音的音频宏定义#define dao 523 /将“dao”宏定义为中音“1”的频率523Hz#define re 587 /将“re”宏定义为中音“2”的频率587Hz#define mi 659 /将“mi”宏定义为中音“3”的频率659Hz#define fa 698 /将“fa”宏定义为中音“4”的频率698Hz#define sao 784 /将“sao”宏定义为中音“5”的频率784Hz#define la 880 /将“la”宏定义为中音“6”的频率880Hz#define xi 987 /将“xi”宏定义为中音“7”的频率53/以下是C调高音的音频宏定义#define h_dao 1046 /将“h_dao”宏定义为高音“1”的频率1046Hz#define h_re 1174 /将“h_re”宏定义为高音“2”的频率1174Hz#define h_mi 1318 /将“h_mi”宏定义为高音“3”的频率1318Hz#define h_fa 1396 /将“h_fa”宏定义为高音“4”的频率1396Hz#define h_sao 1567 /将“h_sao”宏定义为高音“5”的频率1567Hz#define h_la 1760 /将“h_la”宏定义为高音“6”的频率1760Hz#define h_xi 1975 /将“h_xi”宏定义为高音“7”的频率1975Hz/*函数功能:软件延时子程序*/void delay20ms(void) unsigned char i,j;for(i=0;i100;i+)for(j=0;j60;j+);/*函数功能:节拍的延时的基本单位,延时200ms*/void delay() unsigned char i,j;for(i=0;i250;i+)for(j=0;j250;j+);/*函数功能:输出音频入口参数:F*/void Output_Sound(void)C=(46083/f)*10; /计算定时常数TH0=(8192-C)/32; /可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; /可证明这是13位计数器TL0低5位的赋初值方法TR0=1; /开定时T0delay(); /延时200ms,播放音频TR0=0; /关闭定时器sound=1; /关闭蜂鸣器keyval=0xff; /播放按键音频后,将按键值更改,停止播放/*函数功能:主函数*/void main(void) EA=1; /开总中断ET0=1; /定时器T0中断允许ET1=1; /定时器T1中断允许TR1=1; /定时器T1启动,开始键盘扫描TMOD=0x10; /分别使用定时器T1的模式1,T0的模式0TH1=(65536-500)/256; /定时器T1的高8位赋初值TL1=(65536-500)%256; /定时器T1的高8位赋初值 while(1) /无限循环switch(keyval)case 1:f=dao; /如果第1个键按下,将中音1的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 2:f=l_xi; /如果第2个键按下,将低音7的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 3:f=l_la; /如果第3个键按下,将低音6的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 4:f=l_sao; /如果第4个键按下,将低音5的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 5:f=sao; /如果第5个键按下,将中音5的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 6:f=fa; /如果第6个键按下,将中音4的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 7:f=mi; /如果第7个键按下,将中音3的频率赋给fOutput_Sound(); /转去计算定时常数 break; case 8:f=re; /如果第8个键按下,将中音2的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 9:f=h_re; /如果第9个键按下,将高音2的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 10:f=h_dao; /如果第10个键按下,将高音1的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 11:f=xi; /如果第11个键按下,将中音7的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 12:f=la; /如果第12个键按下,将中音6的频率赋给fOutput_Sound(); /转去计算定时常数 break; case 13:f=h_la; /如果第13个键按下,将高音6的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 14:f=h_sao; /如果第14个键按下,将高音5的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 15:f=h_fa; /如果第15个键按下,将高音4的频率赋给fOutput_Sound(); /转去计算定时常数 break;case 16:f=h_mi; /如果第16个键按下,将高音3的频率赋给fOutput_Sound(); /转去计算定时常数 break; /*函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频方波*/ void Time0_serve(void ) interrupt 1 using 1 TH0=(8192-C)/32; /可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; /可证明这是13位计数器TL0低5位的赋初值方法 sound=!sound; /将P3.7引脚取反,输出音频方波/*函数功能:定时器T1的中断服务子程序,进行键盘扫描,判断键位*/ void time1_serve(void) interrupt 3 using 2 /定时器T1的中断 为3,使用第2 寄存器TR1=0; /关闭定时器T0P1=0xf0; / 行 为低电 “0”, 为高电 “1”if(P1 /延时 时 软件 if(P1 /第 行 为低电 “0” P1.0输出低电 “0” if(P14=0) /如果 P1.4引脚的 为低电 “0”keyval=1; /可判断是S1键 按下if(P15=0) /如果 P1.5引脚的 为低电 “0”keyval=2; /可判断是S2键 按下if(P16=0) /如果 P1.6引脚的 为低电 “0”keyval=3; /可判断是S3键 按下if(P17=0) /如果 P1.7引脚的 为低电 “0”keyval=4; /可判断是S4键 按下P1=0xfd; /第 行 为低电 “0” P1.1输出低电 “0” if(P14=0) /如果 P1.4引脚的 为低电 “0”keyval=5; /可判断是S5键 按下if(P15=0) /如果 P1.5引脚的 为低电 “0”keyval=6; /可判断是S6键 按下if(P16=0) /如果 P1.6引脚的 为低电 “0”keyval=7; /可判断是S7键 按下if(P17=0) /如果 P1.7引脚的 为低电 “0”keyval=8; /可判断是S8键 按下P1=0xfb; /第 行 为低电 “0” P1.2输出低电 “0” if(P14=0) /如果 P1.4引脚的 为低电 “0”keyval=9; /可判断是S9键 按下if(P15=0) /如果 P1.5引脚的 为低电 “0”keyval=10; /可判断是S10键 按下if(P16=0) /如果 P1.6引脚的 为低电 “0”keyval=11; /可判断是S11键 按下if(P17=0) /如果 P1.7引脚的 为低电 “0”keyval=12; /可判断是S12键 按下P1=0xf7; /第 行 为低电 “0” P1.3输出低电 “0” if(P14=0) /如果 P1.4引脚的 为低电 “0”keyval=13; /可判断是S13键 按下if(P15=0) /如果 P1.5引脚的 为低电 “0”keyval=14; /可判断是S14键 按下if(P16=0) /如果 P1.6引脚的 为低电 “0”keyval=15; /可判断是S15键 按下if(P17=0) /如果 P1.7引脚的 为低电 “0”keyval=16; /可判断是S16键 按下TR1=1; /开启定时器T1TH1=(65536-500)/256; /定时器T1的高8位赋初值TL1=(65536-500)%256; /定时器T1的高8位赋初值
收藏
编号:520475
类型:共享资源
大小:99.15KB
格式:RAR
上传时间:2019-03-08
10
积分
- 关 键 词:
-
单片机
语言
应用
利用
运用
- 资源描述:
-
单片机C语言应用100例,单片机,语言,应用,利用,运用
展开阅读全文
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。