動態顯示編程
『壹』 試編寫程序:8位數碼管動態顯示數字AbcdEFgH
這是參考程序,把dofly_DuanMa[]裡面的值改成a、b、c、d、e、f、g、h的對應段碼值就行,然後位選信號看下你的連接電路是怎麼接的。希望採納,有疑問請追問。
#include<reg52.h>
#define DataPort P0 //定義數據埠 程序中遇到DataPort 則用P0 替換 sbit LATCH1=P2^2;//定義鎖存使能埠 段鎖存
sbit LATCH2=P2^3;// 位鎖存
unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值01234567
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應相應的數碼管點亮,即位碼
void Delay(unsigned int t); //函數聲明
/*------------主函數-----------------*/
main() {
unsigned char i=0;
while(1)
{ DataPort=dofly_WeiMa[i]; //取位碼
LATCH2=1; //位鎖存
LATCH2=0;
DataPort=dofly_DuanMa[i]; //取顯示數據,段碼
LATCH1=1; //段鎖存
LATCH1=0;
Delay(600); // 掃描間隙延時,時間太長會閃爍,太短會造成重影,
i++;
if(8==i) //檢測8位掃描完全結束?如掃描完成則從第一個
i=0; }
}
/*------------------- 延時函數,含有輸入參數 unsigned int t,無返回值 unsigned int 是定義無符號整形變數,其值的范圍是 0~65535 ----------------*/
void Delay(unsigned int t)
{ while(--t); }
『貳』 單片機編程:LED動態顯示
不知道你要怎能么動?我就給個數字顯示也動,數碼館也流水顯示的
#include
#include
//包含流水燈的頭文件
#define
uint
unsigned
int
#define
uchar
unsigned
char
uint
temp,aa,num,numwe;
sbit
an=P3^3;
//段控制端定義
sbit
wei=P3^4;
//位控制端定義
uchar
code
tablewe[]={0x01,0x02,0x04,0x08,0x10,0x20};
//6個數碼管位碼
uchar
code
table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E,};
//數碼管段碼(共陽)
void
main()
{
//以下為初值:
aa=0;
num=0;
//段碼要顯示的個數,初始為0
numwe=0;
//位碼要移動的位數,初始為0
temp=0x01;
//顯示狀態為單燈暗涌移動,若改成0xfe則單燈點亮移動
P2=temp;
//LED顯示在第一位
an=1;
//選通段
P0=0xC0;
//送段碼、從0開始顯示
an=0;
//關閉段
wei=1;
//選通位
P0=0x01;
//送位碼、從第一位數碼管開始顯示
wei=0;
//關閉位
TMOD=0x01;
//TO工作方式1,也直接寫TMOD=0
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
//賦定時初值50MS
EA=1;
ET0=1;
//開定時器0中斷
TR0=1;
//啟動定時器0
//以下為循環:
while(1)
{
if(aa==100)
//變化延時
{
aa=0;
temp=_crol_(temp,1);
//單燈左移值
P2=temp;
//顯示
num++;
//段加1
if(num==16)//0~F共16個,最多到顯示」F"
num=0;
an=1;
//開段
P0=table[num];
//顯示
an=0;
numwe++;
//位加1
if(numwe==6)//最多移6位
numwe=0;
wei=1;
//開位
P0=tablewe[numwe];
//顯示
wei=0;
}
}
}
void
exter0()
interrupt
1
using
1
//using選通用工作寄存器R0-R7,默認為0組
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
aa++;
}
『叄』 四位一體共陽級數碼管動態顯示c語言編程
//滿意請採納
//這是一個四位數碼管動態顯示c語言程序,每隔一秒加一,直至加到9999為止
//使用時需採用鎖存器
#include<reg52.h>
#include"stdio.h"
unsignedcharcodeLED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsignedcharLEDbuff[]={0xff,0xff,0xff,0xff};
//定義數碼管的位選段
sbitSEG_bit_1=P0^1;
sbitSEG_bit_2=P0^2;
sbitSEG_bit_3=P0^3;
sbitSEG_bit_4=P0^4;
unsignedintcnt=0;
unsignedintsec=0;
unsignedintmini=0;
unsignedinthour=0;
unsignedchari=0;
/*voiddelay(unsignedintz)
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
*/
voidinterrupttimer0()interrupt1/*設置中斷函數*/
{
TH0=0xfc;
TL0=0x18;
cnt++;
//P1=0x80;
//delay(1);
switch(i)
{
case0:SEG_bit_1=0;SEG_bit_4=1;P1=LEDbuff[0];i++;break;
case1:SEG_bit_4=0;SEG_bit_3=1;P1=LEDbuff[1];i++;break;
case2:SEG_bit_3=0;SEG_bit_2=1;P1=LEDbuff[2]&;i++;break;
case3:SEG_bit_2=0;SEG_bit_1=1;P1=LEDbuff[3];i=0;break;
default:break;
}
}
/************************************************
voidserial_init()
{
//TMOD=0x20;//定時器T/C1工作方式2
SCON=0x50;//串口工作方式1,允許串口接收(SCON=0x40時禁止串口接收)
TH1=0xF3;//定時器初值高8位設置
TL1=0xF3;//定時器初值低8位設置
PCON=0x80;//波特率倍頻(屏蔽本句波特率為2400)
TR1=1;//定時器啟動
}
**********************************************/
voidmain()
{
//serial_init();//串口初始化
//TMOD=0x21;/*設置定時器*/
TMOD=0x01;
TH0=0xfc;
TL0=0x18;
TR0=1;
EA=1;/*設置中斷*/
ET0=1;
while(1)
{
if(0==TF0)
{
if(cnt>=1000)
{
cnt=0;
sec++;
if(sec>=60){
sec=0;mini++;
if(mini>=60){
mini=0;hour++;
if(hour>=24)hour=0;
}
}
LEDbuff[0]=LED[sec%10];//*設置數碼管顯示位*/
LEDbuff[1]=LED[sec/10%10];
LEDbuff[2]=LED[mini%10];
LEDbuff[3]=LED[mini/10%10];
//TI=1;//使用printf函數前須先將發送標志位TI置1
//printf("%4d%x,%x%x ",sec,LEDbuff[0],LEDbuff[1],LEDbuff[2]);
//TI=0;
}
}
}
}