实战项目开发细节:C语言分离一个16进制数取出相应的位1或0
2023-09-27 14:28:47 时间
最近在公司开发一个关于钢琴的PCBA项目,项目大概是这样的,完成各种功能的测试,准备去工厂量产的时候可以通过软件快速甄别硬件是否短路,断路等问题。
其中,甄别好坏的方法是通过比如按键,或者其它的操作然后响应音频信号的输出来甄别的,那到底原理是怎么样的呢?
音频信号定制为如果是0则输出1000hz,如果是1则输出3000hz。
morixinguan ITGEGE在线教育嵌入式开发讲师。 CSDN博客专家、CSDN-Linux特邀编辑、CSDN博乐、CSDN学院讲师,目前从事嵌入式开发领域,从事与单片机,Linux,android相关的产品开发。
最近在公司开发一个关于钢琴的PCBA项目,项目大概是这样的,完成各种功能的测试,准备去工厂量产的时候可以通过软件快速甄别硬件是否短路,断路等问题。
其中,甄别好坏的方法是通过比如按键,或者其它的操作然后响应音频信号的输出来甄别的,那到底原理是怎么样的呢?
音频信号定制为如果是0则输出1000hz,如果是1则输出3000hz。
音频信号是一个16进制数,比如0xfd----- 1111 1101
那么它的输出应该是这样的,从左边最高位开始,输出3000hz ,3000hz ,3000hz, 3000hz , 3000hz , 3000hz , 1000hz , 3000hz .
如果要求改一下,从右边最低位到最高位输出也是可以的,这个具体可以通过示波器来测量相应的信号输出波形。
原理我们搞明白了,就这么简单,于是我们就可以用C语言位运算来实现这个操作,由于公司保密特权,我不方便公开我的项目的详细细节,这样,我只能写个模拟的C语言测试程序来模仿这个过程,好了,我们开始写代码:
#include stdio.h void pri() ; void pri1() ; int play_sound_lowtohigh(unsigned int num) ; int bit0o1(int it,int position) ; int play_sound_hightolow(unsigned int num) ; int main() unsigned int num = 0xfd ; //1111 1101 play_sound_lowtohigh(num); putchar(\n); play_sound_hightolow(num); return 0; //从低位往高位 int play_sound_lowtohigh(unsigned int num) int i = 0; int bit = 0 ; for(i = 1 ; i i++) bit = bit0o1(num,i); if(bit == 0) pri(); else if(bit == 1) pri1() ; //从高位往低位 int play_sound_hightolow(unsigned int num) int i = 0; int bit = 0 ; for(i = 8 ; i i--) bit = bit0o1(num,i); if(bit == 0) pri(); else if(bit == 1) pri1() ; //it 表示数据 //position 表示第几位 int bit0o1(int it,int position) int oc=1; oc =(position-1); return (oc it)!=0?1:0; void pri() printf("1000hz\n") ; void pri1() printf("3000hz\n") ; }
运行结果:
或者更简单一点:
#include stdio.h int test_bit(int num) int i ; for(i = 7 ; i = 0 ; i--) if(num (1 i)) printf ("3000hz\n") ; else printf ("1000hz\n") ; int main(void) test_bit(0xfd) ;这样也是对的。
morixinguan ITGEGE在线教育嵌入式开发讲师。 CSDN博客专家、CSDN-Linux特邀编辑、CSDN博乐、CSDN学院讲师,目前从事嵌入式开发领域,从事与单片机,Linux,android相关的产品开发。
相关文章
- 计算机等级考试二级C语言程序设计专项训练题——程序设计题(三)
- 计算机等级考试二级C语言程序设计专项训练题——素数及应用
- 计算机等级考试二级C语言上机题集(第26~30套)
- C语言程序设计100例之(28):直线蛇形阵
- C语言程序设计100例之(19):欢乐的跳
- 适合学习C语言开源项目——嵌入式脚本语言 Berry
- c++动态内存分布以及和C语言的比较
- 怒肝20天用C语言写出的排序集合
- 【C语言】编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。
- 数据结构队列顺序存储代码实现(C语言)
- C语言课程设计|通讯录管理系统(含完整代码)
- 快速排序(非递归)——C语言实现