單片機(jī)C語言程序設(shè)計(jì):8 只數(shù)碼管滾動(dòng)顯示數(shù)字、字符
掃描二維碼
隨時(shí)隨地手機(jī)看文章
/* 名稱:8 只數(shù)碼管滾動(dòng)顯示單個(gè)數(shù)字
說明:數(shù)碼管從左到右依次滾動(dòng)顯示
0~7,程序通過每次僅循環(huán)選通一只數(shù)碼
管
*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//延時(shí)
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
}
//主程序
void main()
{
}
uchar i,wei=0x80;
while(1)
{
for(i=0;i<8;i++)
{
P2=0xff; //關(guān)閉顯示
wei=_crol_(wei,1);
P0=DSY_CODE[i];發(fā)送數(shù)字段碼
P2=wei; //發(fā)送位碼
DelayMS(300);
}
}
/* 名稱:8 只數(shù)碼管動(dòng)態(tài)顯示多個(gè)不同字符
說明:數(shù)碼管動(dòng)態(tài)掃描顯示 0~7。
*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//延時(shí)
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
}
//主程序
void main()
{
uchar i,wei=0x80;
while(1)
{
for(i=0;i<8;i++)
{
P0=0xff;
P0=DSY_CODE[i];發(fā)送段碼
wei=_crol_(wei,1);
}
}
}
[!--empirenews.page--]
/* 名稱:8 只數(shù)碼管閃爍顯示數(shù)字串
*/
說明:數(shù)碼管閃爍顯示由 0~7 構(gòu)成的一串?dāng)?shù)字
本例用動(dòng)態(tài)刷新法顯示一串?dāng)?shù)字,在停止刷新時(shí)所有數(shù)字顯示消失。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//段碼表
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//位碼表
uchar code DSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//延時(shí)
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
}
//主程序
void main()
{
uchar i,j;
while(1)
{
for(i=0;i<30;i++)
{
for(j=0;j<8;j++)
{
P0=0xff;
P0=DSY_CODE[j]; //發(fā)送段碼
P2=DSY_IDX[j]; //發(fā)送位碼
DelayMS(2);
}
}
P2=0x00; //關(guān)閉所有數(shù)碼管并延時(shí)
DelayMS(1000);
}
}
/* 名稱:8 只數(shù)碼管滾動(dòng)顯示數(shù)字串
說明:數(shù)碼管向左滾動(dòng)顯示 3 個(gè)字符構(gòu)成的數(shù)字串
*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//段碼表
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//下面數(shù)組看作環(huán)形隊(duì)列,顯示從某個(gè)數(shù)開始的 8 個(gè)數(shù)(10 表示黑屏)
uchar Num[]={10,10,10,10,10,10,10,10,2,9,8};
//延時(shí)
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
}
//主程序
void main()
{
uchar i,j,k=0,m=0x80;
while(1)
{ //刷新若干次,保持一段時(shí)間的穩(wěn)定顯示
for(i=0;i<15;i++)
{
for(j=0;j<8;j++)
{ //發(fā)送段碼,采用環(huán)形取法,從第 k 個(gè)開始取第 j 個(gè)
P0=0xff;
P0=DSY_CODE[Num[(k+j)%11]];
m=_crol_(m,1);
P2=m; //發(fā)送位碼
DelayMS(2);
}
}
k=(k+1)%11; //環(huán)形隊(duì)列首支針 k 遞增,Num 下標(biāo)范圍 0~10,故對(duì) 11 取余
}
}