本人菜鸟,做课程设计,要求89C51单片机实现4位7段数码管动态和静态显示,希望大神能给写个程序,谢谢了
/**************** Out Display*/ #Includes51单片机0到9动态显示程序
动态显示与数字管连接方法密切相关,并且显示代码还根据连接方法更改。您可以通过以下步骤单独测试并执行一个简单的周期。
循环代码为0x01 ,0x02 ,0x04 ,0x08 ,0x1 0,0x2 0,0x4 0,0x4 0,0x8 0,并找到一个位a,b,c,d,d,f,g,数字管的dp,对应于每个数据的数字管。
然后,求解这些数据,您可以从0到9 中获得数字视图代码。
在特定操作期间,首先可以将数字管段的代码线分别连接到微控制器的相应引脚。
然后编写一个简单的循环程序,阐明数字管上A,B,C,C,E,F,G,DP的片段,观察数字管中显示的数字并记录相应段的代码。
例如,当段A打开时,数字管视图0和当前段代码现在已记录。
继续循环,照亮B段,在数字管中查看1 ,记录相应的片段代码等。
通过此测试,可以逐渐确定与每个片段代码相对应的数字。
例如,您可能会发现,当0x01 打开时,数字管打开时,0x02 打开时,0x04 打开时,依此类推。
通过在表中订购这些数据,可以从0到9 处获得完整的数字视图代码。
应注意的是,不同的数字管道可能会请求不同的段代码设置,因此测试和注册过程非常重要。
确保测试每个片段代码以避免丢失任何数字。
拥有正确的显示代码后,您可以编写一个程序,以允许数字管查看所需的数字。
在测试过程中,您可以使用示波器观察数字管段代码线的电压变化,以帮助您仔细判断每个片段代码的相应数字。
此外,还可以在微控制器开发卡上使用LED灯或数字管进行初步测试,以确保代码正确,然后连接实际的数字管道。
这样,您可以轻松地为MicroController 5 1 编写动态显示程序,以获取从0到9 的动态视图。
此过程不仅可以帮助您了解数字管道的工作方式,而且还可以提高您的编程技能。
c51 实验板 编写8个按键控制程序,按下8个键,在数码管上分别显示1-8
当编写使用C5 1 微控制器控制数字管以显示8 个键的数字的程序时,可以使用多种方法。这里给出了两个简洁的代码工具。
第一种方法涉及使用密钥轴功能来检测密钥状态并根据密钥值更新数字管显示。
第二种方法使用位移操作通过简化逻辑来确定钥匙值。
第一个方法的代码如下:#inconfer #defineucharunsignedchardchar #defineuinthunsignedintint#dendeykeydown1 //按键按键按#dendekeyup0 //按下键弹出键#define_datep0 // ucharkey_value; //密钥值codeucharled [] = {0xc0.0xf9 .0xa4 .0xb0.0x9 9 .0x9 2 .0x9 2 .0x8 2 .0xf8 ,0x8 0.0x9 0,}; // LED - 段代码通用阳性管voidmain(void); voidkey_scan(void); voidkey_scan(){ucharkey_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;}其他{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 ];} break; 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;标准:break;}}}}第二种方法的代码如下:#include#defineucharunSign符号定义密钥方案的键,以定义#defineucharunSign defineucharunSign第二种方法的代码,如下所示:#dendekeyup0 // pre st pre st pre st pre st pre st pre st the键键键键bitkey_state pertkey_state = keyup; //密钥状态ucharkey_value; //密钥值codeucharled [] = {0xc0.0xf9 .0xa4 .0xb0.0x9 9 .0x9 2 .0x8 2 .0x8 2 .0xf8 .0x8 0.0x9 0,}; // LED段代码常见阳性管voidmain(void); voidkey_sc en(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 ++){if(!(key_date >> i)&0x01 ))){break;}} key_value = key_value = led = led [i+1 ];; key_state = keydown;}}}} else {key_first = 1 ; key_state = keyup;}} voidmain(){while(1 ){key_scan(); LED_DATE = KEY_VALUE;}}两种方法有效地实现了使用8 个键控制数字管以查看数字1 到8 的功能。
第一个方法使用案例顺序一个逐一确定钥匙值,而第二种方法则使用位移操作简化逻辑,从而使程序变得更加紧密。
可以根据实际需求选择和使用这两种方法。
51单片机数码管滚动显示
#include“ 0-9 ”,“汤姆”#defenestunumleng1 4 //学生编号长度,添加了2 个空间,添加了ucharstunum [stunumleng] = {1 0,2 ,2 ,0,1 ,1 ,1 ,1 ,0,2 ,0,0,7 ,7 ,7 ,7 ,7 ,1 0,您不建议您添加空白。
如果您不了解计时器,没关系。
{uinti; ucharj;对于(i = 0; i