对这个代码加注释#include <reg52.h> #define SMG1 P0 typedef unsigned int u16; typedef unsigned char u8; sbit w1=P2^2; sbit w2=P2^3; sbit w3=P2^4; sbit dj=P1^0; sbit s1=P3^1; sbit s2=P3^0; u8 MUN_0_F[8]={0x06,0x6d,0x00,0x00, 0x00,0x00,0x00,0x00}; void delay(u8 x) { u16 i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void main() { dj=0; while(1) { if(s1==0) { delay(10); if(s1==0) dj=0; while(!s1); } if(s2==0) { delay(10); if(s2==0) dj=1; while(!s2); } } } void Delay10us(u16 m) { m=m*2; while(--m); } void xianshi(void) { u8 n=0; for(n=0;n<8;n++) { switch (n) { case 7:w1 = 0; w2 = 0; w3 = 0;break; case 6:w1 = 1; w2 = 0; w3 = 0;break; case 5:w1 = 0; w2 = 1; w3 = 0;break; case 4:w1 = 1; w2 = 1; w3 = 0;break; case 3:w1 = 0; w2 = 0; w3 = 1;break; case 2:w1 = 1; w2 = 0; w3 = 1;break; case 1:w1 = 0; w2 = 1; w3 = 1;break; case 0:w1 = 1; w2 = 1; w3 = 1;break; } SMG1=MUN_0_F[n]; Delay10us(100); SMG1=0x00; } }
时间: 2023-08-04 22:09:27 浏览: 121
这段代码是使用51单片机来控制数码管显示数字。以下是代码的详细注释:
1. 引入头文件 reg52.h,该头文件包含了51单片机的一些常用寄存器和操作函数。
2. 定义宏 SMG1 为 P0,即数码管的控制端口。
3. 定义两个无符号整型变量 u16 和 u8,分别用于存储 16 位和 8 位无符号整数。
4. 使用 sbit 定义单个 IO 口,其中 w1、w2、w3 分别对应数码管的三个位选端口,dj 对应控制数码管显示的电平输入端口,s1、s2 分别对应两个按键输入端口。
5. 定义一个字符型数组 MUN_0_F,用于存储数字 0~7 在数码管中的显示方式。
6. 定义一个延时函数 delay,用于精确控制程序延时。
7. 主函数 main 中,先将 dj 置为 0,然后进行无限循环。
8. 在循环中,如果检测到按键 s1 被按下,则进行 10ms 的延时,并再次检测 s1 是否被按下,如果是,则将 dj 置为 0,并等待 s1 松开。
9. 如果检测到按键 s2 被按下,则进行 10ms 的延时,并再次检测 s2 是否被按下,如果是,则将 dj 置为 1,并等待 s2 松开。
10. 定义延时函数 Delay10us,用于精确控制程序延时,其中 m 表示需要延时的时间。
11. 定义函数 xianshi,用于控制数码管的显示。
12. 在函数 xianshi 中,定义 n 为字符型变量,用于控制显示的数字。
13. 在 for 循环中,依次对位选端口进行赋值,控制数码管显示数字。
14. 使用 switch 语句,根据不同的数字选择相应的位选端口控制方式。
15. 将 MUN_0_F 数组中的数据存入 SMG1 中,即将数字显示在数码管上。
16. 延时 100us。
17. 将 SMG1 置为 0,即关闭数码管的显示。
阅读全文