⑴ 電路如下圖請問單片機動態數碼管顯示C語言程序怎麼寫呢
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
code unsigned char tab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共陰數碼管 0-9
unsigned char Dis_Shiwei;//定義十位
unsigned char Dis_Gewei; //定義個位
/******************************************************************/
/* 延時函數 */
/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/* 主函數 */
/******************************************************************/
main()
{
TMOD |=0x01;//定時器設置 10ms in 12M crystal,工作在模式1,16位定時
TH0=0xd8;
TL0=0xf0;
IE= 0x82; //打開中斷
TR0=1; //打開定時開關
while(1)
{
P0=Dis_Shiwei;//顯示十位
P2=0;
delay(300); //短暫延時
P0=Dis_Gewei; //顯示個位
P2=1;
delay(300);
}
}
/******************************************************************/
/* 定時器中斷函數 */
/******************************************************************/
void tim(void) interrupt 1 using 1
{
static unsigned char second,count;
TH0=0xd8; //重新賦值
TL0=0xf0;
count++;
if (count==100) //100x10ms=1S,大致延時時間
{
count=0;
second++; //秒加1
if(second==100)
second=0;
Dis_Shiwei=tab[second/10];//十位顯示值處理
Dis_Gewei=tab[second%10]; //個位顯示處理
}
⑵ 單片機數碼管動態顯示
下面是用段選和位選的數碼管動態顯示程序,可以參照下寫法
#include <AT89X51.H>
unsigned char dispbitcnt; //數碼管位碼掃描變數
unsigned char second;
//秒變數
unsigned char minite;
//分變數
unsigned char hour;
//時變數
unsigned char tcnt;
//秒信號產生變數
unsigned char mstcnt;
//掃描時間變數
const unsigned char dispcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,<br> <br> <br> 0x92,0x82,0xf8,0x80,0x90};
//0123456789段碼
const unsigned char dispbitcode[6]={0xfe,0xfd,0xfb,0xf7,<br> <br> <br> 0xef,0xdf};
//123456位碼
unsigned char dispbuf[6]={0,0,0,0,0,0};
//緩沖數組
//**************TMR0中斷數碼管掃描程序*********************
void Timer0() interrupt 1
{
P2=dispcode[dispbuf[dispbitcnt]];//段碼
P1=dispbitcode[dispbitcnt];//位碼
dispbitcnt++;
if(dispbitcnt==6)
{dispbitcnt=0;<br> }
tcnt++;
//中斷產生秒信號
if(tcnt==244)
{tcnt=0;<br> <br>second++;<br> <br>if(second==60)<br> <br> {second=0;<br> <br> minite++;<br> <br> if(minite==60)<br> <br> {minite=0;<br> <br> <br>hour++;<br> <br> <br>if(hour==24)<br> <br> <br> {hour=0;<br> <br> <br> }
}
}
dispbuf[4]=second%10;
dispbuf[5]=second/10;
dispbuf[2]=minite%10;
dispbuf[3]=minite/10;
dispbuf[0]=hour%10;
dispbuf[1]=hour/10;
}
TMOD=0x01;
TL0=0x10;
TH0=0xf0;
}
///****************1ms延時程序******************
void delay_1ms(unsigned char i)
{
unsigned char j;
for(i=0;i<144;i++)
for(j=0;j<144;j++);
}
//*************主程序********************
void main(void)
{
TMOD=0x01;
TL0=0x10;
TH0=0xf0;
while(1)
{
dispbitcnt=0;
P1=0x00;
//開段碼
P2=0x00;
//開位碼
delay_1ms(200);
//延時
delay_1ms(200);
//延時
delay_1ms(200);
//延時
delay_1ms(200);
//延時
P2=0xff;
//關位碼
EA=1;
ET0=1;
TR0=1;
while(1);
}
}
⑶ 51單片機顯示八位數碼管的C語言程序
1、最開始,我們先打開keil。
⑷ 單片機數碼管動態顯示程序最後一位很亮是怎麼回事
因為在有參調用中,程序開頭有一些計算過程,例如計算要顯示的每一位數值,要佔用較長的時間,動態掃描到最後一個數碼管後重新循環時再次計算程序開頭的計算過程,這段時間都是最後一個數碼管在顯示,所以最後一個數碼管顯示時間較其他數碼管長,比較亮。或者是在主程序中,display()前有一段代碼要執行,佔用較長時間,效果和前面講的相同。
⑸ 單片機動態數碼管顯示程序
你想要做單片機有關的動態數碼顯示程序的話,你可以先下一個proce的破解版,你在上面可以做一個有關數碼顯示屏程序的一個相關的圖。
⑹ 運用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);
}
⑻ 【單片機程序】能讓數碼管動態顯示「0123」一秒後再顯示「4567」以此循環
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
void display(u8 x);//聲明顯示子函數
u8 t0n; //定時器中斷次數
void main()//主程序
{
u8 n;
TMOD=0x01;
TH0 =0x3C;//晶振12M,定時50ms
TL0 =0xB0;
IE =0x82;
TR0 =1;
while(1)
{
display(n);
if(t0n>=20)//1秒到
{
t0n=0;
if(n==0)n=4;
else n=0;
}
}
}
//定時器T0中斷服務程序
void T0_isr() interrupt 1
{
TH0 =0x3C;
TL0 =0xB0;
t0n++;
}
⑼ LED數碼管動態顯示2017的51單片機匯編語言
DAT EQU33H
SCANLED EQU39H
ORG0000H
LJMPMAIN
ORG0003H
LJMPEXTINT0
ORG001BH
LJMPT1ISR ;掃描顯示
ORG0030H
MAIN:
MOVSP,#5FH
MOVTMOD,#10H
MOVTH1,#0ECH
MOVTL1,#078H
MOV33H,#2
MOV34H,#0
MOV35H,#1
MOV36H,#7
SETBTR1
SETBET1
SETBEA
SJMP$
T1ISR:
PUSHACC
CLRTR1
MOVTH1,#0ECH
MOVTL1,#78H
SETBTR1
MOVDPTR,#LEDTAB
T100:
MOVR0,#DAT
MOVA,SCANLED
ADDA,R0
MOVR0,A
MOVA,SCANLED
JNZT101
MOVP2,#01H
SETBDOT
SJMPT1DIS
T101:
DECA
JNZT102
MOVP2,#02H
CLRDOT
SJMPT1DIS
T102:
DECA
JNZT103
MOVP2,#04H
SETBDOT
SJMPT1DIS
T103:
MOVP2,#08H
CLRDOT
T1DIS:
MOVA,@R0
MOVCA,@A+DPTR
JNBDOT,T1DIS1
ORLA,#01H
T1DIS1:
CPLA
MOVP0,A
INCSCANLED
MOVA,SCANLED
CJNEA,#4,T1END
MOVSCANLED,#0
T1END:
POPACC
RETI
LEDTAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END