数码管左移解析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数码管左移

名称:数码管左移

日期:2012年05月19日

内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值

------------------------------------------------*/

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换

sbit LATCH1=P2^6;//定义锁存使能端口段锁存(LATCH1(锁存器的段选端)可以用我们习惯的dula代替)

sbit LATCH2=P2^7;// 位锁存(LATCH2(位选端)可以用我们习惯的wela代替)

unsigned char code DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 显示段码值0~9

unsigned char code WeiMa[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//分别对应相应的数码管点亮,即位码(位码从高到低)

unsigned char TempData[9]; //存储显示值的全局变量(TempData【9】是含有9个元素的数组,全局变量,不明白建议去看看C语言)void Delay(unsigned int t); //函数声明

void Display(unsigned char FirstBit,unsigned char Num);

/*------------------------------------------------

主函数

------------------------------------------------*/

main()

{

unsigned char i,k,j;(i与Display函数定义中的i不一样,局部变量)

unsigned char s;

while(1)

{

j++;

if(j==20) (有使正在移动的数延时一段时间的作用)

{

j=0;

if(0==k)

{

for(s=0;s<8;s++) //完全循环完成后清零所有缓冲区

TempData[s]=0xff;

}

TempData[i]=DuanMa[k]; //把需要显示的字符依次送缓冲区//(给TempData赋值,每执行一次该语句,只给TempData【9】中的一个元素赋值)

TempData[i-1]=0xff; //不需要显示的区域清零(一定看过实验现象才好理解,这里就那实验现象中0移动来说,0从0x80(位)到0x40位时(此时TempData【i】中只有TempData【0】和TempData【1】被赋值为0,其他的值为0xff(对共阳极而言,即什么都不显)),如果没TempData【i-1】=0xff这句,那么0x80和0x40位上都是0,这条语句作用是使0移动的数码管0x80位上什么都不显示,上面说清零有点不好理解)i++;

if(i==(8-k))(k起限制数字移动的次数的作用,对于k=0,i的最大值7,对于k=1,i为6。。。。对于k=7,i为0){

i=0;

k++;

if(k==8)

k=0;

}

}

Display(0,8);//从第一位显示,共显示8位

}

}

/*------------------------------------------------

延时函数,含有输入参数unsigned int t,无返回值

unsigned int 是定义无符号整形变量,其值的范围是

0~65535

------------------------------------------------*/

void Delay(unsigned int t)

{

while(--t);

}

/*------------------------------------------------

显示函数,用于动态扫描数码管

输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示

如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2

------------------------------------------------*/

void Display(unsigned char FirstBit,unsigned char Num)

{

unsigned char i;(局部变量,i和main函数里的i不一样)

f or(i=0;i

{

DataPort=0xff; //清空数据,防止有交替重影

LATCH1=1; //段锁存

LATCH1=0;

DataPort=WeiMa[i+FirstBit]; //取位码

LATCH2=1; //位锁存

LATCH2=0;

DataPort=TempData[i]; //取显示数据,段码(TempData【i】里面的i值就是display中的i)

LATCH1=1; //段锁存

LATCH1=0;

Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影

}

相关文档
最新文档