没写过。基本原理应该是修改定时器的定时时间来完成的。实际发声频率是蜂鸣器本身频率及给定方波频率的和频和差频。需要调试实现。
铃声假设为“嘀铃铃铃”。能否找到2个频率点‘嘀’音和‘铃’音来模拟。
模拟音为DXLXLXLXLX。D音为频率D,时长dmS;X为静音,时长为xmS;L音为频率L,时长为lmS。
将D、X、L组合音做一个定时时间初值数组。每次中断后,翻转,计数,并重置下一初值。
贴上一个报警音程序,仅供参考。
#include <reg51h>
sbit SPK = P2^5;
unsigned char frq;
void delayms(unsigned char ms);
main()
{
TMOD = 0x01;
frq = 0x00;
TH0 = 0x00;
TL0 = 0xff;
TR0 = 1;
IE = 0x82;
while(1)
{
frq++;
delayms(1);
}
}
void timer0() interrupt 1 using 1
{
TH0 = 0xfe;
TL0 = frq;
SPK = ~SPK;
}
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
#include <stdioh>
int strlengh(char s){
int n=0;
while(s[n]!='\0') n++;
return n;
}
int main()
{
char s[]="abcd 1234 XYZ";
printf("%d\n",strlengh(s));
return 0;
}
输出13
# include <stdioh>
/ source_num为待转换十进制数,purpose_jinzhi为目标进制基数/
void num_convert(int source_num, int purpose_jinzhi);
int main(void)
{
printf("请输入要转换的十进制整数:");
int source_num;
scanf("%d",&source_num);
printf("您要将%d转换为的进制数是:",source_num);
int purpose_jinzhi;
scanf("%d",&purpose_jinzhi);
for (;1;)
{
if (purpose_jinzhi>=2 && purpose_jinzhi<=10)
{
printf("转换为%d进制后的值是:",purpose_jinzhi);
num_convert(source_num,purpose_jinzhi);
break;
}
else
{
printf("输入数字范围是2-10:");
fflush(stdin);//保证输入的是非数字时,也可以运行
scanf("%d",&purpose_jinzhi);
}
}
printf("\n");
return 0;
}
void num_convert(int source_num, int purpose_jinzhi)
{
int temp = source_num%purpose_jinzhi;
source_num = source_num/purpose_jinzhi;
if(source_num == 0)
{
printf("%d",temp);
}
else
{
num_convert(source_num,purpose_jinzhi);
printf("%d",temp);
}
}
/
运行结果:
--------
请输入要转换的十进制整数:16
您要将16转换为的进制数是:0
输入数字范围是2-10:11
输入数字范围是2-10:a
输入数字范围是2-10:>
输入数字范围是2-10:2
转换为2进制后的值是:10000
Press any key to continue
----------
/
警用长排警示灯共有8组LED频闪灯,4个闪灯,2个直射灯,开了警报器,LED灯和闪灯都亮并闪烁。关了警报器都不亮了。警灯闪烁现在按规定只能是遇到下列情况:
(一)赶赴刑事案件、治安案件、交通事故及其他突发事件现场;
(二)追捕犯罪嫌疑人和在逃的罪犯、劳教人员;
(三)追缉交通肇事逃逸车辆和人员;
(四)押解犯罪嫌疑人、罪犯和劳教人员;
(五)执行警卫、警戒和治安、交通巡逻等任务。
才能使用。知道的就这些了,望采纳我的回答。
我刚学vb也是模仿时间长了你应该能发现固定的程序语言套路一年就不学了你下点源码分析规律除非你专业否则没必要背代码太长了不好记学会了你就发现不难了你初中还有很多时间背着代码写程序考查记忆买本编程书看着教程视频扒代码时间长了你就是高手了
strcmp(char str1,char str2)的比较方式 是从字符串头开始向后逐个字符比较,若str1的i位字符的ascii码大于或小于str2的相同位字符的ascii码 则返回str1[i]与str2[i]的差(大于返回正值,小于返回负值),若相等则返回0。
这里&&是判断2个字符串是否判断到末尾,字符串末尾为'\0',该while循环里通过i的++来遍历比较字符串中的每个字符。当S1或S2中某字符串 比较到末尾时 S1[i]&&S2[i] 为0 退出while循环。所以S1[i]&&S2[i] 是循环条件,s1[i]&&s2[i]为真时,s1[i]并不一定等于s2[i]。因为&&只要不遇到0,都是为真的。所以if(s1[i]!=s2[i])还是有用的,判断该位是否相当 若果相等则继续循环,直到不相等时,再退出循环,进行求差。
说的有点乱。希望你能看懂
以上就是关于求高手:用51单片机一个口驱动蜂鸣器模仿出电话响铃的C程序如何写,好的我多加分!全部的内容,包括:求高手:用51单片机一个口驱动蜂鸣器模仿出电话响铃的C程序如何写,好的我多加分!、c程序设计模仿strlen编写函数strlengh求字符数组中\0前的字符个球、模仿十进制转二进制的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)