解码部分实质是一个循环移位运算,当330Hz解调电路输出有效且600Hz解调电路输出为低时,证明接到的声波信号代表数字1,故将进位标志位C置1后,再进行带C的左移运算,使结果中对应位为1;相反当接到信号代表数字0时,将C清零再进行左移操作。如此经过8次移位运算以后,就得到一个命令代码。
解码完成后,需要判定所接到信号是否为有效命令。如果是,则执行相关命令;不是,则返回进行下一轮有效上升沿判断。
单片机上电复位后,先进行初始化操作,其主要包括各通用IO口输入输出方向的定义,定时器定时时间设定等。初始化完成后,单片机就开始循环检测PD5和PD6管脚上是否出现有效的上升沿。在解调频电路没有接到有效信号时,两输出Freq1和Freq2电平为低,当接到某一频率信号时,对应的解调电路会输出高电平。如果检测到PD5和PD6某一引脚上的电平变高,而另一引脚上保持低电平时,延时20ms左右的一段时间再进行检测,如果结果不变,证明接到有效的上升沿,就可以开始解码了。
图片是主程序流程图
其实是按照流程图完成编程,文字是对解码过程的解释
###C语言程序高手请回答!!!
(1)include<stdio.h> main(){ int i,n,s;printf("input n:");scanf("%d",&n);for(i=1,s=1;i<=n;i++)s*=i;printf("%d",s);} \/\/注意这个程序求阶乘只适合比较小的数,因为int数据范围的关系表示不了太大的数。(2)include<stdio.h> int *function(int a[50],int n){ in...
用C语言写一段程序,高手快来哦!
define RANGE 15 int get_min_id(int * x, int range){ int i = 0, j = 0, m = 99999999L;for(i = 0; i < range; i++) { if (x[i] < m) { m = x[i];j = i;} } return j;} void sort(int x[RANGE]){ int i = 0, j = 0, r = 0, t = 0; int *...
电脑C语言编程,求高手帮忙
1.include<stdio.h> void main(){ int n[8],maxn=0,minn=0,detn;float score[8],max,min,aver=0.0,det,detm;printf("输入裁判号及分数:\\n");scanf("%d%f",&n[0],&score[0]);max=min=score[0];for(int i=1;i<8;i++){ scanf("%d%f",&n[i],&score[i]);if(max<...
编程高手请进!(C语言)
1.include <stdio.h> include<stdlib.h> include<ctype.h> main(){ int count;\/*猜数字的次数*\/ int number;\/*系统产生的随机数字*\/ int guess;\/*程序员输入数字*\/ char yes='Y';clrscr();printf("\\nNow let us play the game.\\n Guess the number:");while (toupper(yes)=='Y'...
请问一下,C语言高手!可不可以帮我编写一个C 程序,输入A、B、C3个值...
include <stdio.h> void main(){ int a,b,c;printf("请分别输入三个数:\\n");scanf("%d%d%d",&a,&b,&c);if(a<b) a=b; \/\/永远认为a是最大的 if(a<c) a=c;printf("ABC中最大数为:%d\\n",a);} 更简单的:include <stdio.h> void main(){ int a,b,c;printf("请分别...
c语言编程问题,求高手解答(高分)
你的程序没有大的问题,可以执行,只是以下几个小问题:一、第一行包含的文件不存在,这一行应该删除。二、定义了argc、argv两个变量没有使用,编译会有警告,可以删除他们或者不管,最好改为:int main()三、scanf输入n和k的时候,中间有个逗号分隔,这样输入的时候会麻烦,最好改为:scanf("%d%d...
请C语言高手帮忙解释一下这个程序的每句话!!!
int c;do 循环,{ clrscr(); 清屏幕 c=choice(); 运行子函数choice,结果给c switch(c) 根据c的值,分别执行各个功能 { case 0:printf("\\nWelcome to this program!");break;打印欢迎信息 case 1:m=Input(stu);break; 1到6,调用各个子函数 case 2:add(stu);break;case...
c语言,本人菜鸟,高手来
\/ 除 表达式\/表达式 左到右 双目运算符 乘 表达式*表达式 双目运算符 左到右 余数(取模) 整型表达式\/整型表达式 双目运算符 左到右 + 加 表达式+表达式 左到右 先算(),x+a%3*(int)(x+y)%2\/4 = x+a%3*7%2\/4 先算除,x+a%3*7%2\/...
求C语言程序,高手请进...
\/*1.输入一个以回车结束的字符串(少于80个字符),将其中的大写字母用下面列出的对应大写字母替换,其余字符不变,输出替换后的字符串 原字母 对应字母 A Z B Y C X D W X C Y B Z A*\/ \/*#include <stdio.h> void main(){ char str[80];char a;int i=0;s...
c语言高手请进来!
int i=-1;printf("%d,%o\\n",i,i)上面那大哥说的差不多了,只是%d是表示10进制的,%o是表示8进制的,关于在内存中怎么存贮转化你可以参考下清华大学出版社的 计算机基础,。大一的学生用的。8进制的177777转化成10进制并不是-1,这和在内存中的存储有关系,具体说太复杂了,你去自己看下吧。