51单片机编写4个LED数码管同时循环显示0—9的数字的程序。芝士回答void t1isr()interrupt 3/显示{ TH1=0xec;TL1=0x78;P2=1< < p=""><> P0=~ledtab[tiao];scanled+;scanled%4;}单片机如何同时控制四位数码管
void t0isr() interrupt 1 { TH0=(65536-5000)/256;TL0=(65536-5000)%256;switch(num){ case 0:P2=0x01;break;case 1:P2=0x02;break;case 2:P2=0x04;break;case 3:P2=0x08;break;default:break;} P0=~
sbit w3=P2^4;uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };void delay_nms(uint z) //延时子 { uint x,y;for(x=z;x>0;
可以用proteus仿真来实现,用四位一体的共阴数码管。仿真图和显示效果如下图。汇编程序
AJMP MAIN ORG 30H MAIN: LCALL DISP MOV 00H,#1 MOV 01H,#2 MOV 02H,#3 MOV 03H,#4 AJMP MAIN DISP: MOV A,00H ACALL SEG7 MOV P1,A MOV P0,#01H ACALL DLY MOV A,01H ACALL SEG7 MOV P1,A M
delay(500);displayDigit(4);delay(500);} }
for(d = 0;d<20;d++){
AT89C51单片机怎么用汇编语言让4个数码管同时显示1234?
SPBM DATA 60H ;堆栈指针初值 ;程序开始 ORG 0000H LJMP MAIN ORG 0100H;程序从0100H单元开始存放 MAIN:MOV SP,#SPBM;给堆栈指针赋初值 MOV DBUF0, #1; 要显示内容 MOV DBUF1, #2 MOV
define SEG_EnP1//数码管位驱动接口 define SEG_AllOff(SEG_En&=0xf0)//关闭所有数码管(位驱动)define DisTimeAt1msCount4//单'位'数码管显示时间,数码管刷新频率f=1/(N×t),其中 N为数码管位数, t为单'位'数
char [4]={0xf9,0xa4,0xb0,ox66};//输出1.2,3,4 相应 的字符值,共阳 极 while(){ for( i=0;i<4;i++) // 动态显示就是不停的循环逐个显 示 { selcet(i); //选择第i 个 灯来显示,output(ch
//满意请采纳//这是一个四位数码管动态显示c语言程序,每隔一秒加一,直至加到9999为止//使用时需采用锁存器#include
四位一体共阳级数码管动态显示c语言编程
uchar led[]={0,4,1,2};void t0isr() interrupt 1 { TH0=(65536-5000)/256;TL0=(65536-5000)%256;switch(num){ case 0:P2=0x01;break;case 1:P2=0x02;break;case 2:P2=0x04;break;case 3:P2=0x08;
//显示-123 for(c = 0;c<20;c++){ P2 = 0x08;P0 = 0xbf;delay(10);for(j = 0;j<3;j++){ P2 = _cror_(P2,1);P0 = table[j];delay(10);} } //显示1234 2345 3456 4567 for(k = 0;k<4;
main(){ for (;;){ z=js(z);i=js(i);P0=0;P1=0xff-(0x01<
define uint unsigned int uchar count;uint disnum;sbit dula=P2^6;sbit wela=P2^7;uchar code tabledu[]={//段码表 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0
uchar number,nn=0;uchar dat[]={2,0,1,2,1,1,4,5,8,2};void t0isr() interrupt 1 { TH0=(65536-5000)/256;TL0=(65536-5000)%256;number++;number%=4;switch(number){ case 0:P2=0x08;P0=distab[nn
//关第一位显示 p2=tab[2];p3_1=0;//开第二位显示 for(i=0;i<200:i++);p3_1=1;这个程序就是让两个数码管分别显示1和2,注意程序开头包含头文件regx52.h,如果是包含reg52.h编译不了的
运用51单片机实现4位8段LED数码管的动态数字显示,写出C语言程序
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;延时1s,要精确延时可以稍微调一下数值 DELAY:MOV R2,#25 DEL1: MOV R3,#100 DEL2: MOV R4,#200 DEL3: DJNZ R4,DJNZ R3,DEL2 DJNZ R2,DEL1 RET
sbit wei2=P2^1;sbit wei3=P2^2;sbit wei4=P2^3;uchar code dulatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数字编码0-9 uchar code welatab[]={0xf7,0xfb,0xfd,0xfe};//
/这是定时器方式写的,0~9999每秒加1 include
define Time 1//一个周期1ms define TubeNumber 6//数码管个数 define KeyLine 4//矩阵按键行数 define KeyColumn 4//矩阵按键列数 //数码管真值表 uchar code LED_Number[]={0x0C,0xF9,0xA4,0xB0,0x99,0x92,
/***数显秒表,范围0~9999***/ /***源程序默认硬件环境:52单片机,12MHz晶振,4位共阳数码管,P0 口段选,P10~P13 高电平位选(NPN三极管驱动),P13为最高位数码管***/ include"reg52.h"//包含52头文件 define TRUE
用4个动态数码管显示,实现0~9999计数功能,延时为1s,用c语言。
3.4.1 步骤一:PROTEUS电路设计,单片机控制四位共阴极数码管动态扫描显示的原理图如图5-17所示。图5-17 四位共阴极数码管动态扫描显示的原理图 1、选取元器件 ①单片机:AT89C52 ②带公共端的排阻:RESPACK-8 ③四位
1、定义两个存放在FLASH里面的数组,分别保存数码管的段码、位码。如:unsigned char code Code_Data[10]={ 0x3f,,,0x00};// 里面我就不写了 2、写一个动态显示数码管的函数,用数组data_buf[4]来保存要显示的数。
define led_num 4 //数码管位数 /*引脚定义*/ define led_d P0 //定义数码管段选GPIO sbit led_w0=P3^2; //位选1 sbit led_w1=P3^3; //位选2 sbit led_w2=P3^4; //位选3 n sbit led_w3=P3
以一位的7段数码管为例,如图1所示,一位的数码管加上小数点一共是8个需要控制的发光管,分别是a、b、c、d、e、f、g、dp,由8个引脚分别控制他们的亮灭,也就是说一个引脚控制一个发光管,那么这就是段选。发光
【项目8-任务10-小组13】利用四位数码管实现动态扫描显示
电脑键盘常见故障维修与维护方法大全 由于整个机械式键盘是安装在一整块印刷板电路上的,要取下一个按键,特别是里层的按键,操作比较麻烦的事。 键盘在使用过程中,若按某键失效或反应迟钝,此时即使用力敲打键盘也无济于事,所以必须及时进行修理。 下面介绍一下拆御顺序及方法: 一、键盘常见故障维修 键盘在使用过程中,故障的表现形式是多种多样的,原因也是多方面的。有接触不良故障,有按键本身的机械故障,还有逻辑电路故障、虚焊、假焊、脱焊和金属孔氧化等故障.维修时要根据不同的故障现象进行分析判断,找出产生故障原因,进行相应的修理。 1、某些字符不能输入。若只有某一个键字符不能输入,则可能是该按键失效或焊点虚焊。检查时,按照上面叙述的方法打开键盘,用万用表电阻档测量接点的通断状态。若键按下时始终不导通,则说明按键簧片疲劳或接触不良,需要修理或更换;若键按下时接点通断正常,说明可能是因虚焊、脱焊或金屑孔氧化所致,可沿着印刷线路逐段测量,找出故障进行重焊;若因金属孔氧化而失效,可将氧化层清洗干净,然后重新焊牢;若金属孔完全脱落而造成断路时,可另加焊引线进行连接。 2、键盘上一些键,如空格键、回车键不起作用,有时,需按无数次才输入—个或两个字符,有的键,如光标键按下后不再起来,屏幕上光标连续移动,此时键盘其它字符不能输入,需再按一次才能弹起来。 这种故障为键盘的“卡键”故障,不仅仅是使用很久的旧键盘,有个别没用多久的新键盘上,键盘的卡键故障也有时发生。出现键盘的卡键现象主要由以下两个原因造成的:一种原因就是键帽下面的插柱位置偏移,使得键帽按下后与键体外壳卡住不能弹起而造成了卡键,此原因多发生在新键盘或使用不久的键盘上。 另一个原因就是按键长久使用后,复位弹簧弹性变得很差,弹片与按杆摩擦力变大,不能使按键弹起而造成卡键,此种原因多发生在长久使用的键盘上。当键盘出现卡键故障时,可将键帽拨下,然后按动按杆。若按杆弹不起来或乏力,则是由第二种原因造成的,否则为第一种原因所致。 若是由于键帽与键体外壳卡住的原因造成“卡键”故障,则可在键帽与键体之间放一个垫片,该垫片可用稍硬一些的塑料(如废弃的软磁盘外套)做成,其大小等于或略大于键体尺寸,并且在按杆通过的位置开一个可使铵杆自由通过的方孔,将其套在按杆上后,插上键帽;用此垫片阻止键帽与键体卡住,即可修复故障按键;若是由于弹簧疲劳,弹片阻力变大的原因造成卡键故障,这时可特键体打开,稍微拉伸复位弹簧使其恢复弹性;取下弹片将键体恢复。通过取下弹片,减少按杆弹起的阻力,从而使故障按键得到了恢复。 3、若有多个既不在同一列,也不在同一行的按键都不能输入,则可能是列线或行线某处断路,或者可能是逻辑门电路产生故障。这时可用100MHz的高频示波器进行检测,找出故障器件虚焊点,然后进行修复。 4、键盘输入与屏幕显示的字符不一致。此种故障可能是由于电路板上产生短路现象造成的,其表现是按这一键却显示为同一列的其他字符,此时可用万用表或示波器进行测量,确定故障点后进行修复。 5、按下一个键产生一串多种字符,或按键时字符乱跳,这种现象是由逻辑电路故障造成的。先选中某一列字符,若是不含回车键的某行某列,有可能产生多个其他字符现象;若是含回车键的一列,将会产生字符乱跳且不能最后进入系统的现象,用示波器检查逻辑电路芯片,找出故障芯片后更换同型号的新芯片,排除故障 二、键盘的拆卸与基本维护: 1、翻转键盘,将原来卡住的底板用锣丝刀往左右方向敲击。拆下键盘外壳,取出整个键盘,将键帽拔出。 2、用电烙铁将按键的焊角从印刷电路板上焊掉,使开关和印刷电路板脱离(电铬铁应有良好的接地,以防将键盘逻辑器件击穿)。 3、用镊子将按键两边的定位片向中间靠拢,轻轻从下面一顶,按键便能从定位铁中取出. 4、取下键杆,拿下弹簧和簧片,用无水酒精或四氯化碳等清洗液将链杆、键帽、弹簧和簧片上的灰尘和污垢清除干净,用风扇吹干或放通风处风干。 5、若簧片产生裂纹或已断裂,则应予以更换;若簧片完好,而弹力不足时,可将其折弯部位再轻轻折弯一些,以便增强对接触簧片的压力。 6、装好簧片、弹簧和键杆,将按键插入原位置,使焊角插入焊孔并露出尖端部分,用电烙铁将其与焊孔焊牢,装上键帽即可。 2012-7-19 16:48:03vdeatguamkj2805860736k楔ǒ力k楔ǒ力iㄎst‘擐uo洄z榨lm绰数码管显示 4位数码管从0显示到9999,然后再从0到9999计数,并且在显示完一次后,以-**-形式显示计数次数你既然用共阳数码管,那位码就应该是1有效,可是你的程序却是0有效。所以,显示子程序有问题。 更重要的问题出在主程序,主程序没有while(1)语句,肯定是错误的。主程序问题太多了,自己看吧。还有那两个计数i和b,计数到9999的要用整型的,才能计到9999,而你有char型的,最大才是255。 再看一下你的仿真图中的数码管,确定是共阳的吗。看下图中的4位一体的数码管元件的名称是什么,与你用的一样吗? 仿真图和修改后的显示子程序和主程序如下,其余部分没有修改的没有贴上来。特别 要对照一下仿真图。 void disp4bit(unsigned char d1,d2,d3,d4) //4个数字d1,d2,d3,d4依次点亮10毫秒 { P2=0x08; //位码是1有效 P0=f[d1];//个位 delay10ms(); P2=0x04; //位码是1有效 P0=f[d2];//十位 delay10ms(); P2=0x02; //位码是1有效 P0=f[d3];//百位 delay10ms(); P2=0x01; //位码是1有效 P0=f[d4];//千位 delay10ms(); } void main (void) // 主函数 { unsigned char j,d[4]; unsigned int i,b; //必须是整型,才能有最大数9999 while(1) { for(i=9999;i>0;i--) { b=i; for(j=0;j<4;j++) { d[j]=b%10; //先取个位,最后取千位 b=b/10; } for(j=0;j<15;j++) { disp4bit(d[0],d[1],d[2],d[3]); //注意实参的顺序 } } } }
#include unsigned char code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; unsigned char code bit_table[]={0xfe,0xfd,0xfb,0xf7}; void delay(unsigned int x) { unsigned char i; while(x--)for(i=0;i<120;i++); } void main(void) { unsigned char i; while(1) { for(i=0;i<4;i++) { P1=bit_table[i]; P2=table[i]; delay(100); } } }
你既然用共阳数码管,那位码就应该是1有效,可是你的程序却是0有效。所以,显示子程序有问题。 更重要的问题出在主程序,主程序没有while(1)语句,肯定是错误的。主程序问题太多了,自己看吧。还有那两个计数i和b,计数到9999的要用整型的,才能计到9999,而你有char型的,最大才是255。 再看一下你的仿真图中的数码管,确定是共阳的吗。看下图中的4位一体的数码管元件的名称是什么,与你用的一样吗? 仿真图和修改后的显示子程序和主程序如下,其余部分没有修改的没有贴上来。特别 要对照一下仿真图。 void disp4bit(unsigned char d1,d2,d3,d4) //4个数字d1,d2,d3,d4依次点亮10毫秒 { P2=0x08; //位码是1有效 P0=f[d1];//个位 delay10ms(); P2=0x04; //位码是1有效 P0=f[d2];//十位 delay10ms(); P2=0x02; //位码是1有效 P0=f[d3];//百位 delay10ms(); P2=0x01; //位码是1有效 P0=f[d4];//千位 delay10ms(); } void main (void) // 主函数 { unsigned char j,d[4]; unsigned int i,b; //必须是整型,才能有最大数9999 while(1) { for(i=9999;i>0;i--) { b=i; for(j=0;j<4;j++) { d[j]=b%10; //先取个位,最后取千位 b=b/10; } for(j=0;j<15;j++) { disp4bit(d[0],d[1],d[2],d[3]); //注意实参的顺序 } } } }
ORG 0000H ; 附仿真图 仿真通过 MOV 31H,#0aH MOV 32H,#0bH MOV 33H,#0cH MOV 34H,#0dH ACALL D0 JMP $-2 D0: MOV R0,#31H MOV R2,#11111110B MOV DPTR,#TAB D1: MOV R3, #250 DJNZ R3, $ ORL P3,#00001111B MOV A,@R0 MOVC A,@A+DPTR MOV P1, A D2: MOV A, R2 MOV P3, A RL A MOV R2,A INC R0 JB ACC.4,D1 RET TAB: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H DB 40H END
可以用proteus仿真来实现,用四位一体的共阴数码管。仿真图和显示效果如下图。 汇编程序