|
樓主 |
發表於 2012-10-7 22:04:45
|
顯示全部樓層
ARTHUR大:
我幫你開路!! 你不是要做7段顯示嗎?
測試程式
/*-----------------------------------------------
名称:8位数码管动态扫描显示变化数据
论坛:www.doflye.net
编写:shifang
日期:2009.5
修改:无
内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
#define ScanPort P1
unsigned char code dofly_WeiMa[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分别对应相应的数码管点亮,即位码0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
unsigned char Dsp[5];
void Delay(unsigned int t); //函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned char i=0;
unsigned char K,T;
unsigned int j,num,znum;
while(1)
{
K=num%10;//5
T=num/10;//6553
Dsp[0]=T%10<<4|K;//3
T=num/100;//655
K=T%10;//5
T=num/1000;//65
Dsp[1]=T%10<<4|K;//5
T=num/10000;
Dsp[2]=T;
//------------------------------
K=znum%10;//5
T=znum/10;//6553
Dsp[3]=T%10<<4|K;//3
T=znum/100;//655
K=T%10;//5
T=znum/1000;//65
Dsp[4]=T%10<<4|K;//5
T=znum/10000;
Dsp[5]=T;
DataPort= Dsp; //取位码
ScanPort=dofly_WeiMa; //取显示数据,段码
Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
i++;j++;
if(8==i) //检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位
i=0;
if(j==500) //检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化
{
j=0;
num--;
znum++;
}
}
}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
|
|