⑴ 51單片機led數碼管顯示0-99靜態程序
假設P0 P2口接數碼管 程序如下
include<reg52.h>
#define uchar unsigned char
#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;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void main(void )//主程序
{
while(1)
{
delay_ms(1000);
num++;
if(num==100)num=0;
P0=table[num/10];
P2=table[num%10];
⑵ 單片機數碼管顯示0到999c語言程序怎麼編
#include<reg51.h>
unsigned char xs_d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned int time=0,s,sz;delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
for(j=0;j<125;j++);
}INT_0()interrupt 0
{ delay(10);
if(INT0==0){sz++;<br> if(sz>2){sz=0;}
}
}
void T0_int()interrupt 1
{
TH0=(65535-50000)/256;//設置初值
TL0=(65535-50000)%256;
s++;
if(s>20){s=0;<br> if(sz==1)time++;<br> if(time>999){time=0;}
if(sz==0){time=0;//清零<br> }
(2)用單片機數碼管實現0到99擴展閱讀:
運算器由運算部件——算術邏輯單元(Arithmetic & Logical Unit,簡稱ALU)、累加器和寄存器等幾部分組成。
ALU的作用是把傳來的數據進行算術或邏輯運算,輸入來源為兩個8位數據,分別來自累加器和數據寄存器。ALU能完成對這兩個數據進行加、減、與、或、比較大小等操作,最後將結果存入累加器。
運算器有兩個功能:
(1) 執行各種算術運算。
(2) 執行各種邏輯運算,並進行邏輯測試,如零值測試或兩個值的比較。
運算器所執行全部操作都是由控制器發出的控制信號來指揮的,並且,一個算術操作產生一個運算結果,一個邏輯操作產生一個判決。
⑶ 求用51單片機接兩個數碼管,0-99動態顯示程序(用C語言)
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharDSY_CODE[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
voiddelay(uintx)
{
uchari;
while(x--)for(i=0;i<120;i++);
}
voidmain()
{
uchari;
P0=0x00;
P2=0x00;
while(1)
{
for(i=0;i<=99;i++)
{
P0=DSY_CODE[i/10];
P2=DSY_CODE[i%10];
delay(100);
}
}
}
是根據你的要求設計的,你復制進去編譯試一下,不過提示一下:你的51單片機P0口是要接上拉電阻的。
⑷ 單片機用匯編寫兩個數碼管顯示0到99循環的程序
1、新建項目,做好准備。
⑸ 求單片機0~99共陽數碼數碼管顯示用C語言編寫的程序謝謝!
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharnum,count,ge,shi;
voiddelayxms(uint);
voiddisplay(uchar,uchar);
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x98};
voidmain()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
display(shi,ge);
}
}
voidT0_time()interrupt1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
count++;
if(count==5)
{
count=0;
num++;
if(num==100)
num=0;
shi=num/10;
ge=num%10;
}
}
voiddelayxms(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddisplay(ucharshi,ucharge)
{
P2=0x02;
P0=table[ge];
delayxms(20);
P2=0x01;
P0=table[shi];
delayxms(20);
}
⑹ 用單片機控制兩個led數碼管採用靜態連接方式要求兩個數碼管顯示00-99,
程序是剛做的,沒測試過,你試試,能用再給分吧。P0口是位選,P2口段選。#includeunsignedintbittime=0;unsignedcharbitdisplay=0;unsignedcharmg=0,ms=0;unsignedcharTab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00};voidtimer0(void)interrupt1{TH0=0xF0;TL0=0x60;switch(bitdisplay){case0:P2=Tab[mg];P0=0xFE;break;case1:P2=Tab[ms];P0=0xFD;break;}bitdisplay++;bittime++;if(bitdisplay>=2)bitdisplay=0;if(bittime>=500){bittime=0;mg++;if(mg>9){mg=0;ms++;}if(ms>9)ms=0;}}voidmain(void){TMOD=0x01;TH0=0xF0;TL0=0x60;TR0=1;EA=1;while(1);}
⑺ 單片機中二位數碼管的顯示,怎樣用c語言寫一段從0到99的程序啊
大致步驟為先確定數碼管顯示數字需要單片機如何驅動(一般單片機一個I/O口控制一個小燈管正負中的一級),然後一個循環遞減應該能實現
⑻ 單片機求助,用匯編語言寫一個雙位數碼管0到99循環
給你做一個C的吧
#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,dat,cnt=0;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
if(number>1)number=0;
switch(number)
{
case 0:P2=0x02;P0=distab[dat/10];
break;
case 1:P2=0x01;P0=distab[dat%10];
break;
default:break;
}
}
void t1isr() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
cnt++;
if(cnt>=20)
{
dat++;
dat%=100;
}
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
ET1=1;
TR0=1;
ET0=1;
EA=1;
while(1);
}
⑼ C51單片機:用數碼管顯示0到999的值。求c語言程序和原理圖
#include<reg51.h>
#define uchar unsigned char
uchar temp;
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)
{
uchar i,j;
for(i=0;i<120;i++)
for(j=0;j<z;j++);
}
void scan() //要是按鍵了,掃描鍵盤編碼值
{
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() //判斷是否按鍵
{
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);
}
}
⑽ 怎樣在單片機中用C語言編寫一個2位數碼管顯示0到99。管腳接線圖如下:
//8欄位定義
//先進行宏定義,然後進行查表,輸出就OK了
unsigned int i ;
#define SEGA 0x04
#define SEGB 0x08
#define SEGC 0x10
#define SEGD 0x80
#define SEGE 0x20
#define SEGF 0x02
#define SEGG 0x01//
#define SEGDP 0x40//
#define NSEGG 0x7f//無解
#define NUM_0 SEGA + SEGB + SEGC + SEGD + SEGE + SEGF
#define NUM_1 SEGB + SEGC
#define NUM_2 SEGA + SEGB + SEGG + SEGE + SEGD
#define NUM_3 SEGA + SEGB + SEGC + SEGD + SEGG
#define NUM_4 SEGF + SEGG + SEGB + SEGC
#define NUM_5 SEGF + SEGG + SEGC + SEGD + SEGA
#define NUM_6 SEGA + SEGF + SEGE + SEGD + SEGC + SEGG
#define NUM_7 SEGA + SEGB + SEGC
#define NUM_8 SEGA + SEGB + SEGC + SEGD + SEGE + SEGF + SEGG
#define NUM_9 SEGA + SEGB + SEGC + SEGD + SEGF + SEGG
const unsigned char tNUMBER[] = {NUM_0,NUM_1,NUM_2,NUM_3,NUM_4,NUM_5,NUM_6,NUM_7,NUM_8,NUM_9};
if(i==9)
{P2 = tNUMBER[9];}
else
{P2 = 0x00;}
具體問題你也描述的不詳細,所以只能寫到這個地方了。