

前面我们通过对P3口的控制实现了流水灯的操作,下面我们来进行加减乘除运算的学习。
- #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 的灯被熄灭
- }
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 口灭,其余亮
- }
- #include<reg51.h> //包含单片机寄存器的头文件
- void main(void)
- {
- P1=36/5; //求整数
- P0=((36%5)*10)/5; //求小数
- while(1)
- ; //无限循环防止程序“跑飞”
- }
- #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(); //调用延时函数
- }
- }
更多推荐:
