SETBET0;开定时器0中断 SETBEA;开总中断 SETBEX0;开外总中断0中断 SETBTR0;开启定时器0 LOOP:CALLDISP;调用显示子程序 JMPLOOP;采用查询方式 ;P0口数据输出。P2.0、P2.1位码控制端 DISP:MOVA,CNT;CNT数据送入A中
int key1,key,disbuf;// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,
;做动态显示也可以,人眼是看不出闪烁的。那样会省点口线,嘿嘿反正你只有2个 数码管没别的东西,就干脆做个静态的咯。怎么也闪烁不了的
define uint unsigned int define dataport P1//P1直接驱动数码管的8个阳极 sbit wei1=P3^3;//再有三个管脚接3个三极管驱动数码管的阴极 sbit wei2=P3^4;sbit wei3=P3^5;uint a=0;//中断次数计数,一次50ms,20
define uint unsigned int uchar num=0;//共阴数码管七段码 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};void Delay1ms(uint i) //1ms延时程序 { uint j;for(;i>0
51单片机led数码管显示0-99静态程序
下面是使用AT89S51单片机控制4位一体数码管轮流显示1234的程序代码:```c include
void delay(){ uint16 i=1000;while(i--);} void main(){ uchar n ;P2=0xfe;P1=0xff;while(1){ if(k1==0){ if(n>=9) n=0;else n++;P0=shuzu[n];while(!k1);delay();while(!k1);} }
sbit key2 = P1^2; //按键2 sbit key3 = P1^3; //按键3 sbit key4 = P1^4; //按键4 sbit key5 = P1^5; //按键5 sbit key6 = P1^6;//按键6 P0=0x00; //设置P0口输出都是低电平 buzzer = 1;
没有按键按下时原值不变---*/#include//包
51单片机用一个按键,定义一个位变量,或一个8位的变量,按一下键变量为1,再按一下变量为0。然后显示时,再根据变量值来决定显示内容,变量为1,显示123456,变量为0显示321456。
51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示
LOOP1:MOV A,20H; 9-0 MOVC A,@A+DPTR MOV P0,A DEC 20H CALL DELL;YANSHI DJNZ R0,LOOP1 MOV 20H,#0;0-9 MOV R0,#10 LOOP2:MOV A,20H; 0-9 MOVC A,@A+DPTR MOV P0,A INC 20H CALL DELL;YANSHI
void t1isr() interrupt 3{TH1=(65536-10000)/256;TL1=(65536-10000)%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=~tab[le
include
采用共阴极LED数码管,51单片机P1口输出数据:ORG 0000H JMP MAIN ORG 0100H MAIN:MOV DPTR,#TAB MOV R1,#00H DISP:MOV A,R1 MOVC A,@A+DPTR MOV P1,A LCALL DELAY INC R1 CJNE R1,#0AH,DISP SJMP TAB:
delay(2000);n1++; if(n1 > 9) n1 = 0;} } 4个(任意个)共阳数码管的段选端,接在 P0,其位选,都接电源即可。
51单片机 编写4个LED数码管同时循环显示0—9的数字 的程序。
下面是使用AT89S51单片机控制4位一体数码管轮流显示1234的程序代码:```c include
在while循环中:1 选第一个数码管,关闭其他数码管,再选让第一个数码管的那些段亮;2 选第二个数码管,关闭其他数码管,再选让第二个数码管的哪些段亮;3 ,4步同理,这样让while不停循环,就可以实现动态显示了
//显示-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
include
运用51单片机实现4位8段LED数码管的动态数字显示,写出C语言程序
#include //----------------------------------------------- void delay(unsigned int i) //延时 { unsigned char j; while(i--) for(j = 0; j < 115; j++); } //----------------------------------------------- void main(void) { unsigned char n1; unsigned char code SEG[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, //0-4 0x92, 0x82, 0xf8, 0x80, 0x90};//5-9 while(1) { P0 = SEG[n1]; //P0口,外接共阳数码管的段选端 delay(2000); n1++; if(n1 > 9) n1 = 0; } } 4个(任意个)共阳数码管的段选端,接在 P0,其位选,都接电源即可。假设8个数码管公共端均接地,同时显示1-9 #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff }; void DelayMS(uint x) { uchar t; while(x--) for(t=120;t>0;t--); } void main() { uchar i=0; P0=0x00; while(1) { P0=~DSY_CODE[i]; i=(i+1)%10;/*显示0-9*/ DelayMS(200); } } 下面程序从左到右显示 #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 }; void DelayMS(uint x) { uchar i; while(x--) { for(i=200;i>0;i--); } } void main() { uchar i,k=0x80; while(1) { for(i=8;i>0;i--) { P2=0xff; k=_crol_(k,1); P0=DSY_CODE[8-i]; P2=k; DelayMS(3); } } }
/*-----------------------------------------------名称:单个共阳数码管动态显示变化数字内容:通过循环检测P1口按键输入值,然后用数码管输出,没有按键按下时原值不变------------------------------------------------*/#include//包
SBUF=dispcode[num0];//第1位 while(!TI); TI=0; led0=0; delay(2); led0=1; SBUF=dispcode[num1];//第2位 while(!TI); TI=0; led1=0; delay(2); led1=1; SBUF=dispcode[num2];//第3位 while(!TI); TI=0; led2=0; delay(2); led2=1;
兄弟,你刚学的吧,不知道你是大学生还是非大学生的,如果是大学生的话我觉得我不应该回答了,俺只是说方法,不会给什么程序的,当然并不是程序简单我就不写,不是这样的,而是你要弄清电路的工作原理,弄清程序和电路的关系,弄清的硬件,结合程序看就应该能弄清楚了。 数码的显示方式:静态和动态 静态简单,动态是用扫描技术,进行扫描的,就是显示的数据是一样的,不过利用的扫描后,就造成显示的数据不一样了,原因是显示的速度是非常快的,人的眼是分辨不出的。而你的电路采用的静态显示,那么就是数码的共极部分,当然proteus里的数码应该是共阴极的吧,而阳极是送显示的数据,这样显示的方式是静态显示 P0 P2是数码管送显示的数据,当然这两数码管一个显示个位,一个显示十位,那么你要对显示的数据进行处理一下,比如是要显示99: uint a,b; uint k=99; a=99/10;//这里只取十位而已,也就是9 b=99%10//这是求模,相当于数学里说的取余数 然后再将这a和b的数据指向一个数码管显示的代码数组[弄清数码管的显示就知道怎么写出显示代码了] 第一个是个位,先显示个位,数组的运用是利用下标控制的,我们用变量b控制下标。 第二个是十位,也是利用下标控制数组的。 当然这个变量k我们可以先不赋值,让它自增或自减从最大值一直减到最小,就是从99显示到0了, 当然你的电路有些浪费I/O口,两个数码管你把段全部连在一起不就行了,然后把共极各自连接I/O口,利用动态显示,你上图所示的,根本就是静态显示,浪费资源啊,当你在设计产品时是浪费I/O口的, 我认为应该是这样的,这样节省资源,控制也非常方便的,一点儿也不能,这个才是动态显示,利用动态扫描就搞定了,要不然会浪费资源的,俺的基础有限,再说也是自学的,也好久没弄51了,现在在做其经类型的MCU了,兄弟祝你学习有成。 注意要外接上拉电阻的,P0内部没带上拉电阻,要自己接上哦,俺没画上,你做实际产品时不要忘记了。
那个lalala有什么用?看程序是在P0口接一个共阳数码管。那同样在P2口再接一个数码管。这样,P0口的数码管显示十位数,P2口的数码管显示个位数。或在P2,P3口各接一个数码管。见下图。 这种接法属于静态显示电路。这个学会后,再练习动态显示电路。