自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 A/D-D/A转换器PCF8591

PCF8591先把电阻电压转换为数字量送给单片机,单片机再把该数字量送给PCF8591,转换为模拟量从引脚AOUT输出。PCF8591具有模拟-数字转换器(ADC)和数字-模拟转换器(DAC)的功能。

2025-04-13 08:45:00 109

原创 结构体变量的设置

有两个结构体,把其中一个结构体成员的和送给另一个结构体的成员。通过结构体指针引用这两个结构体的成员。把结构体s2的成员t和u的和值21送给结构体s1的成员y。

2025-04-07 10:00:57 111

原创 冒泡法排序

也可以采用条件传送来实现,把A[i]与A[i+1]比较,较小的数送给变量min,较大的数送给变量max,然后,把min送给A[i],把max送给A[i+1],当数据较多时,采用条件传送效率更高。采用冒泡法,先比较最开始的两个元素,按照从小到大的顺序排好,然后增加第3三个元素,再把这三个元素排好顺序,就这样,不断增加元素,最终实现所有的元素按照从小到大的顺序排列。if(dat[i+1]<dat[i]) //条件成立,交换比较数的位置。

2025-03-30 11:10:22 320

原创 利用结构体求矩形面积

矩形的宽和高作为结构体s的成员,而结构体s是结构体rec1的成员,结构体rec1中还有一个指针字段存放宽度变量的地址,这样,就有不同的方法得到矩形的面积。//存放结构体变量rec2地址。//指针sp保存结构体rec1的地址。//存放变量w的地址。

2025-03-29 10:46:25 200

原创 求矩阵某列的和

设计函数sum_column( int A[E1(n)][E2(n)], int j ),E1(n)和E2(n)分别为用宏定义的行数和列数,j为列号。在该函数中,设计指针ptr=&A[0][j],通过*ptr及ptr=ptr+E2(n)访问第j列元素,从而求得第j列元素的和。在主函数中定义该矩阵,指定所求和的列号j,然后调用函数sum_column( ),返回第j列元素的和。i++) //求出第j列元素的和。i++) //矩阵赋初值。当j=3时,sumcol=21;当j=4时,sumcol=24。

2025-03-28 11:18:43 484

原创 计算向量的内积

/向量A的地址赋予指针xdat。//向量B的地址赋予指针ydat。data_t *get_vec_start(vec_ptr v) //向量的起始地址。//地址A放在结构体指针u的指针变量dat中。//地址B放在结构体指针w的指针变量dat中。char vec_length(vec_ptr v) //向量的维数。//结构指针u赋予地址。

2025-03-26 14:26:58 288

原创 求质点的质心

定义二维结构体数组grid[2][2],存放4个质点的x坐标和y坐标。以步长为1的引用模式求得所有质点x坐标的和,以及y坐标的和。利用右移操作求得质心的x坐标和y坐标。//若total_y<0, 加偏置量。//若total_x<0, 加偏置量。

2025-03-25 10:32:22 406

原创 三维数组求和

对该数组求和时,按照存储顺序访问就能得到一个很好的步长为1的引用模式和良好的空间局部性,从而提高计算效率。这些元素在存储器中的存放顺序是:a[0][0][0]、a[0][0][1]、a[0][1][0]、a[0][1][1]、sum+= a[i][j][k];//sum有良好的时间局部性。#define R 2 //深度为2。#define M 4 //有4行。#define N 3 //有3列。三维数组a[4][3][2],总共有。

2025-03-22 10:15:45 319

原创 数组合并排序

情形1:当i1<n且i2<m时,A[i1]与B[i2]较小者赋予C[i3],发生传送数组的索引加1,再选A[i1]与B[i2]较小者赋予C[i3],直到条件不再满足(i1<n且i2<m不再成立)。两个有序数组A(长度为n)和B度为(长度为m),要合并为一个更大的有序数组C(长度为m+n)。让i1索引数组A,让i2索引数组B,让i3索引数组C,三个索引号初值均为0。情形2:若i1<n,把A[i1]赋予C[i3],直到i1不再小于n。情形3:若i2<n,把B[i1]赋予C[i3],直到i1不再小于m。

2025-03-20 16:57:25 179

原创 一般矩阵的转置

矩阵B,采用优化方法实现,对A矩阵,采用行指针*Arow访问同一行不同列元素,对矩阵B,采用列指针*Bptr访问相同列不同行元素。

2025-03-18 10:09:33 199

原创 矩阵的转置

的矩阵,使用两个指针变量,可以方便实现(i,j)处元素与(j,i)处元素交换位置。令指针Arow=&A[i][0],则Arow[j]可实现对第i行j列元素的访问。令指针Bptr=&A[0][i],则*Bptr就可以访问(0,i)处元素,然后,令Bptr+=M,就可访问同列不同行的元素。i++) //把A矩阵元素存储在B矩阵中。

2025-03-15 14:34:05 290

原创 加法运算强制类型转换

运行结果 x=-1,y=-128,t1=t2=-129。char时,和会溢出,当强制转换为int时,和不会溢出。运行结果 x=120,y=121,t1=t2=241。char时,和会溢出,当强制转换为int时,和不会溢出。// 若t1与t2相等,返回t1或t2。//若t1与t2不相等,返回0。//加数x强制转换为int。//和强制转换为int。

2025-03-14 15:45:20 159

原创 联合中存储平方差

某联合中有两个结构体,一个结构体存放两个变量的值,另一个结构体中存放它们的平方差。//平方差存放在结构体t1的变量s中。//联合my_union申请的长度。//结构体t1申请的长度。在任何给定时间只能存储其成员之一的值,所以只需要足够的空间来存储最大的那个成员。(联合)是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。的大小并不是其所有成员大小的总和,而是其最大成员的大小。联合申请的长度是结构体t1和结构体t2中需要的连续空间最大的。

2025-03-12 17:06:21 275

原创 类型转换规则

字符型变量转换为长整型变量,进行符号位扩展;长整型变为整型,截掉高一半,数据大小可能发生变化;无符号长整型变为无符号整型,也是截掉高一半,数据大小可能发生变化。unsigned cvt_ulu(unsigned long x) //无符号长整型变量变为无符号整型变量实现函数。int cvt_li(long x) //长整型变量变为整型变量实现函数。long cvt_cl(char x) //字符型变量变为长整型变量实现函数。

2025-03-11 10:50:29 242

原创 74LS148实现优先权管理

GS引脚接单片机INT0,当有中断请求时,查询优先权最高的中断源的编号A2A1A0,并把编号在数码管上显示。然后,当P3.2引脚变为高电平,所有的中断请求都服务完毕,查询结束。图1 74LS148引脚图。//取反屏蔽高5位,获得中断源序号。74LS148是优先权编码器,其引脚图如图1所示,真值表如表1所示。P0 = 0x40;//标志位为1有中断。0. 74LS148简介。2. 电路图如图2所示。

2025-03-09 19:29:02 507

原创 PWM信号调速直流电机

PWM信号的周期是1ms,占空比变化率5%,每3s更新1次占空比。if(PWM_COUNT==20) //当前周期结束。//占空比更新时间3s。//初始占空比50%PWM_COUNT=0;* 工作方式2,每50微秒中断一次,PWM周期为1ms。main( ) //主函数。/*占空比变化率1/20=5%*/* 定时器0初始化子函数。* 中断服务子函数。

2025-03-07 17:56:27 231

原创 以实例解析汇编语言和高级语言

在高级语言中,许多目标计算机的指令和寄存器是不能访问的,有些特性也是无法利用的。用于系统编程的语言,如C语言,则同时具有高级语言和汇编语言的特点,它使用高级语言的语法,但是又能使用只有汇编语言才能使用的特性。汇编语言和高级语言的另一个重要的区别:汇编语言只能运行在指令系统相同的系列计算机上,而高级语言程序可以运行在各种不同的计算机上。单片机控制8个发光二极管(LED),P0口做输出口,控制 从LED1到LED8依次点亮,每次点亮一个LED,如此循环。//循环左移1位,点亮下一个LED。

2025-03-03 15:55:59 389

原创 IEEE浮点表示解析

当s=0,e=255,即exp是8个1,而frac是23个0时,就表示正无穷;当s=1,e=255,即exp是8个1,而frac是23个0时,就表示负无穷。当该正整数的二进制表示为1后面跟24位,且最右边位为1,其余位均为0时,该数就不能被准确表示。e=255,即exp是8个1,而frac不全为0时,就表示NaN,指不是一个数。当exp=0时,是非规格化表示。,二进制表示为1.frac,1常常被舍掉。符号位s为0,表示这个数是正数,为1,表示这个数是负数。对于非规格化表示,E=1-Bias。

2025-03-03 11:24:22 262

原创 线反转法实现矩形键盘按键识别

由于行、列线为多键共用,各按键彼此将相互发 生影响,必须将行、列线信号配合起来并作适当的处 理,才能确定闭合键的位置。第1步:列线输出为全低电平,则行线中电平由高变低 的所在行为按键所在行。第2步:行线输出为全低电平,则列线中电平由高变低 所在列为按键所在列。综合上述两步,可确定闭合按键所在行和列。

2025-03-01 21:40:30 572

原创 由浮点数位级表示求十进制表示

由单精度浮点数的位级表示求其十进制表示。

2025-03-01 14:25:12 350

原创 二进制小数向偶数舍入

编程思路:把整数部分和小数部分以无符号数分开保存,按照偶数舍入规则进行处理,得到舍入后的整数部分和小数部分。要计算舍入前小数的十进制值,方法类似。向偶数舍入,也称为向最接近的值舍入。当给定值是中间值,向上舍入和向下舍入的接近程度相同时,将数字向上或者向下舍入,使得结果的最低有效位数字是偶数,对于二进制数,就是0。要求保留到小数点后一位,采用偶数舍入规则实现。//y1保存纯小数部分。//x1保存整数部分。//y保存纯小数部分。

2025-02-28 10:53:47 472

原创 2的x次幂的单精度浮点数位级表示

单精度浮点数表示,bias=127,e=E+127。当e=0时,E=1-bias=-126。尾数部分23位,能表示的最小数是。//x与-149的差值就是1左移位数。else if(p[i]<-126) //非规格化表示。就表示为非规格化数。由e=0,知E=-126。为整数),表示为单精度浮点数时,需要分情况进行考虑。当e=255,尾数部分为0时,即x>127时,此时,e的最大值是254,=254-127=127。因此,当x<(-126-23)时,当e=0,尾数部分不为0时,

2025-02-27 09:13:16 515

原创 整数浮点型的位级表示

一个整数x,表示为单精度浮点数。分别确定符号s(1位),阶码字段exp(8位),小数字段frac(23位)。然后,把这三部分组合起来。组合时,从左至右依次为:符号s、阶码字段exp和小数字段frac。s=(j<<31);//x<0,符号位为1。while(1) //确定最左边1的位置。/*x左移补(23-i+1)个0后,其余位都清0*/表示为二进制数时,最高位1不超过第23位,所以。当x=3510593时,运行结果。

2025-02-26 11:08:42 513

原创 二进制小数精度引发的问题

若0.1的单位是秒,时间累积100小时,某飞行器的速度是2000m/s。距离的偏差=2000。

2025-02-25 09:52:44 164

原创 十进制整数转换为十六进制数

就是转换后16进制位的低位。重复该过程,就能依次得到剩余的3个16进制位。然后,把这4个16进制位移到适当的位置。最后,把这4个16进制位按照顺序组合起来。/*d[3]、d[2]和d[1]分别左移12位、8位和4位*//*高2位组合在d[2]中,低2位组合在d[0]中*//*数组d放4个16进制位,低位在前,高位在后*/运行结果 r=0xCFC7=-12345。基本思路:主要考虑整型数。

2025-02-24 11:02:35 348

原创 存储器扩展

由该种芯片构造的存储器(只进行字数扩展),起始地址为20000H,末地址为8BFFFH。总共需要多少个地址?//以10进制形式显示单元数量。//以10进制形式显示芯片数量。=onechip) //当。芯片(组)数=地址数/(8K)=54。,片内地址线需要13根。地址数=末地址-起始地址+1=,可求出需要的片选地址线6根。

2025-02-23 10:07:45 395

原创 使用掩码实现字节替换

/掩码的第i字节处为0,其余字节处为0xff。的第0、1、2和3字节内容,其余位置内容不变,得到4个新的无符号长整型数。使用掩码能方便实现。//变量yy的第i字节处为0xAB,其余字节为0。x=x&umask;//x的第i字节处为0,其余字节内容不变。yy=(u32)b;//把字节变量b扩展为无符号长整型。umask=0xff;//掩码的低字节为0xff;程序执行后,数组result的元素依次为。,给定字节数据b,用其分别替换。对一个无符号长整型数。

2025-02-22 11:38:01 442

原创 从位级表示考察乘积的截断

表示为无符号数时,分别为x和y;表示为带符号数时,分别为。可以证明这两个式子是相等的。位后,无符号乘积和补码乘积的低。

2025-02-21 19:11:16 163

原创 用左移操作实现整型数相乘

整数n作为一个乘数,若能表示为若干2的k次幂的加减形式时,就可将另一整型乘数x左移k位,然后对左移操作结果进行加减运算,实现。从而能提高运算速度。

2025-02-21 12:53:47 251

原创 用算术右移操作实现整型数的除法

整数除法总是舍入到0。结果与x算术右移k位的结果相等。强制转换位浮点型,直接用除法得到结果比较,就是把小数部分舍掉了。一个带符号整型数x(二进制表示为w位),除以。,然后算术右移k位,才能实现向0舍入。

2025-02-20 17:46:06 446

原创 整数相乘的溢出

两个整数相乘,乘积的位数和乘数的位数相同时就可能发生溢出。两个字符型(char)数据相乘,要不发生溢出,乘积需要定义为整型(int)。当乘积也定义为字符型时,就可能溢出。这时,相当于把乘积的高字节截去,只保留低字节。比如char型变量x和y,乘积也为char型时,就有。方法2 用int型定义保存乘积的变量q,x和y相乘后,q与强制转换为char型的q值比较,相等时说明没有溢出发生。方法1 对于函数tmult_ok1(char x,char y),当x为0或者。程序执行后,mul1和mul2的值相等;

2025-02-20 11:43:22 240

原创 位运算符实现对数据特定内容的处理

result1=0x0095=95, result2=0xff95=-107,高字节FFH是符号扩展。//x的高字节不变,低字节每位都变为1。int fun1(unsigned int w) //返回低8位的无符号值。//x的高字节清零,低字节不变。//z1为x与y的异或。//x的高字节每位取反,低字节不变。//x与y相等z3为1,x与y不等z3为0。“^”运算符:一个二进制位和1异或能取反,一个二进制位和0异或保持不变。//z1为x与y的异或。

2025-02-19 18:49:00 204

原创 无符号整数和带符号整数的相互转换

无符号整数和带符号整数的相互转换,实质上就是类型的强制转换。无符号字符数x转换为带符号字符数时,当。带符号字符数y转换为无符号字符数时,当。/**无符号数转换为带符号数**//**带符号数转换为无符号数**/时,转换后仍然为x;时,转换后仍然为y。

2025-02-18 18:49:27 508

原创 无符号类型错误

对于函数strlen(),因为调用strlen(s)会得到unsigned int值,两个unsigned int值做差就不可能得到负数,当s串比t串短的时候,也会返回1。对于函数sum_elements(),若把局部变量i定义为unsigned int,则数组a[]就会越界,计算结果错误。当把一个变量定义i为无符号类型时,若i的初值为0,则执行i-1后,得到的结果就是大于0的数,而不是-1.当把两个变量x和y定义为无符号类型时,若0<x<y,则x-y的结果也是一个大于0的数,而不是一个负数。

2025-02-18 12:14:13 302

原创 强制类型转换

函数show_int(long int x,unsigned char C[])通过调用函数show_bytes()实现把常整型数据转换为无符号字节数据存储在数组中;函数show_float(float x,unsigned char D[])通过调用函数show_bytes()实现把浮点型数据转换为无符号字节数据存储在数组中;数组D[]={0x61, 0x62, 0x63, 0x64, 0x65, 0x66}。程序执行后,数组A[]={ 0x0, 0x35, 0x91, 0x41 };

2025-02-17 11:13:36 374

原创 求矩阵对角线元素的最大值

求主对角线元素的最大值时,让指针指向A[N-1][N-1],指针以(N+1)为单位递增,就可以指向对角线每个元素;求副对角线元素的最大值时,让指针指向A[0][N-1],指针以(N-1)为单位递增,就可以指向副对角线每个元素。int seek_pdiagmax_opt(fix_matrix A) //求主对角线元素最大值。int seek_sdiagmax_opt(fix_matrix A) //求副对角线元素最大值。

2025-02-16 17:15:11 504

原创 嵌套调用实现数组元素逆序存放

主函数调用reverse_array(int ptr[],int cnt)函数,该函数在调用inplace_swap(int *x,int *y)函数时,把两个不同的地址送给inplace_swap(int *x,int *y)函数,实现这两个位置处元素的交换。然后,*x= *x^*y执行后,*x=a^(a^b)=b,*y=a^b.最后,*y= *x^*y执行后,*x=b,*y=b^(a^b)=a.则*y= *x^*y执行后,*x=a,*y=a^b.两个不同位置处的数实现交换。令*x=a,*y=b。

2025-02-15 21:33:14 165

原创 十进制数到十六进制数的转换

n为大于等于0的整数。i取值为0、1和2。综合i和j,若i为0,则该16进制数为1后面加j个0;若i为1,则该16进制数为2后面加j个0;若i为1,则该16进制数为4后面加j个0;若i为1,则该16进制数为8后面加j个0。switch(i) //由i的值,给Fun1()函数传递不同的参数求得y。//根据n=i+4*j,求i和j。=1) //2的n次幂为x,求n。void main() //10进制数转化为16进制数。程序运行后,y=0x8000。十进制数x,若能表示为。

2025-02-14 18:01:31 218

原创 用二维数组设置矩阵元素并求最大值元素的位置

程序用二维数组A[5][5]定义5×5矩阵,用for循环给矩阵赋初值。调用函数max_matrixelement(fix_matrix B,struct composition p)后,得矩阵A的最大值为8,位置为(5,5)。调用函数fix_set_diag(fix_matrix A,int val)后,i++) //给矩阵A赋初值。/***查找矩阵A的最大元素值,并确定其所在行和列*//***用val设置矩阵A对角线元素***/

2025-02-13 11:21:55 449

原创 用二维数组对矩阵求和

int sum_element(i,j) //确定。定义二维数组,就方便求得矩阵。矩阵(i,j)位置的元素。

2025-02-12 20:34:31 135

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除