51单片机带六位数码管显现数
这是我测量信号和相位频率的程序的一部分。到数字门 0; uchardatadis_buf [8 ]; // 8 位显示的值是ucharnx [4 ] = {0x00.0x00.0x00.0x00}; ucharns [4 ] = {0x00.0x00.0x00}; ,0x00.0x00,0x00}; floatna = 5 6 5 4 6 4 ; //频率测量的量Na/floatnb = 6 5 ; //频率测量NB/Floatf的量,JF = 0; //计算频率/floatx,jx = 0; //计算阶段/floatfs = 6 000000; //时钟频率/sbitclr = p2 ^7 ; // clear/sbitkey1 = p1 ^0; //相测量/ sbitkey2 = p1 ^1 ; //频率测量/sbitled1 = p1 ^2 ; //相测量指标/sbitled2 = p1 ^3 ; //频率测量指标/sbitsel0 = p1 ^5 ; sbitsel1 = p1 ^6 ; sbitsel2 = p1 ^7 ; sbitju = p1 ^4 ; Voodisplay(void); //显示程序/voodreaddata(void); //阅读程序/voidzhuanh(ulintsf); //数据转换程序/voidfrequ(void); //频率程序/voidfrase(void); //阶段程序Vooddelay(Uchars); //延迟程序/voidke yb(void); voidmain()// main program/{ie = 0x00; p1 = 0x1 3 ; 而(1 ){display(); keyb(); display();}} voidfrequ()//频率测量的计算// {ulintk; if(na!= 0){f = fs/(2 *(na+nb)); if(f> = 1 0000){dp = 0;
jf = fs/(2 *(na +nb));
} elseif(f> = 1 000){dp = 1 ;
jf = fs/(2 *(na+nb))*1 0;
} elseif(f> = 1 00){dp = 2 ;
jf = fs/(2 *(na+nb))*1 00;
} elseif(f> = 1 0){dp = 3 ;
jf = fs/(2 *(na +nb))*1 000;
} else {dp = 4 ;
jf = fs/(2 *(na+nb))*1 0000;
}} else {f = 0;
dp = 1 ;
} k = jf; Zhuanh(K); 展示 (); keyb();} voidfrase()//相测量和计算/{ulinth; floatjjx = na/(2 *(na+nb)); if(nb!= 0){x = jjx*3 6 0; 如果(x> = = = 1 0000){dp = 0;
jx = jx;
} elseif(x> = 1 000){dp = 1 ;
JX = JJX*3 6 0*1 0;
} elseif(x> = 1 00){dp = 2 ;
/> JX = JJX*3 6 0*1 00;
} elseif(x> = 1 0){dp = 3 ;
JX = JJX*3 6 0*1 000;
} elseif(x> = 1 ){dp = 4 ;
JX = JJX*3 6 0*1 0000;
} if(ju == 0)//引导滞后突然 sfna加1 8 0度/jx = jx+1 8 000;} else {jx = 1 8 000; dp = 2 ;} h = jx; Zhuanh(H); 展示 (); keyb();} viodzhuanh(ulintsf)//处理数据转换/{inti = 0; intj = 4 ; Ulintf; uchardatadeal_data [5 ]; for(f = sf; f> = 1 0;){deal_data [i] = f%1 0;
f = f/1 0;
i ++;
} deal_data [i] = f; i ++; for(; i <5 ; i ++){deal_data [i] = 0;} i = 4 ; j = 5 ; 而(j){j-;
dis_buf [5 -i] = deal_data [i];
i--;
} // while(j)// {j--;
// dis_buf [j] = 0;
//} dis_buf [5 -dp] = dis_buf [5 -dp] | 0x1 0;} //延迟程序// vooddelay(uchars){ucharl; for(l = 0; l <= s; l ++);} //显示program/vioddisplay(void){inti = 0; intj = 5 ; inta = 2 ; if(ju == 0)dis_buf [0] = 0x0a; elsedis_buf [0] = 0xff; for(j = 0; j <6 ; j ++){p2 = a; p0 = dis_buf [j]; a ++; 延迟(1 00);} /// subprogram/viodreaddata(void){unsignededlongdatam [2 ] = {0x0000000000.0x0000000}; SEL0 = 0; sel1 = 0; SEL2 = 0; nx [0] = din; sel0 = 1 ; nx [1 ] = din; sel1 = 1 ; nx [3 ] = din; SEL0 = 0; nx [2 ] = din; SEL0 = 0; sel1 = 0; SEL2 = 1 ; NS [0] = DIN; sel0 = 1 ; NS [1 ] = DIN; sel1 = 1 ; NS [3 ] = DIN; SEL0 = 0; NS [2 ] = DIN; m [0] = m [0] | NX [0]; m [0] = m [0]<< 8 ; m [0] = m [0] | NX [1 ]; m [0] = m [0] << 8 ; m [0] = m [0] | NX [2 ]; m [0] = m [0] << 8 ; m [0] = m [0] | NX [3 ]; M [1 ] = M [1 ] | NS [0]; m [1 ] = m [1 ] << 8 ; m [1 ] = m [1 ] = m [1 ] | NS [1 ]; m [1 ] = m [1 ] << 8 ; M [1 ] = M [1 ] | NS [2 ]; m [1 ] = m [1 ] << 8 ; M [1 ] = M [1 ] | NS [3 ]; Na = M [0]; nb = m [1 ];} voidkeyb(void)//键盘/{bits =! (key1 && key2 ); br // clr = 0; //打开cpld/
} elseif(key2 == 0){// delay1 ms(1 0);/clr = 0; //打开cpld/clr = 1 ; LED1 = 0; LED2 = 1 ; // readdata(); frase(); //相位尺寸/}}} // delay t = m*(nt+t)/voidlay1 (ucharm,ucharn){for(m = 2 5 5 ; m> 0; m-)for(n = 2 5 5 ; n> 0; n> 0 ;
51单片机如何用汇编语言让4个共阴数码管同时显示1234 P3口是片选 P0是段选
编程5 1 微控制器时,使用汇编语言实现四个频繁的负数字管以同时显示数字1 2 3 4 是一个有趣的实验。在实验中,P3 连接用作芯片选择信号,而P0端口负责段选择,即数字管的照明状态的控制。
为了实现此功能,您可以使用Proteus软件对其进行仿真。
在Proteus中,创建一个具有四个负阴性数字管的四合一模型,并将其连接到5 1 微控制器的P0和P3 连接。
在特定的配置中,P3 连接的每个引脚都连接到四个数字管的芯片选择笔,而P0连接的笔与数字管的段选择信号相对应。
接下来,编写一个汇编程序以实现显示功能。
该程序最初将数据1 2 3 4 发送到四个数字管的显示缓冲区中。
通过在循环中切换数字管的芯片选择信号,每个数字管道都会彼此显示相应的数字。
同时,还相应地更新了端口P0的输出数据,以确保显示正确的段选择状态。
在Proteus仿真过程中,可以通过观察数字管的显示来检查程序的正确性。
如果数字管依次显示1 2 3 4 ,则意味着该程序已成功实现了四个频繁的负数字管的同步显示功能。
整个实验不仅可以加深对5 1 个微控制器和汇编语言的理解,而且还可以锻炼编程和调试功能。
通过实际操作,我们可以更好地控制嵌入式系统中数字管显示技术的使用。
编写程序时,您必须注意数字管的驾驶方法和显示代码的编写。
对于频繁的负数字管,通常有必要将段选择信号设置高,以照明相应的段,而芯片选择信号用于选择要显示的数字管。
在程序中,可以通过足够的逻辑评估和循环结构来实现数字管的同步显示。
简而言之,使用5 1 个微控制器和组装讨论来实现四个频繁的负数字管中的1 2 3 4 个同步显示,这是一个实用且有趣的实验项目。
这种做法可以改善硬件和软件的全面应用功能,这是嵌入式系统未来开发的扎实基础。
用51单片机,怎么让数码管显示一串矩阵键盘按下的键代表的数(0~f)?
此显示方法类似于通过在手机上拨打键来显示数字的过程。按下第一个键时,该数字将显示在最右边的数字管上。
当您继续按键时,显示的数字将向左移动并依次显示。
如果您使用的是6 位数字管,则最多可以显示6 位数字。
如果您超过6 位数字,则在左侧显示的数字将被新数字替换。
特定的实现步骤如下:1 首先,数字管需要连接到5 1 微控制器的I/O端口。
通常,数字管的段选择线和位选择线分别连接到微控制器的不同引脚。
2 初始化微控制器的I/O端口并将其设置为输出模式。
此步骤是确保数字管正确显示数字。
3 编写一个程序来读取矩阵键盘的键值。
矩阵键盘由多个行和列组成,并通过扫描行和列中的更改来检测键。
4 将密钥值转换为相应的数字。
例如,按下“ 1 ”键时,相应的数字0x01 存储在变量中。
5 在数字管上显示数字。
通过控制数字管的段线选择,相应的片段被点亮并显示数字。
6 为了实现数字的滚动显示,需要一个循环变量来记录当前显示的数字位置。
每当按下键时,都会更新循环变量,以将显示的数字逐一移动到左侧。
7 每次按键后,检查当前显示的位置是否超过数字管的最大显示位数。
如果是这样,则删除了最左边的数字,显示了一个新数字。
通过上述步骤,可以实现使用5 1 个微控制器和数字管以显示由矩阵键盘按下的键表示的数字(0〜f)的功能。
该方法不仅简单易懂,而且在各种数字管和键盘配置中也很好地工作。
应当指出的是,特定的实现细节可能会根据硬件配置和软件环境而有所不同。
因此,在实际开发过程中,可能有必要根据特定情况调整代码。
51单片机控制8个数码管并显示1-8
数字管段的符号连接到微控制器的P0端口,并且位选择信号连接到P2 门。该程序从0000H地址开始执行,首先调用显示功能,然后等待新的显示。
在显示功能中,首先删除R1 和R1 寄存器,将R1 设置为位选择信号的初始值,然后定义表(表)以存储数字管段代码。
该程序插入一个周期,并通过增加R0的值选择几个数字管段代码。
将R0发送到寄存器A,然后通过A+DPTR在表中的相应位置中指示段代码,然后将其发送到白色的P0门,然后将A发送到端口P0以查看段代码。
然后调用子-Delay子例程,并将R1 中的值发送到寄存器作为位选择信号,并通过RLA指令执行移动。
位选择信号。
再次致电-Delay子例程。
检查R0是否已经通过CJNE教育进行了8 次。
延迟的subroutin主要是通过法令仪表实现的,以确保数字管的稳定显示。
表中的值分别对应于数字管的视图0至9 该程序通过循环和延迟实现数字管道的动态显示,可用于查看1 到8 的数字。
通过调整数据和表格中的延迟时间,可以查看多个数字和符号,适用于多样性显示控制应用程序。
51单片机用4个按键,每个按键被按下都会使数码管显示一个数值
5 管道视图4 ; 按下停止按钮后,数字管道熄灭。。