51单片机应用从零开始(一)-CSDN博客
51单片机应用从零开始(二)-CSDN博客
51单片机应用从零开始(三)-CSDN博客
51单片机应用从零开始(四)-CSDN博客
详解 KEIL C51 软件的使用·建立工程-CSDN博客
详解 KEIL C51 软件的使用·设置工程·编绎与连接程序-CSDN博客
前面我们通过对P3口的控制实现了流水灯的操作,下面我们来进行加减乘除运算的学习。
1. 用 P0 口、P1 口分别显示加法和减法运算结果
#include<reg51.h>
void main(void)
{ unsigned char m,n; m=43; //即十进制数 2x16+11=43 n=60; //即十进制数 3x16+12=60 P1=m+n; //P1=103=0110 0111B,结果 P1.3、P1.4、P1.7 口的灯被点亮P0=n-m; //P0=17=0001 0001B,结果 P0.0、P0.4 的灯被熄灭}
2. 用 P0、P1 口显示乘法运算结果
51单片机的P0口和P1口是用来进行输入输出的通用口,可以通过程序来进行控制。如果要使用P0和P1口来显示乘法运算结果,可以采用以下步骤:
-
定义变量:定义两个变量m和n,分别用来存储乘数和被乘数。
-
通过P0口输入数据:使用P0口进行输入操作,将乘数和被乘数分别输入到变量m和n中。
-
进行乘法运算:使用乘法指令MUL将m和n相乘,将结果存入寄存器中。
-
将乘法结果存到P1口中:使用P1口进行输出操作,将乘法结果从寄存器中读取,通过P1口输出。
下面是代码实现的具体步骤:
#include<reg51.h> //包含单片机寄存器的头文件
void main(void)
{ unsigned char m,n; unsigned int s; m=64; n=71; s=m*n; //s=64*71=4544,需要 16 位二进制数表示,高 8 位送 P1 口,低 8 位送 P0 口//由于4544=17*256+192=H3*16*16*16+H2*16*16+H1*16+H0 //两边同除以 256,可得 17+192/256=H3*16+H2+(H1*16+H0)/256 //因此,高 8 位 16 进制数 H3*16+H2 必然等于 17,即 4544除以 256 的商//低 8 位 16 进制数 H1*16+H0 必然等于 192,即 4544 除以256 的余数P1=s/256; //高 8 位送 P1 口 ,P1=17=11H=0001 0001B, P1.0 和 P1.4口灭,其余亮P0=s%256; //低 8 位送 P0 口 , P3=192=c0H=1100 0000B,P3.1,P3.6,P3.7 口灭,其余亮
}
3. 用 P1、P0 口显示除法运算结果
#include<reg51.h> //包含单片机寄存器的头文件
void main(void)
{ P1=36/5; //求整数P0=((36%5)*10)/5; //求小数while(1) ; //无限循环防止程序“跑飞”}
4. 用自增运算控制 P0 口 8 位 LED 流水花样
#include<reg51.h> //包含单片机寄存器的头文件
/******************************************************
函数功能:延时一段时间
******************************************************/
void delay(void)
{ unsigned int i; for(i=0;i<20000;i++) ;
}
/******************************************************
函数功能 :主函数
******************************************************/
void main(void)
{ unsigned char i; for(i=0;i<255;i++) //注意 i 的值不能超过 255 { P0=i; //将 i 的值送 P0 口delay(); //调用延时函数}
}
更多推荐:
时光の尘_千题千解·Java面试宝典,Linux学习,C++学习-CSDN博客