C51单片机怎么写C程序实现蜂鸣器前九秒读秒声,最后一秒长鸣声,就跟比赛最后倒计时一样

作者&投稿:善贺 (若有异议请与网页底部的电邮联系)
c51单片机实现一个30秒倒计时程序,要求有两个定时器,要有声音(蜂鸣器就行),显示(数码管),串口~

做一个30秒计时器,让工作状态为3,当出现电平变化时,完成计数,用程序完成计数值1秒显示1次,当计数完成时激发蜂鸣器工作,就可以实现了

设定一个定时器,1s中断,99秒后蜂鸣器flag置1

这个很简单,就是使用C51里的定时器实现就可以了啊,如果是前9秒,则整秒时响(置位),否则,到第十秒时,再置另一个位,则可以实现长响,时间到了可以复位就可以了。

不要用推荐答案的做法,如果你的单片机只做这一件事可以。否则 最好在timer中开个计数
通过计数来决定响铃时间,在定义一个布尔变量来启动响铃即可……

至于9短1长可以封一个功能函数在主函数中调用……该函数每秒调用一次,内部实现调用长短铃逻辑……

已经上实验班试过,普通用的都是有源蜂鸣器,所以你定时1秒里响100毫秒停900毫秒就是短声,反之则是长声。这样写需要响的时候不能做其他的。也可以写中断。

#include<reg52.h>
sbit speaker=P2^3;
void speak_low()
{
speaker=0;
delay(100);
speaker=1;
delay(900);
}
void speak_high()
{
speaker=0;
delay(900);
speaker=1;
delay(100);
}

void delay(unsigned int a)
{
unsigned int x,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}

void speak()
{
int i;
for(i=9;i>0;i--)
speak_low();
speak_high();
}

void main ()
{
while(1)
{
speak();
}
}

题目的条件不够。


简单的51单片机键盘C程序
A|=B;等价于 A=A|B;是先进行或运算,再把运算结果赋给A,之后的A已经不是原来的A了。第一个键值判断后,你就键值变量已经被赋予新的值了。如果正好按的是第一个键则能返回1,如果不是第一个键按下,但经过 if((keyvalue|=0xfb)!=0xff)这一判断,其中的“keyvalue|=0xfb”就把key...

51单片机访问片内数据存储器某单元的内容用c语言怎么写???
方法1:char data *p; \/\/定义一个指向片内RAM地址的指针 p = 0x30; \/\/片内RAM地址为0x30 p = 0x12; \/\/向0x30内写入立即数0x12 方法2:include <absacc.h> char x;x = DBYTE[0x30]; \/\/将片内RANM地址0x30的内容赋给变量x DBYTE[0x30] = 0x12; \/\/向0x30...

51单片机的优先级怎么用C语言怎么写?
有些单片机的中断优先级在默认的情况下是确定的,不需要设置,例如51单片机,其优先级从高到低以及向量地址是:00H 复位中断 优先级0(最高)03H 外部中断0 10BH 定时器0 213H 外部中断1 31BH

51单片机C语言程序
\/\/为你增加了一个按键检测的函数。\/\/下列程序通过了实验测试。\/\/b1输出的周期大约0.9s。\/\/b2输出的周期大约0.6s。\/\/K为触动开关,reg为红灯,bice为绿灯,b1、b2 各为一个方波,\/\/按第一次触动开关时红灯亮、b1输出,\/\/按第二次绿灯亮、为b2输出,\/\/按第三次都关闭.include <reg51.h> d...

运用51单片机实现4位8段LED数码管的动态数字显示,写出C语言程序
include<reg51.h> define uchar unsigned char;uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; \/\/0到f uchar number,nn=0;uchar dat[]={2,0,1,2,1,1,4,5,8,2};void t0isr() interrupt 1 { TH0=(...

求助:51单片机按键C程序
这个程序是AVR单片机的,看下可能对你有用 include <ioavr.h> include <intrinsics.h> define duanseg PORTC define uchar unsigned char define uint unsigned int uchar table[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0};uchar table1[]={0x08,0xce,0x12,0x82,0x...

求大神在keil上帮写51单片机C语言程序
;}}}\/\/第二个实验:\/\/假设8个LED阴极指向单片机,D11连接P0.1,D12连接P0.2 ... D18连接P0.7#include<reg51.h>char led[]={0xfe,0xff,0xfd,0xff,0xfb,0xff,0xf7,0xff,0xef,0xff,0xdf,0xff,0xbf,0xff,0x7f,0xff};void main(){char i=0;char counter=0;TMOD=0x01;...

求一51系列单片机C程序,最好是简单易懂,有注释。 程序目的:通过串口...
if(temp<4)\/\/收到的数据小于4(单片机只有P0-P3所以大于3的不做处理){ cont=1;\/\/首先cont赋1 cont=cont<<temp;\/\/进行移位 收到的数据=0代表cont=0x01;收到的数据=1代表cont=0x03;避开0表示收到第一次数据 } else\/\/如果大于4 { SendString("选择端口错误!只能为P0-P3\\r\\n");\/\/向...

51单片机C语言程序注释标注(写全)
include <reg51.h> \/\/调用头文件reg51.hvoid main() \/\/主函数{unsigned char \/\/ 无符号字符型tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};\/\/定义一个数组 LED数码管译码用的码表while(1) \/\/主循环{P2=P2|0x07; \/\/ P2口...

帮忙用C语言写一段51单片机的程序,晶振12M。
include <reg52.h> \/ 本程序功能,输出方波,频率1-25ms 单片机@12MHz \/12T \/ sbit Pulse=P1^1; \/\/---方波 sbit Add=P3^2; \/\/---频率加 sbit Dec=P3^3; \/\/---频率减 sbit Start = P1^3; \/\/---开关键 sbit Display_Ten_Bit = P2^0;sbit Display_Bit_Bit = P2^1;code ...

官渡区19463632658: 51单片机C语言控制按键蜂鸣器 -
嵇诗开思: unsigned char flag=1; //定义上升沿ready标志 while(1) {if(key1&&flag) // 默认key1下拉至GND,若产生上升沿,则响一次,同时清零标志 {SPK=1;delay();SPK=0;flag=0;}if(!key1) { flag=1;} //检测key1是否归零 准备第二次上升沿,是,则标志位置1...... } 仅供参考

官渡区19463632658: C51单片机怎么写C程序实现蜂鸣器前九秒读秒声,最后一秒长鸣声,就跟比赛最后倒计时一样 -
嵇诗开思: 已经上实验班试过,普通用的都是有源蜂鸣器,所以你定时1秒里响100毫秒停900毫秒就是短声,反之则是长声.这样写需要响的时候不能做其他的.也可以写中断.#include<reg52.h> sbit speaker=P2^3;void speak_low(){speaker=0;delay...

官渡区19463632658: 我想要做一个c51单片机的c语言程序,是用超声波模块控制蜂鸣器 -
嵇诗开思: 单片机IO口A——>驱动电路——>超声波发射——>超声波接收——>放大电路——>单片机外部中断引脚——>单片机定时器(判断距离)——>单片机IO口B——>蜂鸣器.硬件:超声波模块驱动电路、超声波模块放大电路 软件:内部定时器使用、外部中断和定时器中断的使用 现在好多倒车雷达是通过蜂鸣器鸣叫快慢表示距离远近,直接用单片机控制蜂鸣器变调比较浪费单片机资源(建议而已).软件最好自己写,因为量体裁衣最合适!祝你成功!

官渡区19463632658: C51单片机流水灯蜂鸣器程序 -
嵇诗开思: P2是端口啊,所以P2=_crol_(P2,1);这句中等号左边的P2表示的读取P2端口,这时的值取决于外围电路,而不是原来的赋值.所以需要一个变量来解决这个问题.由你的代码看,是直流蜂鸣器,它的声音频率是无法改变的.而你也只是要改...

官渡区19463632658: 有哪位大神知道51单片机蜂鸣器响1秒的c程序怎么写? -
嵇诗开思: #include<reg51.h>#define uchar unsigned char uchar cnt; sbit fmq=P1^0; sbit key=P1^4; void t0isr() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; cnt++; if(cnt>20) { TR0=0; cnt=0; fmq=1; } } main() { TMOD=0x01; TH0=(65536-...

官渡区19463632658: 单片机 蜂鸣器 滴滴声音c程序怎么写
嵇诗开思: #include<reg52.h> sbit beep=P3^7; void delay() //延时子函数 { unsigned char x,y; for(x=50;x>0;x--) for(y=110;y>0;y--); } void main() { beep=0; while(1) { delay();//调用延时子函数 beep=~beep; } }这个是52的,看看好使不

官渡区19463632658: C51蜂鸣器报警的C语言源程序 -
嵇诗开思: 用个中断就可以,一个IO口置高电平就能实现报警

官渡区19463632658: c51单片机: 利用定时器+蜂鸣器实现定时报警功能,30秒内,每一秒响一下,30秒时间到了,蜂鸣器长鸣 求程序 -
嵇诗开思: 参考程序: #include <reg52.h>sbit Beep = P3^0; unsigned char t1s,t50ms; unsigned char flag30s = 0,flag1s = 0;void delayms(unsigned int xms) {unsigned int i,j;for(i=0; i<xms; i++)for(j=0; j<110; j++); }void Alarm(void) {Beep = 0;delayms(...

官渡区19463632658: 单片机蜂鸣器C语言编程 -
嵇诗开思: 没有研究你的程序,但是Beep=~Beep;很好理解,就是将Beep的值取反,如果Beep原来是1(响),那么将Beep的值取反后再给回它自已那不是变成0(不响)了吗.

官渡区19463632658: STC51单片机C语言开启蜂鸣器 -
嵇诗开思: 1 2 3 4 5 6 7 8 9#include<reg52.h> sbit beep=P0^4;voidmain() { beep=0;while(1); } 试试这个怎样,单片机在执行完程序之后会回到初始状态,然后再重新执行程序,所以蜂鸣器就会反复的开和关,听起来声音会小很多;加个while(1)死循环,让程序一直保持在beep=0的状态.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网