'====================================================
' 程序:3x3矩阵运算测试版
' 功能:实现两个3x3矩阵的加法、乘法运算并显示结果
'本程序由deekseep生成~~~~
'====================================================
' 单片机配置文件
$regfile = "m16def.dat" ' 设置晶振频率为8MHz
$crystal = 8000000 ' 设置串口波特率为9600
$baud = 9600
' 定义3x3矩阵变量(索引从1开始)
Dim MatrixA(3 , 3) As Single ' 矩阵A
Dim MatrixB(3 , 3) As Single ' 矩阵B
Dim MatrixResult(3 , 3) As Single ' 结果矩阵
' 定义循环计数器
Dim I As Byte , J As Byte , K As Byte
' 定义临时变量用于计算
Dim Temp As Single
Dim Temp1 As Single
Dim Temp2 As Single
' 预设测试矩阵数据
' 矩阵A:1-9的连续数字
MatrixA(1,1) = 1 : MatrixA(1,2) = 2 : MatrixA(1,3) = 3
MatrixA(2,1) = 4 : MatrixA(2,2) = 5 : MatrixA(2,3) = 6
MatrixA(3,1) = 7 : MatrixA(3,2) = 8 : MatrixA(3,3) = 9
' 矩阵B:9-1的递减数字
MatrixB(1,1) = 9 : MatrixB(1,2) = 8 : MatrixB(1,3) = 7
MatrixB(2,1) = 6 : MatrixB(2,2) = 5 : MatrixB(2,3) = 4
MatrixB(3,1) = 3 : MatrixB(3,2) = 2 : MatrixB(3,3) = 1
' 主程序开始
Main:
' 显示矩阵A
Print "矩阵A:"
Gosub Print_matrixa '调用打印矩阵A的子程序
wait 2
Print
' 显示矩阵B
Print "矩阵B:"
Gosub Print_matrixb ''调用打印矩阵B的子程序
wait 2
Print
' 计算并显示矩阵加法结果
Print "加法结果(A+B):"
Gosub Matrix_add ' 调用矩阵加法运算子程序
Gosub Print_result ' 调用打印结果矩阵的子程序
wait 2
Print
' 计算并显示矩阵乘法结果
Print "乘法结果(A*B):"
Gosub Matrix_mul ' 调用矩阵乘法运算子程序
Gosub Print_result ' 调用打印结果矩阵的子程序
' 程序结束
End
' 打印矩阵A的子程序
Print_matrixa:
' 外层循环遍历行
For I = 1 To 3
' 内层循环遍历列
For J = 1 To 3
' 打印当前元素并加空格
Print MatrixA(i , J) ; " ";
waitms 200
Next J
' 换行到下一行
Print
Next I
Return
' 打印矩阵B的子程序
Print_matrixb:
For I = 1 To 3
For J = 1 To 3
Print MatrixB(i , J) ; " ";
waitms 200
Next J
Print
Next I
Return
' 打印结果矩阵的子程序
Print_result:
For I = 1 To 3
For J = 1 To 3
Print MatrixResult(i , J) ; " "; '打印当前果矩阵元素并加空格
waitms 300
Next J
Print
Next I
Return
' 矩阵加法运算子程序
Matrix_add:
For I = 1 To 3 ' 遍历行
For J = 1 To 3 ' 遍历列
' 对应位置元素相加
MatrixResult(i , J) = MatrixA(i , J) + MatrixB(i , J)
Next J
Next I
Return
' 矩阵乘法运算子程序
Matrix_mul:
For I = 1 To 3 ' 遍历结果矩阵的行
For J = 1 To 3 ' 遍历结果矩阵的列
Temp = 0 ' 初始化累加器
' 矩阵乘法:A的第i行与B的第j列点乘
For K = 1 To 3 ' 遍历公共维度
Temp1 = MatrixA(i , K) ' 单步计算:先取矩阵A第i行第K列的值
Temp2 = MatrixB(k , J) ' 再取矩阵B第K行第j列的值
Temp1 = Temp1 * Temp2 ' 然后相乘得到单个乘积
Temp = Temp + Temp1 ' 最后累加到临时变量
Next K
MatrixResult(i , J) = Temp ' 将计算结果存入结果矩阵
Next J
Next I
Return
'(
程序功能说明:
这是一个用于ATmega16单片机的3x3矩阵运算程序,主要功能包括:
1. 矩阵定义:预定义了两个3x3测试矩阵(MatrixA和MatrixB)
2. 矩阵显示:可以打印显示原始矩阵和计算结果
3. 矩阵加法:实现两个矩阵的对应元素相加
4. 矩阵乘法:实现标准的矩阵乘法运算
5. 程序通过串口输出结果,便于调试和验证矩阵运算的正确性。
')
|