51单片机数码管显示0-99的问题 51单片机 让数码管自动显示0至9的C程序。有没有比这个更简...

C51\u5355\u7247\u673a\uff1a\u7528\u6570\u7801\u7ba1\u663e\u793a0\u5230999\u7684\u503c\u3002\u6c42c\u8bed\u8a00\u7a0b\u5e8f\u548c\u539f\u7406\u56fe


#include
#define uchar unsigned char
uchar temp;
int key1,key,disbuf;// \u6b64\u8868\u4e3a LED \u7684\u5b57\u6a21 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,0x5E,0x79,0x71};
unsigned char ledx[8];
bit s0,s1;
void delay(uchar z)
{
uchar i,j;
for(i=0;i<120;i++)
for(j=0;j<z;j++);
}
void scan() //\u8981\u662f\u6309\u952e\u4e86\uff0c\u626b\u63cf\u952e\u76d8\u7f16\u7801\u503c
{
P1=0xF0;
delay(1);
temp=P1;
switch(temp)
{
case 0xe0: key1=0;
break;
case 0xd0: key1=1;
break;
case 0xb0: key1=2;
break;
case 0x70: key1=3;
break;
}
P1=0x0f;
delay(1);
temp=P1;
switch(temp)
{
case 0x0E: key=key1+0;
break;
case 0x0D: key=key1+4;
break;
case 0x0B: key=key1+8;
break;
case 0x07: key=key1+12;
break;
default : key=-1;
}
if((key1+1)&&(key+1)) disbuf=key;
}
void ejjc() //\u5224\u65ad\u662f\u5426\u6309\u952e
{
P1=0xF0;
if(P1!=0xF0) { scan();s0=1;}
else { s0=0; s1=1;}
}
void main()
{
uchar i;
while(1)
{
ejjc();
if(s0==1 && s1==1)
{
s0=0;s1=0;
for(i=0;i<8;i++)
{ ledx[i]=ledx[i+1]; ledx[8]=disbuf; }
}
P0=0xff;
P2=LED7Code[ledx[0]];
P0=0xfe;
delay(5);
P0=0xff;
P2=LED7Code[ledx[1]];
P0=0xfd;
delay(5);
P0=0xff;
P2=LED7Code[ledx[2]];
P0=0xfb;
delay(5);
P0=0xff;
P2=LED7Code[ledx[3]];
P0=0xf7;
delay(5);
P0=0xff;
P2=LED7Code[ledx[4]];
P0=0xef;
delay(5);
P0=0xff;
P2=LED7Code[ledx[5]];
P0=0xdf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[6]];
P0=0xbf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[7]];
P0=0x7f;
delay(5);
}
}

\u53ef\u4ee5\u901a\u8fc7\u4ee3\u7801\u4f18\u5316\u7684\u65b9\u5f0f\u6765\u7b80\u5316\u4ee3\u7801\u3002
\u4e00\u3001\u8bbe\u7f6e\u5ef6\u65f6\u51fd\u6570
\u5ef6\u65f6\u51fd\u6570\u5728\u5355\u7247\u673a\u4e2d\u6709\u7740\u8ba9\u73b0\u5b9e\u5ef6\u65f6\u7684\u80fd\u529b\uff0c\u672c\u7a0b\u5e8f\u4e2d\u53ef\u4ee5\u901a\u8fc7\u91c7\u7528for\u5faa\u73af\u65b9\u5f0f\u8fdb\u884c\u5ef6\u65f6\uff0c\u5177\u4f53\u4ee3\u7801\u5982\u4e0b\uff1a
void delay\uff08\uff09
\uff5b
uinti\uff0cj\uff1b
for(i=100;i>0;i--)
for(j=1000;j>0;j--);
\uff5d
\u4e8c\u3001\u8bbe\u7f6e\u6570\u7801\u7ba1\u663e\u793a\u6570\u7ec4
\u6570\u7ec4\u5b9a\u4e49\u7b80\u5355\uff0c\u800c\u4e14\u8bbf\u95ee\u5f88\u65b9\u4fbf\u3002\u6240\u6709\u5143\u7d20\u7c7b\u578b\u76f8\u540c\uff0c\u5728\u6570\u7801\u7ba1\u663e\u793a\u7a0b\u5e8f\u4e2d\u53ef\u4ee5\u8ba9\u7a0b\u5e8f\u4ee3\u7801\u51cf\u5c11\u3002\u6570\u7ec4\u4ee3\u7801\u5982\u4e0b\uff1a
chara\uff3b10\uff3d\uff1d\uff5b0xff\uff0c0x3\uff0c0x9f\uff0c0x25\uff0c0xd\uff0c0x99\uff0c0x49\uff0c0x41\uff0c0x1f\uff0c0x1\uff0c0x9\uff5d\uff1b

\u4e09\u3001\u8bbe\u7f6e\u6570\u7801\u7ba1\u663e\u793a\u5faa\u73af
\u6570\u7801\u7ba1\u663e\u793a\u5faa\u73af\u53ef\u4ee5\u4e0d\u7528\u7f16\u5199\u4e00\u6b21\u53c8\u4e00\u6b21\u7684\u6570\u7801\u7ba1\u663e\u793a\u4ee3\u7801\uff0c\u65e2\u65b9\u4fbf\u53c8\u7b80\u6d01\u3002\u5177\u4f53\u4ee3\u7801\u5982\u4e0b\uff1a
for(int i=0;i<10;i++)
\uff5b
P0\uff1da\uff3bi\uff3d\uff1b
delay\uff08\uff09\uff1b
\uff5d
\u6269\u5c55\u8d44\u6599
\u5355\u7247\u673a\u7a0b\u5e8f\u8fdb\u884c\u7b80\u5316\u53ef\u4ee5\u67e5\u770b\u662f\u5426\u6709\u53cd\u590d\u51fa\u73b0\u7684\u4ee3\u7801\u5e8f\u5217\uff0c\u6574\u5408\u6210\u5faa\u73af\u8fdb\u884c\u66f4\u6539\u3002\u540c\u4e00\u7c7b\u578b\u4e14\u7528\u6cd5\u76f8\u540c\u7684\u53d8\u91cf\u53ef\u4ee5\u6574\u5408\u6210\u6570\u7ec4\uff0c\u65b9\u4fbf\u5bf9\u5404\u4e2a\u5185\u5bb9\u8fdb\u884c\u8bbf\u95ee\u3002\u6709\u7279\u5b9a\u529f\u80fd\u7684\u4ee3\u7801\u6bb5\u53ef\u4ee5\u5b9a\u4e49\u4e00\u4e2a\u51fd\u6570\u8fdb\u884c\u8bbf\u95ee\u3002
\u6ce8\u610f\uff1a\u7528C51\u8bed\u8a00\u7f16\u8f91\u7684\u5355\u7247\u673a\u7a0b\u5e8f\u4e0e\u666e\u901aC\u8bed\u8a00\u4e0d\u540c\uff0cC51\u8bed\u8a00\u4e2d\u7684\u6570\u636e\u7c7b\u578b\u548c\u6807\u51c6c\u4e2d\u7684\u6570\u636e\u7c7b\u578b\u4e0d\u540c\u3002

那个lalala有什么用?看程序是在P0口接一个共阳数码管。那同样在P2口再接一个数码管。这样,P0口的数码管显示十位数,P2口的数码管显示个位数。或在P2,P3口各接一个数码管。见下图。


这种接法属于静态显示电路。这个学会后,再练习动态显示电路。



  • C51鍗曠墖鏈:鐢鏁扮爜绠℃樉绀0鍒999鐨鍊笺傛眰c璇█绋嬪簭鍜屽師鐞嗗浘
    绛旓細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,0x5E,0x79,0x71};unsigned char ledx[8];bit s0,s1;void delay(uchar z...
  • 鍗曠墖鏈 鐢51鍗曠墖鏈烘樉绀涓涓鏁扮爜绠杞祦鏄剧ず9鍒0鍐嶄粠0鍒9姣忛殧涓绉鍑虹幇涓 ...
    绛旓細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 DJNZ R0,LOOP2 AJMP LOP TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DELL:MOV R7,#250;yanshi,SHIZHONG:1WEIMIAO,YUEWEI1s DEL1:MOV R6...
  • 51鍗曠墖鏈閫氳繃鍔ㄦ佹壂鎻忕殑鏂瑰紡瀹炵幇鏁扮爜绠00~99鐨璁℃暟,浣嗗湪缂栫▼鐨勬椂鍊欏嚭...
    绛旓細INC R1 CJNE R1,#10,STAR1 MOV R1,#0 JMP MAIN
  • 绉掕〃,鐢ㄥ姩鎬鏁扮爜绠℃樉绀,鑼冨洿浠0000~9999,鍙殏鍋,鍙浣嶃傝姹傜敤MC51...
    绛旓細msecond equ 51h second1 equ 52h second2 equ 53h second3 equ 54h second4 equ 55h org 00h ljmp start org 03h ljmp int_ex0 org 0bh ljmp int_t0 org 013h ljmp int_ex1 org 01bh ljmp int_t1 org 0100h start: mov tmod,#12h m...
  • 鍦ㄥ涔51鍗曠墖鏈:s1,s2,鎺у埗鍔犲噺,鍦鏁扮爜绠℃樉绀0-99鐨绋嬪簭鎬庝箞鍐...
    绛旓細ORG 0000H AJMP MAIN ORG 30H MAIN: MOV R1,#0 XUNH:LCALL DISP LCALL DELAY INC R1 CJNE R1,#100,XUNH AJMP MAIN ;鏄剧ずP1鍙e崄浣峆2鍙d釜浣嶏紝杩欐牱鍋氬氨鎬庝箞涔熶笉浼氶棯鐑佷簡鎶 DISP: MOV DPTR,#TAB ;鍏遍槾 MOV A,R1 MOV B,#10 MUL AB MOV A MOVC A,@A+DPTR MOV P1,A MOV A,B MOVC...
  • 鐢51鍗曠墖鏈璁捐3浣峫ed鏁扮爜鏄剧ず绠浣滅琛00.0-99.0姹傝璁$數璺笌c璇█绋 ...
    绛旓細} void main(void)//涓荤▼搴 { init();//鍒濆鐘舵佽瀹 while(1){ display(a/2);//鏄剧ず璁℃暟鍊硷紝浠ュ崄鍒嗕箣涓绉掍负鍗曚綅 } } void timer0(void)interrupt 1//涓柇瀛愮▼搴 { TH0=(655536-50000)/256;TL0=(655536-50000)%256;a++锛沬f锛坅==1980)a=0;//1980娆℃槸99绉 } ...
  • 51鍗曠墖鏈0∼999寰幆鏄剧ず(鏁扮爜绠)
    绛旓細include<reg51.h>#include<INTRINS.h>#define u16 unsigned int#define u8 unsigned charu8 ds[4]; //鏁扮爜绠℃樉绀缂撳瓨code u8 w[]={0x01,0x02,0x04,0x08,};//浣嶇爜code u8 d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};//鏂爜void dispaly(){//鏄剧ず鍑芥暟static ...
  • 89C51鍗曠墖鏈烘暟鐮佺,鍔ㄦ鏄剧ず0鍒199鎬庝箞鐢–璇█缂栫▼?
    绛旓細number++; number%=3; P2=0x01<<number; P0=distab[dat[number]]; cnt++; if(cnt>99) { cnt=0; nn++; nn%=200; dat[0]=nn/100; dat[1]=(nn%100)/10; dat[2]=nn%10; }}main()...
  • 鍒╃敤AT89S51鍗曠墖鏈鏉ュ埗浣滀竴涓墜鍔00-99璁℃暟鍣ㄣ
    绛旓細teble閲岀殑鍊煎氨鏄叡闃8 娈碉紙鍚皬鏁扮偣锛鏁扮爜绠$殑娈电爜銆8 娈典粠涓婇潰涓妯紑濮嬮『鏃堕拡渚濇涓篴銆乥銆乧銆乨銆乪銆乫銆乬(涓棿鐨勬í锛夊拰h锛堝皬鏁扮偣锛夛紝鍒嗗埆鎺ュ湪IO鍙g殑0~7 渚嬪瑕鏄剧ず0锛屽垯娈电爜涓0011 1111 鍗0x3f 銆傚叾瀹冿紝浣犲彲鑷鎺ㄥ嚭銆
  • 51鍗曠墖鏈led鏁扮爜绠℃樉绀0-99闈欐佺▼搴
    绛旓細//鍏遍槾鏁扮爜绠涓冩鐮 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};void Delay1ms(uint i) //1ms寤舵椂绋嬪簭 { uint j;for(;i>0;i--){ for(j=0;j<164;j++){;} } } void main(void )//涓荤▼搴 { while(1){ delay_ms(1000);num++;i...
  • 扩展阅读:51单片机数码管0到99 ... 8位数码管显示0-99 ... 定时器数码管0到99计数 ... 单片机二位数码管0-99 ... 动态数码管0到99循环 ... 0-99秒表单片机 ... 数码管依次显示0到99 ... led数码管显示数字0-9 ... 51单片机数码管如果由1-99 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网