C51单片机C语言程序100例_Keil(8)

2018-11-19 21:56

// 48 T1 1KHz //实例48:用计数器T1 的中断控制蜂鸣器发出1KHz音频

#include // 包含51单片机寄存器定义的头文件 sbitsound=P3^7; //将sound 位定义为P3.7引脚

/************************************************************** 函数功能:主函数

**************************************************************/ voidmain(void) {

EA=1; //开总中断

ET1=1; //定时器T1中断允许

TMOD=0x10; //TMOD=0001000B,使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值 TL1=(65536-921)%6; //定时器T1的高8位赋初值 TR1=1; //启动定时器T1 while(1)//无限循环等待中断

; }

/************************************************************** 函数功能:定时器T1的中断服务程序

**************************************************************/ voidTime1(void)interrupt3using0//“interrupt”声明函数为中断服务函数 {

sound=~sound;

TH1=(65536-921)/256; //定时器T1的高8位重新赋初值 TL1=(65536-921)%6; //定时器T1的高8位重新赋初值 }

// 49 T0 \ \

//实例49:用定时器T0 的中断实现\渴望\主题曲的播放

#include //包含51单片机寄存器定义的头文件 sbitsound=P3^7; //将sound 位定义为P3.7 unsignedintC; //储存定时器的定时常数 //以下是C调低音的音频宏定义

#definel_dao262 //将“l_dao”宏定义为低音“1”的频率262Hz #definel_re 286 //将“l_re”宏定义为低音“2”的频率286Hz #definel_mi 311 //将“l_mi”宏定义为低音“3”的频率311Hz #definel_fa349 //将“l_fa”宏定义为低音“4”的频率349Hz #definel_sao392 //将“l_sao”宏定义为低音“5”的频率392Hz #definel_la440 //将“l_a”宏定义为低音“6”的频率440Hz #definel_xi 494 //将“l_xi”宏定义为低音“7”的频率494Hz

336/ 192

//以下是C调中音的音频宏定义

#definedao523 //将“dao”宏定义为中音“1”的频率523Hz #definere 587 //将“re”宏定义为中音“2”的频率587Hz #definemi659 //将“mi”宏定义为中音“3”的频率659Hz #definefa698 //将“fa”宏定义为中音“4”的频率698Hz #definesao784 //将“sao”宏定义为中音“5”的频率784Hz #definela880 //将“la”宏定义为中音“6”的频率880Hz #definexi 987 //将“xi”宏定义为中音“7”的频率523H //以下是C调高音的音频宏定义

#defineh_dao1046 //将“h_dao”宏定义为高音“1”的频率1046Hz #defineh_re1174 //将“h_re”宏定义为高音“2”的频率1174Hz #defineh_mi1318 //将“h_mi”宏定义为高音“3”的频率1318Hz #defineh_fa 1396 //将“h_fa”宏定义为高音“4”的频率1396Hz #defineh_sao1567 //将“h_sao”宏定义为高音“5”的频率1567Hz #defineh_la 1760 //将“h_la”宏定义为高音“6”的频率1760Hz #defineh_xi1975 //将“h_xi”宏定义为高音“7”的频率1975Hz /******************************************* 函数功能:1个延时单位,延时200ms

******************************************/ voiddelay() {

unsignedchari,j; for(i=0;i<250;i++) for(j=0;j<250;j++)

;

}

/******************************************* 函数功能:主函数

******************************************/ voidmain(void) {

unsignedchari,j;

//以下是《渴望》片头曲的一段简谱

unsigned intcode f[]={re,mi,re,dao,l_la,dao,l_la, //每行对应一小节音符

l_sao,l_mi,l_sao,l_la,dao,

l_la,dao,sao,la,mi,sao, re,

mi,re,mi,sao,mi,

l_sao,l_mi,l_sao,l_la,dao, l_la,l_la,dao,l_la,l_sao,l_re,l_mi,

l_sao,

re,re,sao,la,sao, fa,mi,sao,mi,

la,sao,mi,re,mi,l_la,dao,

337/ 192

re,

mi,re,mi,sao,mi,

l_sao,l_mi,l_sao,l_la,dao, l_la,dao,re,l_la,dao,re,mi, re,

l_la,dao,re,l_la,dao,re,mi, re,

0xff};//以0xff 作为音符的结束标志

//以下是简谱中每个音符的节拍

//\对应4 个延时单位,\对应2个延时单位,\对应1个延时单位 unsignedcharcode JP[]={4,1,1,4,1,1,2,

2,2,2,2,8,

4,2,3,1,2,2, 10,

4,2,2,4,4, 2,2,2,2,4, 2,2,2,2,2,2,2,

10,

4,4,4,2,2, 4,2,4,4,

4,2,2,2,2,2,2, 10,

4,2,2,4,4, 2,2,2,2,6, 4,2,2,4,1,1,4, 10,

4,2,2,4,1,1,4, 10 };

EA=1; //开总中断

ET0=1; //定时器T0中断允许

TMOD=0x00; // 使用定时器T0的模式1(13位计数器) while(1) //无限循环 {

i=0; //从第1个音符f[0]开始播放

while(f[i]!=0xff) //只要没有读到结束标志就继续播放

{

C=460830/f[i];

TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋

初值方法

TL0=(8192-C)2; //可证明这是13位计数器TL0低5位的赋初

值方法

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

338/ 192

for(j=0;j

}

}

}

/*********************************************************** 函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波 ************************************************************/ voidTime0(void) interrupt1using 1 {

sound=!sound; //将P3.7引脚输出电平取反,形成方波

TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法 TL0=(8192-C)2; //可证明这是13 位计数器TL0低5 位的赋初值方法 }

// 50-1 50

//实例50-1:输出50个矩形脉冲

#include //包含51单片机寄存器定义的头文件 sbit//将u位定义为P1.4 u=P1^4;

/************************************************* 函数功能:延时约30ms (3*100*100=30000μs=30m

*************************************************/ voiddelay30ms(void) {

unsignedcharm,n; for(m=0;m<100;m++) for(n=0;n<100;n++) ;

}

/******************************************* 函数功能:主函数

******************************************/ voidmain(void) {

unsignedchari;

u=1; //初始化输出高电平

for(i=0;i<50;i++) //输出50个矩形脉冲 {

339/ 192

u=1;

delay30ms(); u=0;

delay30ms();

}

while(1)

;//无限循环,防止程序“跑飞”

}

//实例50-2:计数器T0 统计外部脉冲数

#include //包含51单片机寄存器定义的头文件 /******************************************* 函数功能:主函数

******************************************/ voidmain(void) {

TMOD=0x06; //TMOD=00000110B,使用计数器T0的模式2 EA=1; //开总中断

ET0=0; //不使用定时器T0的中断 TR0=1; //启动T0

TH0=0; //计数器T0高8位赋初值 TL0=0; //计数器T0低8位赋初值

while(1) //无限循环,不停地将TL0 计数结果送P1口 P1=TL0; }

//实例51-2:定时器T0的模式2 测量正脉冲宽度

#include //包含51单片机寄存器定义的头文件

sbitui=P3^2; //将ui 位定义为P3.0(INT0)引脚,表示输入电压 /******************************************* 函数功能:主函数

******************************************/ voidmain(void) {

TMOD=0x0a; //TMOD=00001010B,使用定时器T0的模式2,GATE 置1 EA=1; //开总中断

440/ 192


C51单片机C语言程序100例_Keil(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:【2068·南京西路公馆】销售说辞2.0

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: