欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
請幫忙指導一下單片機8位共陽數碼管循環顯示0-9,謝謝!
[打印本頁]
作者:
147035206
時間:
2020-3-26 22:50
標題:
請幫忙指導一下單片機8位共陽數碼管循環顯示0-9,謝謝!
各位高手你們好!我這個51開發板(STC89C52)是10多年前的板子;板子上是2組4位共陽數碼管,組成的8位數碼管;沒有
鎖存器;位選是用三極管驅動的。請高手們。幫我優化一下這個程序。謝謝!!!
循環顯示.png
(7.31 KB, 下載次數: 50)
下載附件
2020-3-26 23:03 上傳
/*****八位數碼管循環顯示數字0--9;這是個笨方法,請高手指點,謝謝!*****/
單片機源程序如下:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
uint i,j;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x00,0x90};//段選數字0-9;
uchar code wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位選開關
void delay()
{
unsigned char i,j;
for(i=250;i>0;i--)
{
for(j=250;j>0;j--);
}
}
void main()
{
while(1)
{
for(i=0;i<8;i++)
{
P2=wela[i] ;
P0=table[i];
delay();
delay();
delay(); }//第一次依次顯示0--7;
for(i=0;i<2;i++)
{
P2=wela[i];
P0=table[8+i];
delay();
delay();
delay();
}//循環下來,第一位顯示8,第二位顯示9;
for(i>=2;i<8;i++)
{
P2=wela[i];
P0=table[i-2];
delay();
delay();
delay();
}//從第三位到第八位顯示0--5;
for(i=0;i<4;i++)
{
P2=wela[i];
P0=table[6+i];
delay();
delay();
delay();
}//繼續從第1位到第四位顯示6--9;
for(i>=4;i<8;i++)
{
P2=wela[i];
P0=table[i-4];
delay();
delay();
delay();
}//從第五位到第八位顯示0--3;
for(i=0;i<6;i++)
{
P2=wela[i];
P0=table[4+i];
delay();
delay();
delay();
}//從第1位到第六位顯示4--9;
for(i>=6;i<8;i++)
{
P2=wela[i];
P0=table[i-6];
delay();
delay();
delay();
}//從第七位到第八位顯示0和1;
for(i=0;i<8;i++)
{
P2=wela[i] ;
P0=table[i+2];
delay();
delay();
delay(); }//從第一位到第八位顯示2--9;完成一個整
循環。
}
}
復制代碼
作者:
wulin
時間:
2020-3-27 08:12
添加一個顯示緩存,可以大幅度簡化代碼。
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
uint i,j,k;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段選數字0-9;
uchar code wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位選開關
uchar data dis_buf[11];//顯示緩存
void delay(uint k) //ms延時程序
{
uint i,j;
for(i=k;i>0;i--)
for(j=120;j>0;j--);
}
void main()
{
for(i=0;i<10;i++)
{//將需要顯示的數字0~9按序保存在顯示緩存中
dis_buf[i]=table[i];
}
while(1)
{
P0=0xff;//消隱
P2=wela[j];//送位碼
P0=dis_buf[j];//送段碼
j++; //數碼管動態顯示計數
if(j==8)
{
j=0;
k++; //更新速度計數
if(k==50)//可以調整顯示更新速度
{
k=0;
dis_buf[10]=dis_buf[0];//將顯示緩存0移動到10
for(i=0;i<10;i++)
{
dis_buf[i]=dis_buf[i+1];//顯示緩存全部移動一位
}
}
}
delay(2);//控制主循環速度
}
}
復制代碼
作者:
147035206
時間:
2020-3-27 12:15
wulin 發表于 2020-3-27 08:12
添加一個顯示緩存,可以大幅度簡化代碼。
謝謝您!
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1