问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

(在线等)一个单片机程序中如何使用两个定时器(T0和T1)

发布网友 发布时间:2022-05-02 17:34

我来回答

5个回答

热心网友 时间:2022-06-21 02:02

/*******************************************************
蜂鸣器唱歌程序
当独立按键P3^2按下时蜂鸣器便开始唱歌。
*******************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Count;
sbit Speak =P1^2;
sbit key1=P3^2;
unsigned char code SONG[] ={
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00
};
void Time0_Init()
{
TMOD = 0x01;
IE = 0x82;
TH0 = 0xDC;
TL0 = 0x00;
}
/********************************************************************
* 功能 : 定时器中断,中断中实现 Count 加一
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Time0_Int() interrupt 1
{
TH0 = 0xDC;
TL0 = 0x00;
Count++;
}
/********************************************************************
* 名称 : Delay_xMs()
* 功能 : 延时子程序
* 输入 : x
* 输出 : 无
***********************************************************************/
void Delay_xMs(uint x)
{
uint i,j;
for(i=0; i<x; i++)
{
for(j=0; j<3; j++);
}
}
void delay(void)
{
int i;
for(i=0;i<1827;i++);
}
/********************************************************************
* 名称 : Play_Song()
* 功能 : 播放蜂鸣器控制程序
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Play_Song(void)
{
uchar Temp1,Temp2;
uint Addr;
Count = 0; //中断计数器清0
Addr =0;
while(1)
{
Temp1 = SONG[Addr++];
if (Temp1 == 0xFF) //休止符
{
TR0 = 0;
Delay_xMs(100);
}
else if (Temp1 == 0x00) //歌曲结束符
{
return;
}
else
{
Temp2 = SONG[Addr++];
TR0 = 1;
while(1)
{
Speak = ~Speak;
Delay_xMs(Temp1);
if(Temp2 == Count)
{
Count = 0;
break;
}
}
}
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
Time0_Init(); //定时器0中断初始化
while(1)
{
if(key1==0)
{
delay();
if(key1==0) Play_Song();
}
}
}

热心网友 时间:2022-06-21 02:03

/****************************************************************
简易电子琴程序
用4*4矩阵按键模拟电子琴按键来弹奏简单的乐曲。
****************************************************************/

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
/* 音符与计数值对应表 */
uint code tab[]={64021,64103,64260,64400,
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178};
sbit Speak = P1^2; // 此引脚输出脉冲
uchar STH0;
uchar STL0;
/* 键消抖延时函数 */
void delay(void)
{
uchar i;
for (i=300;i>0;i--);
}
/* 键扫描函数 */
uchar getkey()
{
uchar scancode,tmpcode;
if ((P1&0xf0)==0xf0)
return(0);
scancode = 0xfe;
while((scancode&0x10)!=0) // 逐行扫描
{
P1 = scancode; // 输出行扫描码
if ((P1&0xf0)!=0xf0) // 本行有键按下
{
tmpcode = (P1&0xf0)|0x0f;
/* 返回特征字节码,为1的位即对应于行和列 */
return((~scancode)+(~tmpcode));
}
else scancode = (scancode<<1)|0x01; // 行扫描码左移一位
}
}
void time0_int() interrupt 1 using 0
{
TH0 = STH0;
TL0 = STL0;
Speak=~Speak; // 反相,产生输出脉冲
}
void main()
{
uchar key,k;
TMOD = 0x11; // T0,工作方式1
ET0 = 1; //开定时器0中断
EA = 1; //开总中断
while(1)
{
P1 = 0xf0; // 发全0行扫描码
if ((P1&0xf0)!=0xf0) // 若有键按下
{
delay(); // 延时去抖动
if ((P1&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响
{
key = getkey(); // 调用键盘扫描函数
// 根据获取的按键位置得到k值
switch(key)
{
case 0x11: // 1行1列
k = 0;
break;
case 0x21: // 1行2列
k = 1;
break;
case 0x41: // 1行3列
k = 2;
break;
case 0x81: // 1行4列
k = 3;
break;
case 0x12: // 2行1列
k = 4;
break;
case 0x22: // 2行2列
k = 5;
break;
case 0x42: // 2行3列
k = 6;
break;
case 0x82: // 2行4列
k = 7;
break;
case 0x14: // 3行1列
k = 8;
break;
case 0x24: // 3行2列
k = 9;
break;
case 0x44: // 3行3列
k = 10;
break;
case 0x84: // 3行4列
k = 11;
break;
case 0x18: // 3行4列
k = 12;
break;
case 0x28: // 3行4列
k = 13;
break;
case 0x48: // 3行4列
k = 14;
break;
case 0x88: // 3行4列
k = 15;
break;
default:
break;
}
Speak = ~Speak; // 反相

/* 根据所得的k值设定计数器1的计数初值 */
STH0 = tab[k]/256;
STL0 = tab[k]%256;
TR0 = 1; // 开始计数
P1 = 0xf0; // 发全0行扫描码
while ((P1&0xf0)!=0xf0) // 若没有松开按键
{
P1 = 0xf0;
}
TR0 = 0; // 若按键松开,则停止计数,不产生脉冲输出
}
}
}
}

热心网友 时间:2022-06-21 02:03

这两个功能互相独立,用一个定时器就可以实现,不需用两个定时器

你要做的就是合并两个主程序,把一些功能代码块打包一下,如果这两个.C都是自己写的,我想这对你应该不能难

热心网友 时间:2022-06-21 02:04

你可以把两个定时器中断优先级设置一下 看看行不行

热心网友 时间:2022-06-21 02:04

应该可以
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
最火的欧美铃声排行榜(35岁男人用的手机铃声) 备孕吃什么好 吃芝麻酱可防胎儿畸形 备孕吃什么好 5类食物备孕女人一定... 准妈妈吃出芝麻酱的几大好处 ...上是所有北方人火锅必备,它除了好吃之外,还有什么其他功效? 森内贵宽扩展 森内贵宽森内贵宽---森田贵宽---Taka 森内贵宽基本信息 日本哪些乐队组合的歌曲是最棒的? 求NEWS成员里声音很孩子气的成员 cctvnews 里面播过的一个乐队的歌 女主唱 歌曲很有特点 歌曲只放了一... 面试后主动问结果怎么问 如果定时器为35秒用定时器TO来定时则其常数k设定值是什么? 请问 FP1-C40的PLC的基本定时器中,TMY的定时器范围是多少?TMX和TMR呢? 其K值又是多少啊~~~~ 若要求在起动30秒内,不可以进行换向操作,请问两个定时器T的设定值K为多少? windows7旗舰版系统的笔记本电脑如何如何切换输入法 华为p10玫瑰金的好看吗 如果是macbook 12寸玫瑰金和Huawei&#47;华为 Matebook X WT-W09玫瑰金 哪个更值得入手 美国总统选举中选举人票是怎么回事? 美国总统选举一共是多少票 登上微信附近人,我能看着别人,别人为什么看不到我 微粒贷提额可信么 为什么我的微信附近人看不到我而我能看到他们以前能看到? 衣服上的纽扣怎么缝 男人的衣服上的钮扣和女人上衣服的纽扣有什么不同? 我想办理韩国《留学回国人员证明》 ,申请条件是在韩国呆六个月以上。但是现在还不到六个月,我回国有事要 可以从韩国首尔仁川机场坐飞机回中国吗?需要哪些证件? 去年12月毕业,但是今年年底准备回国,怎么办理回国留学人员证明。 是说超过一年不予办理么? 办理韩国《留学人员回国证明》寄到中国需要多长时间能收到 韩国留学回国本科毕业证认证时要前置学历吗 在韩国办留学回国人员证明需要多少时间(急) 三菱plc,pld自动调谐后输出值是不变的吗? 我想知道c语言怎么学?新手 PLC定时器编程问题,十万火急!!! 怎样改变plc的 延时时间? 三菱的PLC怎么做个时间继电器既有通电延时又有断电延时 面试后如何询问结果 如何学习C语言(新手) 面试后如何询问面试结果 求一个PLC控制步进电机的加速启动指令,我写的是[PLSY K1500 D0 Y0] 如何主动询问面试结果? 描写老师作文的短开头和结尾 怎么回复面试者来询问面试结果 陪伴是最长情的告白,感谢图雅诺,说说自己的心得体会 noita无法使用魔杖 面试完了,教你如何询问面试结果 陪伴是最长情的告白 陪伴是最长情的告白,感谢我的缤越陪我一路同行 写老师的作文开头结尾 要首尾呼应 陪伴是最长情的告白,感谢风光580的不离不弃! 关于写老师的作文(要开头、结尾)