『壹』 運用51單片機實現4位8段LED數碼管的動態數字顯示,寫出C語言程序
動態顯示的是有固定格式的,賦值,開顯示,延時,關顯示,假設p0口接數據顯示位,p2口低4位接片選,
p2=tab[1];
//賦值
p3_0=0;
//開第一位顯示
for(i=0;i<200:i++);//延時
p3_0=1;
//關第一位顯示
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語言程序
#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,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];
break;
case 1:P2=0x04;P0=distab[nn+1];
break;
case 2:P2=0x02;P0=distab[nn+2];
break;
case 3:P2=0x01;P0=distab[nn+3];
break;
default:break;
}
nn++;
nn%=7;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
『叄』 51單片機c語言設計,按鍵控制數碼管,依次按下顯示0到9循環
假設你的是共陽極數碼管,P0接數碼。按鍵接P2^0;
#include<reg52.h>
typedef unsinged int uint;
sbit key=P2^0;
unsigned char tab[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void denay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--)
}
void main()
{
uchar a;
while(1)
{
P0=tab[a];
if (key1==0)
{delay(10);
if(key==0)
{
while(!key1);
a++;
if(a==10) a=0;
}
}
}
『肆』 51單片機c語言版,編寫程序:單片機控制八位LED數碼管顯示20220204間隔兩秒後顯示2022
摘要 顯示程序和硬體關聯,如驅動方式、位數等,所以沒有統一的程序,假定動態顯示,大概思路如下:
『伍』 51單片機c語言設計,按鍵控制數碼管,依次按下顯示0到9循環
#include<reg51.h>
sbitk1=P1^0;
#define uint16 unsigned int
#define uchar unsigned char
uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
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);
}
}
}
(5)51單片機數碼管c語言擴展閱讀:
51單片機的功能特性
1,可以模擬63K程序空間,接近64K 的16位地址空間;
2,可以模擬64Kxdata 空間,全部64K 的16位地址空間;
3,可以真實模擬全部32 條IO腳;
4,完全兼容keilC51 UV2 調試環境,可以通過UV2 環境進行單步,斷點, 全速等操作;
5,可以使用C51語言或者ASM匯編語言進行調試 ;
6,可以非常方便地進行所有變數觀察,包括滑鼠取值觀察,即滑鼠放在某 變數上就會立即顯示出它此的值;
7,可選 使用用戶晶振,支持0-40MHZ晶振頻率;
8,片上帶有768位元組的xdata,您可以在模擬時選 使用他們,進行xdata 的模擬;
9,可以模擬雙DPTR 指針;
10,可以模擬去除ALE 信號輸出. ;
11,自適應300-38400bps 的所有波特率通訊;
12,體積非常細小,非常方便插入到用戶板中.插入時緊貼用戶板,沒有連接電纜,這樣可以有效地減少運行中的干擾,避免模擬時出現莫名其妙的故障;
13,模擬插針採用優質鍍金插針,可以有效地防止日久生銹,選擇優質園腳IC插座,保護模擬插針,同時不會損壞目標板上的插座. ;
14,模擬時監控和用戶代碼分離,不可能產生不能模擬的軟故障;
15,RS-232介面不計成本採用MAX202集成電路,串列通訊穩定可靠,絕非一般三極體的簡易電路可比。
『陸』 51單片機的共陰數碼管怎麼顯示數字(c語言)知道
共陰極數碼管也就是說,當控制信號為1時該段LED點亮,8段數碼管的數字0~9定義為:
3FH,06H,5BH,4FH,66H
;01234
6DH,7DH,07H,7FH,6fh
;56789
以下為簡易8路搶答器的常式:
#include<reg51.h>
#define
uchar
unsigned
char
uchar
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbit
rstkey=P2^2;
sbit
speaker=P2^0;
void
delay()//延時約400毫秒
{
uchar
i,j;
for(i=0;i<200;i++)
for(j=0;j<250;j++);
}
main()
{
uchar
i,key;
P2=0xff;
while(1)
{
i=0;
P1=table[i];
while(1)
{
key=P3;
if(key!=0)break;
}
switch(key)
{
case
0x01:i=1;break;
case
0x02:i=2;break;
case
0x04:i=3;break;
case
0x08:i=4;break;
case
0x10:i=5;break;
case
0x20:i=6;break;
case
0x40:i=7;break;
case
0x80:i=8;break;
default:break;
}
P1=table[i];//顯示按下搶答器的號
P0=key;//顯示按下鍵號的LED
while(1)
{
if(rstkey==0)break;//主持人按下復位鍵則重新開始
speaker=~speaker;//否則蜂鳴器報警
delay();
}
}
}
『柒』 51單片機數碼管6秒倒計時c語言
#include <reg51.h>
#define KEY (P1&0x7)
#define SEG P2
#define WEI P3
typedef unsigned char uint8;
uint8 sec,min,ct,flag1,flag2;
uint8 code dis[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
// 0 1 2 3 4 5 6 7
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0~F的段碼
// 8 9 A B C D E F
uint8 dis_buf[4];
bit keyp = 0;
void delay(uint8 m) //延時程序
{
uint8 i, j;
for(i = 0 ;i < m; i++)
for(j = 0;j < 128 ; j ++)
;
}
void init()
{
TMOD = 0x01;
TH0 = (65536 - 50000)/256;
TL0 = 65536 - 50000; //timer0 init
ET0 = 1;
EA = 1;
TR0 = 1;
}
void p_data(uint8 dat1,uint8 dat2) //數據處理
{
dis_buf[0] = dat1 / 10;
dis_buf[1] = dat1 % 10;
dis_buf[2] = dat2 / 10;
dis_buf[3] = dat2 % 10;
}
void display(uint8 flash) //顯示
{
uint8 i,wx = 1;
for(i = 0; i < 4 ; i++)
{
if(flash != 0)
{
if((i==(flash-1))&&(ct < 10))
{
SEG = 0x00;
}
else
SEG = dis[dis_buf[i]];
}
else
SEG = dis[dis_buf[i]];
WEI = ~(wx<<i);
delay(20);
SEG = 0x00;
}
}
void keyscan()
{
if(KEY != 7)
{
delay(5);
if(KEY != 7)
{
if(!keyp)
{
keyp = 1;
switch(KEY)
{
case 6:
flag1++;
break;
case 5:
flag2++;
break;
case 3:
flag2--;
break;
}
}
}
}
else
keyp = 0;
}
void main()
{
sec = 6;
init();
while(1)
{
keyscan();
p_data(min,sec);
display(flag1%5);
if(flag1!=0)
{
if(ct == 19)
ct = 0;
}
switch(flag1)
{
case 1:
sec = flag2;
if(flag2 > 5)
flag2 = 0;
if(flag2 == -1)
flag2 = 6;
break;
}
}
}
void t0() interrupt 1 using 1
{
TH0 = (65536 - 50000)/256;
TL0 = 65536 - 50000;
ct++;
if(ct > 19)
{
ct = 0;
sec--;
if(sec == 255)
{
sec = 6;
}
}
}
『捌』 51單片機的共陰數碼管怎麼顯示數字(c語言)
要讓51單片機共陰數碼管顯示數字,只需要將單片機的P2埠輸出數字對應的段碼即可。
以顯示數字「0」為例,c語言程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//數碼管的段碼編碼
Uchar table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main(){//主函數
P0 = table[0];//顯示0,大家可以修改裡面的數據。
while(1);//程序不再執行其他步驟;
}
(8)51單片機數碼管c語言擴展閱讀:
數字0-9的對應段碼:
數字0 0x3f
數字1 0x06
數字2 0x5b
數字3 0x4f
數字4 0x66
數字5 0x6d
數字6 0x7d
數字7 0x07
數字8 0x7f
數字9 0x6f
『玖』 51單片機 c語言 按鍵和數碼管顯示
#include<reg51.h>
unsignedcharled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voidled_display(unsignedcharnum);
unsignedcharkey_scan();
sbitled1=P2^0;
sbitled2=P2^1;
voidmain()
{
unsignedcharled_key;
P1=0;
while(1)
{
led_key=key_scan();
led_display(led_key);
}
}
voidled_display(unsignedcharnum)
{
unsignedcharten,single;
intdelay;
ten=num/10;
single=num%10;
delay=100;
for(delay=200;delay>0;delay--)
{
P0=led[ten];
led1=0;
led1=1;
P0=led[single];
led2=0;
led2=1;
}
}
/////////////////////////////////////////
unsignedcharkey_scan(void)
{
unsignedchartemp,key;
P1=0xfe;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=1;
break;
case0xd0:key=2;
break;
case0xb0:key=3;
break;
case0x70:key=4;
}
returnkey;
}
P1=0xfd;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=5;
break;
case0xd0:key=6;
break;
case0xb0:key=7;
break;
case0x70:key=8;
}
returnkey;
}
P1=0xfb;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=9;
break;
case0xd0:key=10;
break;
case0xb0:key=11;
break;
case0x70:key=12;
}
returnkey;
}
P1=0xf7;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=13;
break;
case0xd0:key=14;
break;
case0xb0:key=15;
break;
case0x70:key=16;
}
returnkey;
}
}
你好!很高興為您解答!我有歡迎採納!!以上傳附件!!
『拾』 80C51單片機數碼管的顯示 C語言
用10個8段數碼管動態掃描顯示的:
#include
unsigned
char
const
dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//
顯示段碼值0123456789
unsigned
char
code
seg[]={0,1,2,3,4,5,6,7,8,9};//分別對應相應的數碼管點亮,即位碼
/*------------------------------------------------
延時子程序
------------------------------------------------*/
void
delay(unsigned
int
cnt)
{
while(--cnt);
}
/*------------------------------------------------
主函數
------------------------------------------------*/
main()
{
unsigned
char
i;
while(1)
{
P0=dofly[i];//取顯示數據,段碼
P2=seg[i];
//取位碼
delay(20000);
//掃描間隙延時,時間太長會閃爍,太短會造成重影,自己調試
i++;
if(10==i)
//檢測10位掃描完全?
i=0;
}
}