51单片机控制8个数码管并显示1-8
数字管段连接到微控制器的P0端口,钻头连接到P2 org 0000HMAIN:致电AJMP maitisplay:mov r0 r1 ; 发送RL代码; Shift Mov P2 ,Mov R1 ,延迟呼叫CJNE R0,#8 ,循环; 评估要查看8 个周期完成retdelay:MOV R6 ,#2 5 DD:MOV R7 ,#5 0 DJNZ R7 ,$ DJNZ R6 ,DD 8 2 H,0F8 H,8 0H,9 0H,晚期9 0H用单片机汇编语言在八位数码管上显示0,就是同时显示一排0
为了在微控制器组装语言中显示8 位数字管上的数字0,您需要创建一系列准则来控制数字管所需的数据。该程序首先定义起始地址和基本程序入口,并在00h地址运行。
默认程序加载指定表的数据,并逐渐增加通过循环显示的数字。
该堆栈在程序中用于保存和还原累加器A的。
在显示数据的过程中,该程序还包括一个延迟的子例程,以确保数字管的稳定迹象。
当程序启动时,指针指向数据表的开始地址,R7 寄存器设置为1 0,表明周期为1 0次。
启动器A初始化为0。
也就是说,显示数字0。
接下来,该程序进入循环,首先调用显示子例程,然后调用延迟的子例程,增加累加器A的值,然后控制通过R7 寄存器的循环数。
在显示子例程中,冷凝器A的被复制到累加器A和堆栈中,然后从表中获得显示数据并传递到P1 端口。
最后,还原累加器A的,然后返回主要程序。
延迟的子例程反复运行DJNZ指南,并在每个循环中等待一定时间。
两个重叠的DJNZ指令用于制作稳定的数字管显示,以使其长时间延迟。
通过调整周期数和延迟时间,您可以控制数字管显示的清晰度。
数据表包含0到9 的显示数据。
每个数字对应于用于控制数字管的照明状态的特定二进制代码集。
例如,与数字0相对应的二进制代码为3 FH,这表明所有片段均已打开,因此数字管已完全显示在数字管中。
整个程序都巧妙地使用了汇编语言指南,以实现指示数字管中数字0的目标。
合理的周期和延迟控制可确保数字管显示的稳定性和清晰度。
c51 实验板 编写8个按键控制程序,按下8个键,在数码管上分别显示1-8
当编写一个使用C5 1 微控制器来控制数字管以显示8 个键的程序时,可以使用多种方法。这里提供了两个简明的代码实现。
第一种方法涉及使用密钥扫描功能来检测密钥状态并根据键值更新数字管显示。
第二种方法使用位移操作通过简化逻辑来确定钥匙值。
第一个方法的代码如下:#include#defineucharunSignedChar#defineUintunSignedInt#defineKeyKeydown1 //按下按#defineKeyPeR0 //按键弹出键#defineled_datep0 // dendect_datep0 // ucharkey_value; //键值codeucharled [] = {0xc0,0xf9 ,0xa4 ,0xB0,0x9 9 ,0x9 2 ,9 2 ,0x8 2 ,0x8 2 ,0xf8 ,0x8 0,0x9 0,}; // voidmain(void); voidkey_scan(void); voidkey_scan(){ucharkey_buff,key_date; key_date = p1 &0xff; 如果(key_date!= 0xff){if(key_state! = keydown){if(key_first == 1 ){key_buff = key_date; key_first = 0;} else {if(key_date == key_buff){key_value = 〜ke y_date; key_state = keydown;}}}}} else {key_first = 1 ; key_state = keyup;}} voidmain(){while(1 ){key_scan(); swit ch(key_value){case0x01 :{led_date = led [1 ];} break; case0x02 :{led_date = led [2 ];} break; case0x04 :{led_date = LED [3 ];}断裂; case0x08 :{led_date = led [4 ];} break; case0x1 0:{led_date = led [5 ];} break; case0x2 0:{led_date = l ED[6 ];}break;case0x4 0:{led_date=LED[7 ];}break;case0x8 0:{led_date=LED[8 ];}break;default:break;}}}The code of the second method is as follows: #include#defineucharunsignedchar#defineuintunsignedint#defineKEYDOWN1 //Press the key to #defineKEYUP0//Press 键弹出#dendeleled_datep0 // LED数据端口bitkey_first = 1 ; //首次键pre ss pre ss bitkey_state = keyup; //键状态ucharkey_value; //键值 codeucharled [] = {0xc0,0xf9 ,0xa4 ,0xB0,0x9 9 ,0x9 9 2 ,0x9 2 ,0x8 2 ,0xf8 ,0x8 0x8 0,0x9 0; // // LED片段代码常见的正极阳性管voidmain(void voidmain) an(void); voidkey_scan(){uchari,key_buff,key_date; key_date = p1 &0xff; if(key_date!= 0xff){if(key_state!= keydown){if(key_first == 1 ){key_buff = key_date; key_first = 0;} else {if(key_date == key_buff){for(i = 0; i <8 ; i <8 ; i ++ for) ){如果(! key_first = 1 ; key_state = keyup;}} voidmain(){while(1 ){key_scan(); led_date = key_value;}}} 这两种方法都有效地实现了使用8 个键控制数字管以显示数字1 至8 的功能。
第一种方法使用案例语句来确定键值一,而第二种方法使用位移操作来简化逻辑,从而使程序更加紧凑。
可以根据实际需求选择和使用这两种方法。
单片机:::8只数码管同时显示数字1—8 怎么做????。 求大神万分感谢、、
#include单片机汇编语言8只数码管显示1-8
1 用于演示数字管的程序:1 、2 、3 、4 、5 、6 、7 、8 ,以8 个LED数字管道的序列显示。参考端口:数字管数据P0,数字管控制P2 ; JMP Mainorg 000BHAJMP inttt0org 01 00HMAIN:MOV P0,#0FFH; 打开计时器0 setB tr0; COIN DIS_BUF+02 H,AMOVA,#4 MOVCA,@a+dptrmov dis_buf+03 H,Amova,#5 Movca,@a+dptrmov dis_buf+04 H,amova,#6 Mova,#6 movca,@a+dptromov dis_buf+05 h,amova,#7 movca@+dptr a,#8 m ovca,@a+dptrmov dis_buf+07 h,adisplay:mov dis_digit,#0feh; ==================================================================================================== ==================================================================================================== ===================================================================================================== ==威尔 ===================================================================================================== ==威尔 ===================================================================================================== ==威尔 ======================== r0,a; nldis_index,#0x07 ; 结尾