关于调制的c语言表达(调用c语言)话题,今日,嗨壳技术分享网小编抽出大半天的时间整理一些调制的c语言表达(调用c语言)内容,让我们一起了解一些技术吧!
本篇文章给大家谈谈调制的c语言表达,以及调用c语言对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、用单片机写一个C语言程序关于电子时钟,用键盘调制时分秒的加减 第一个键控制模式,第二个为加,第三个减
2、用C语言实现:采用中断方式,P1.0输出脉冲宽度调制(PWM)信号,即脉冲频率为2kHz,占空比为
3、怎样用c语言来实现基于lms算法的fsk调制解调系统
4、38K载波单片机软件设计 C语言 ,如何将定时器产生的38K的载波和信号调制起来
5、C语言常用词汇及函数有那些?
6、如何用C语言实现PCM编码
用单片机写一个C语言程序关于电子时钟,用键盘调制时分秒的加减 第一个键控制模式,第二个为加,第三个减
我给你一个保证好用的,KEY_COM调模式,按一下进入调时 ,在按一下调分,再按一下退出调时模式,这时加减按键都无效,在调时模式时会产生闪烁方式,这段程序是我自己想的办法实现的,可能有点笨拙,但效果很好,我建议你用DS1302做时钟,用单片机计数器由于晶振等原因会有很大的误差,实际中没有用直接用单片机做的,希望对你有帮助。
(段选和位选接的都是8位的D触发器,如果你的开发板电路结构有区别,改一下显示部分的程序就行了)
#includereg51.h
#define uchar unsigned char
sbit duan=P0^0;
sbit wei=P0^1;
sbit KEY_ADD=P3^3;
sbit KEY_DEC=P3^4;
sbit KEY_COM=P3^5;
uchar code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40, 0x00 };
char hour=0,minute=0,second=0,i=0,flag=0;
unsigned char t=0,t1=0,t2=0,t3=0;
unsigned int count=0;
void delays()//10ms延时子程序
{unsigned char i,j;
for(i=20;i0;i–)
for(j=248;j0;j–);
}
void start()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;
EA=1;
TR0=1;
}
void main()
{
start();
KEY_ADD=1;
KEY_DEC=1;
KEY_COM=1;
while(1){
if(!KEY_COM)
{
delays();
if(!KEY_COM)
{while(!KEY_COM);
flag++;if(flag==3)flag=0;
}
}
if(!KEY_ADD)
{
delays();
if(!KEY_ADD)
{
while(!KEY_ADD);
if(flag==1)
{hour++;if(hour==24)hour=0;}
if (flag==2)
{minute++;if(minute==60)minute=0;}
}
}
if(!KEY_DEC)
{
delays();
if(!KEY_DEC)
{while(!KEY_DEC);
if(flag==1)
{hour–;if(hour0)hour=23;}
if(flag==2)
{minute–;if(minute0)minute=59;}
}
}
}
}
void t0() interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
count++;
switch(i)
{case 0: {if(flag==1){t++;if(t==60)t=0; if(t30) {P1=a[hour/10];duan=1;duan=0;P1=~0x01;wei=1;wei=0;}
else {P1=0x00;duan=1;duan=0;P1=~0x01;wei=1;wei=0;} } else {P1=a[hour/10];duan=1;duan=0;P1=~0x01;wei=1;wei=0;} } break;
case 1: {if(flag==1) {t1++;if(t1==60)t1=0; if(t130) {P1=a[hour%10];duan=1;duan=0;P1=~0x02;wei=1;wei=0;}
else {P1=0x00;duan=1;duan=0;P1=~0x01;wei=1;wei=0;} } else {P1=a[hour%10];duan=1;duan=0;P1=~0x02;wei=1;wei=0;} } break;
case 2:{P1=0x40;duan=1;duan=0;P1=~0x04;wei=1;wei=0;}break;
case 3: {if(flag==2) {t2++;if(t2==60)t2=0; if(t230) {P1=a[minute/10];duan=1;duan=0;P1=~0x08;wei=1;wei=0;}
else {P1=0x00;duan=1;duan=0;P1=~0x01;wei=1;wei=0;} } else {P1=a[minute/10];duan=1;duan=0;P1=~0x08;wei=1;wei=0;} } break;
case 4: {if(flag==2) {t3++;if(t3==60)t3=0; if(t330) {P1=a[minute%10];duan=1;duan=0;P1=~0x10;wei=1;wei=0;}
else {P1=0x00;duan=1;duan=0;P1=~0x01;wei=1;wei=0;} } else {P1=a[minute%10];duan=1;duan=0;P1=~0x10;wei=1;wei=0;} } break;
case 5:{P1=0x40;duan=1;duan=0;P1=~0x20;wei=1;wei=0;}break;
case 6:{P1=a[second/10];duan=1;duan=0;P1=~0x40;wei=1;wei=0;}break;
case 7:{P1=a[second%10];duan=1;duan=0;P1=~0x80;wei=1;wei=0;}break;
}
i++;
if(i==8)i=0;
if(count==500)
{count=0;
second++;
if(second==60)
{second=0;
minute++;
if(minute==60)
{minute=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
}
用C语言实现:采用中断方式,P1.0输出脉冲宽度调制(PWM)信号,即脉冲频率为2kHz,占空比为
/*用keil3与proteus7.4联调,自己下载后开启联调设置,在proteus中画个最小单片机系统,再用单片机连接keil的编译文件.HEX即可。假设时钟频率12MHz,执行一条语句所用时间1us,2kHz为500us,即定时器频率定时500us,如果用T0,则初值为TH0=0x1f,TL0=0x40;占空比7:10,脉冲宽度350us,用T1,初值TH1=0x15,TL1=0xe0。*/
#includereg51.h
sbit OUTW=P1^0;
void init()
{
EA=1;
TMOD=0x11;
ET0=1;
ET1=1;
TR0=1;
TR1=0;
OUTFW=0;
}
void main()
{
init();
while(1);
}
void timer0 interrupt 1
{
TH0=0x1f;
TL0=0x40;
TH1=0x15;
TL1=0xe0;
OUTW=1;
TR1=1;
}
void timer1 interrupt 3
{
OUTW=0;
TR1=0;
}
//注意:调频就是在IO变量在不同的时间置1,调宽就是在不同的时间置0
怎样用c语言来实现基于lms算法的fsk调制解调系统
1.最简单的方法:
public static String reverse1(String str)
{
return new StringBuffer(str).reverse().toString();
}
2.最常用的方法:
public static String reverse3(String s)
{
char[] array = s.toCharArray();
String reverse = “”; //注意这是空串,不是null
for (int i = array.length – 1; i = 0; i–)
reverse += array[i];
return reverse;
}
3.常用方法的变形:
public static String reverse2(String s)
{
int length = s.length();
String reverse = “”; //注意这是空串,不是null
for (int i = 0; i length; i++)
reverse = s.charAt(i) + reverse;//在字符串前面连接, 而非常见的后面
return reverse;
}
4.C语言中常用的方法:
public static String reverse5(String orig)
{
char[] s = orig.toCharArray();
int n = s.length – 1;
int halfLength = n / 2;
for (int i = 0; i = halfLength; i++) {
char temp = s[i];
s[i] = s[n – i];
s[n – i] = temp;
}
return new String(s); //知道 char数组和String相互转化
}
38K载波单片机软件设计 C语言 ,如何将定时器产生的38K的载波和信号调制起来
单片机的调制一般都是数字调制,一般就是2FSK。可以有二种方法。。
第一:把待调制信数字信号和载波接到一个二输入与门上。当调制信号是一时,与门开启,载波可以发送出去。当调制信号是0时,与门关闭,载波不发送。。
第二:产生二种不同的方波(可以是引导码不同,或者载波频率不同)。。调制信号1和0分别对应其中的一种即可。。
希望能帮到你。。
再看看别人怎么说的。
C语言常用词汇及函数有那些?
常用词汇:
1、short:修饰int,短整型数据,可省略被修饰的int。
2、long:修饰int,长整型数据,可省略被修饰的int。
3、long long:修饰int,超长整型数据,可省略被修饰的int。
4、signed:修饰整型数据,有符号数据类型。
5、unsigned:修饰整型数据,无符号数据类型。
6、restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。
7、return:用在函数体中,返回特定值(如果是void类型,则不返回函数值)。
8、continue:结束当前循环,开始下一轮循环。
9、break:跳出当前循环或switch结构。
10、goto:无条件跳转语句。
11、if:条件语句,后面不需要放分号。
12、else:条件语句否定分支(与if连用)。
13、switch:开关语句(多重分支语句)。
14、case:开关语句中的分支标记,与switch连用。
15、default:开关语句中的“其他”分支,可选。
常用函数:
1、int isalpha(int ch) 若ch是字母(‘A’-‘Z’,’a’-‘z’),返回非0值,否则返回0。
2、int isalnum(int ch) 若ch是字母(‘A’-‘Z’,’a’-‘z’)或数字(‘0’-‘9’),返回非0值,否则返回0。
3、int abs(int i) 返回整型参数i的绝对值。
4、double cabs(struct complex znum) 返回复数znum的绝对值。
5、double fabs(double x) 返回双精度参数x的绝对值。
6、long labs(long n) 返回长整型参数n的绝对值。
参考资料来源:百度百科—C语言
如何用C语言实现PCM编码
PCM 脉冲编码调制是Pulse Code Modulation的缩写。脉冲编码调制是数字通信的编码方式之一。主要过程是将话音、图像等模拟信号每隔一定时间进行取样,使其离散化,同时将抽样值按分层单位四舍五入取整量化,同时将抽样值按一组二进制码来表示抽样脉冲的幅值。
模拟信号数字化必须经过三个过程,即抽样、量化和编码,以实现话音数字化的脉冲编码调制(PCM,Pulse Coding Modulation)技术。
抽样(Sampling)
抽样是把模拟信号以其信号带宽2倍以上的频率提取样值,变为在时间轴上离散的抽样信号的过程。例如,话音信号带宽被限制在0.3~3.4kHz内,用 8kHz的抽样频率(fs),就可获得能取代原来连续话音信号的抽样信号。对一个正弦信号进行抽样获得的抽样信号是一个脉冲幅度调制(PAM)信号,如下图对模拟正弦信号的抽样所示。对抽样信号进行检波和平滑滤波,即可还原出原来的模拟信号。
量化(quantizing)
抽样信号虽然是时间轴上离散的信号,但仍然是模拟信号,其样值在一定的取值范围内,可有无限多个值。显然,对无限个样值一一给出数字码组来对应是不可能的。为了实现以数字码表示样值,必须采用“四舍五入”的方法把样值分级“取整”,使一定取值范围内的样值由无限多个值变为有限个值。这一过程称为量化。
量化后的抽样信号与量化前的抽样信号相比较,当然有所失真,且不再是模拟信号。这种量化失真在接收端还原模拟信号时表现为噪声,并称为量化噪声。量化噪声的大小取决于把样值分级“取整”的方式,分的级数越多,即量化级差或间隔越小,量化噪声也越小。
编码(Coding)
量化后的抽样信号在一定的取值范围内仅有有限个可取的样值,且信号正、负幅度分布的对称性使正、负样值的个数相等,正、负向的量化级对称分布。若将有限个 量化样值的绝对值从小到大依次排列,并对应地依次赋予一个十进制数字代码(例如,赋予样值0的十进制数字代码为0),在码前以“+”、“-”号为前缀,来 区分样值的正、负,则量化后的抽样信号就转化为按抽样时序排列的一串十进制数字码流,即十进制数字信号。简单高效的数据系统是二进制码系统,因此,应将十 进制数字代码变换成二进制编码。根据十进制数字代码的总个数,可以确定所需二进制编码的位数,即字长。这种把量化的抽样信号变换成给定字长的二进制码流的 过程称为编码。
例程:
#include iostream
using namespace std;
int main()
{
const int sect = 8; //number of segement.
const int startingVol[sect+1] = {0,16,32,64,128,256,512,1024,2048};
// the starting value of every segement.
const int quanIntvl[sect] = {1,1,2,4,8,16,32,64};
//quantity interval of every Segments, 1 equeal to 1/2048.
int pcmInd = 0; //pcm code’s index.
int pcmCode[sect] = {0,0,0,0,0,0,0,0}; // 8 bit of pcm codes.
int sampleValue = 1270;
int startPoint; //starting point of the segement starting piont
//such as startingVol[startPoint] = 16 or 128 etc.
int finePoint; //the starting point of inner segement code.
int quanValue; // it’s used to store the final quantity value.
int quanError; //error caused by quantity.
//the following four variables is used in geting the segmentCode
int low = 0;
int high = sect;
int mid;
int loopInd1 = 0; //loop index to get segment code
int loopInd2 = 0; //loop index to get inner segment codes
//get the first_digit code of polarity
(sampleValue 0) ? (pcmCode[pcmInd++] = 1) : (pcmCode[pcmInd] = 0);
sampleValue = abs(sampleValue); //make sure the voltage is positive
//get the segment code using modified halve search
while(loopInd1 3) //only need 3 loops the segmentCode can be got
{
mid = (low + high)/2;
//after 3 loops, sampeValue falls in startingVol[mid] – startingVol[mid] or
//in startingVol[mid-1] – startingVol[mid]
if(sampleValue startingVol[mid])
{
pcmCode[pcmInd++] = 0;
high = mid;
startPoint = mid – 1 ;
}
else
{
pcmCode[pcmInd++] = 1;
low = mid;
startPoint = mid;
}
loopInd1++;
}//end while
//get the last four bits codes of pcm
low = 0;
high = 16; //every segment is split into 16 small segments of the same size
while(loopInd2 4)
{
mid = (low + high)/2;
//make the compare progress clear using the following two setences.
quanValue = startingVol[startPoint] + mid * quanIntvl[startPoint];
coutstartingVol[startPoint]” + “quanIntvl[startPoint]” * “mid” = “
quanValue ” ? “sampleValueendl;
//make the compare progress clear using the above two setences.
if(sampleValue startingVol[startPoint] + mid * quanIntvl[startPoint])
{
pcmCode[pcmInd++] = 0;
high = mid;
finePoint = mid -1;
}
else
{
pcmCode[pcmInd++] = 1;
low = mid;
finePoint = mid;
}
loopInd2++;
}//end while
quanValue = startingVol[startPoint] + finePoint * quanIntvl[startPoint];
quanValue += quanIntvl[startPoint] / 2; //final quantity value.
quanError = abs( sampleValue – quanValue); // error of quantity.
cout”Final quantity value is: “quanValueendl;
cout”Error of quantity is: “quanErrorendl;
cout”PCM codes are: “;
for(int i = 0; i 8; i++)
{
coutpcmCode[i]” “;
}//end for
coutendl;
return 0;
}
调制的c语言表达的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于调用c语言、调制的c语言表达的信息别忘了在本站进行查找喔。
以上是嗨壳技术分享网(www.heikehao.com)小编对“ 调制的c语言表达(调用c语言) ”的详细解答,希望能够帮助到大家。
原创文章,作者:语言我知,如若转载,请注明出处:https://www.heikehao.com/302.html