精品文档
/************************************************************** 函数功能:主函数
**************************************************************/ voidmain(void) {
// EA=1; //开总中断
// ET0=1; //定时器T0中断允许
TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值 TL1=(65536-921)%6; //定时器T1的高8位赋初值 TR1=1; //启动定时器T1 TF1=0;
while(1)//无限循环等待查询 {
while(TF1==0)
; TF1=0;
sound=~sound; //将P3.7引脚输出电平取反
TH1=(65536-921)/256; //定时器T0的高8位赋初值 TL1=(65536-921)%6; //定时器T0的高8位赋初值 } }
// 44 T0 P1 8 LED //实例44:将计数器T0 计数的结果送P1 口8 位LED显示
#include
/************************************************************** 函数功能:主函数
**************************************************************/ voidmain(void) {
// EA=1; //开总中断
// ET0=1; //定时器T0中断允许
TMOD=0x02; //使用定时器T0的模式2 TH0=256-156; //定时器T0 的高8位赋初值 TL0=256-156; //定时器T0的高8位赋初值 TR0=1; //启动定时器T0 while(1)//无限循环等待查询 {
while(TF0==0) //如果未计满就等待
332/ 192
.
精品文档
{
if(S==0) //按键S按下接地,电平为0
P1=TL0;//计数器TL0加1后送P1口显示
}
TF0=0; //计数器溢出后,将TF0清0
} }
//实例45:用定时器T0的中断控制1位LED闪烁
#include
/************************************************************** 函数功能:主函数
**************************************************************/ voidmain(void) {
EA=1; //开总中断
ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式2 TH0=(65536-46083)/256;//定时器T0的高8位赋初值 TL0=(65536-46083)%6;//定时器T0的高8位赋初值 TR0=1; //启动定时器T0 while(1)//无限循环等待中断
; }
/************************************************************** 函数功能:定时器T0的中断服务程序
**************************************************************/
voidTime0(void)interrupt1using0//“interrupt”声明函数为中断服务函数
//其后的1为定时器T0的中断编号;0表示使用第0组工作
寄存器 {
D1=~D1; //按位取反操作,将P2.0引脚输出电平取反 TH0=(65536-46083)/256;//定时器T0的高8位重新赋初值 TL0=(65536-46083)%6;//定时器T0的高8位重新赋初值 }
33/ 192 3
.
精品文档
// 46 T0
//实例46:用定时器T0 的中断实现长时间定时
#include
unsignedcharCountor;//设置全局变量,储存定时器T0 中断次数
/************************************************************** 函数功能:主函数
**************************************************************/ voidmain(void) {
EA=1; //开总中断
ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式2 TH0=(65536-46083)/256;//定时器T0的高8位赋初值 TL0=(65536-46083)%6;//定时器T0的高8位赋初值 TR0=1; //启动定时器T0
Countor=0; //从0开始累计中断次数 while(1)//无限循环等待中断
; }
/************************************************************** 函数功能:定时器T0的中断服务程序
**************************************************************/
voidTime0(void)interrupt1using0//“interrupt”声明函数为中断服务函数
//其后的1为定时器T0的中断编号;0表示使用第0组工作
寄存器 {
Countor++; //中断次数自加1
if(Countor==20) //若累计满20次,即计时满1s {
D1=~D1; //按位取反操作,将P2.0引脚输出电平取反 Countor=0; //将Countor清0,重新从0开始计数 }
TH0=(65536-46083)/256;//定时器T0的高8位重新赋初值 TL0=(65536-46083)%6;//定时器T0的高8位重新赋初值 }
//实例47:用定时器T1 中断控制两个LED以不同周期闪烁
#include
334/ 192
.
精品文档
sbitD2=P2^1; //将D2位定义为P2.1引脚
unsignedcharCountor1;//设置全局变量,储存定时器T1中断次数 unsignedcharCountor2;//设置全局变量,储存定时器T1中断次数
/************************************************************** 函数功能:主函数
**************************************************************/ voidmain(void) {
EA=1; //开总中断
ET1=1; //定时器T1中断允许 TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-46083)/256;//定时器T1的高8位赋初值 TL1=(65536-46083)%6;//定时器T1的高8位赋初值 TR1=1; //启动定时器T1
Countor1=0; //从0开始累计中断次数 Countor2=0; //从0开始累计中断次数 while(1)//无限循环等待中断
; }
/************************************************************** 函数功能:定时器T1的中断服务程序
**************************************************************/
voidTime1(void)interrupt3using0//“interrupt”声明函数为中断服务函数
//其后的3为定时器T1的中断编号;0表示使用第0组工作
寄存器 {
Countor1++; //Countor1自加1 Countor2++; //Countor2自加1
if(Countor1==2) //若累计满2 次,即计时满100ms
{
D1=~D1; //按位取反操作,将P2.0引脚输出电平取反 Countor1=0; //将Countor1清0,重新从0开始计数 }
if(Countor2==8) //若累计满8 次,即计时满400ms
{
D2=~D2; //按位取反操作,将P2.1引脚输出电平取反 Countor2=0; //将Countor1清0,重新从0开始计数 }
TH1=(65536-46083)/256;//定时器T1的高8位重新赋初值 TL1=(65536-46083)%6;//定时器T1的高8位重新赋初值 }
33/ 192 5
.
精品文档
// 48 T1 1KHz //实例48:用计数器T1 的中断控制蜂鸣器发出1KHz音频
#include
/************************************************************** 函数功能:主函数
**************************************************************/ 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
#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
.
C51单片机C语言程序100例-Keil
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)