结合单片机学习板学习c语言之led数码管显示 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    目的:STC单片机通过控制8155I/O扩展芯片驱动6位7段LED数码管显示,

结合单片机学习板学习c语言之led数码管显示

   

    /*本程序通过单片机控制8155的PA与PC口,在6位的LED上显示123456*/

    #include"at89x51.h"

    #include"absacc.h"

    #include "intrins.h"

    #includetdio.h>

    #define uchar unsigned char

    sfr ISP_CONTR =0xE7;

    uchar code BitdisL[]={0x1f,0x2f,0x37,0x3b,0x3d,0x3e};

    uchar code Chardis[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

    delay_05s()

    {

    int count;

    count=647395;

    for(;count!=0;count--);

    }

    void serial() interrupt 4 //编号0-4,外中断0,定时器0,外中断1,定时器1,串行中断

    {

    int a;

    RI=0;

    a=SBUF;

    if (a==0xFE)

    {delay_05s();

    delay_05s();

    ISP_CONTR=0x60;}

    else

    SBUF='A';

    while(!TI);

    TI=0;

    }

    void main(void)

    {

    unsigned int b,i;

    unsigned char cmd,a;

    TMOD=0x20;

    TH1=0xf4;

    TL1=0XF4;

    TR1=1;

    SCON=0XF8;

    PCON=0X80;

    EA=1;

    ES=1;

    RI=0;

    cmd=0x0F;

    XBYTE[0X7FF0]=cmd;

    a=0xfe;

    while(1)

    {

    XBYTE[0X7FF3]=BitdisL[i];

    XBYTE[0X7FF1]=Chardis[i];

    for(b=0;b<500;b++);

    i++;

    if (i>6)

    i=0;

    }

    }

    【重点难点】

    1.熟悉8155的端口分配,

电脑资料

结合单片机学习板学习c语言之led数码管显示》(https://www.unjs.com)。

    2.确定8155地址,由上图可以看出,由于当8155的IO/M=1,CE=0时,才能对8155设置命令寄存器和A,B,C口。由上图不难得出命令寄存器的地址是0x7ff0(该地址不唯一,也可以是0x4000等)

    3.每位LED显示时间为“for(b=0;b<500;b++);”比较合适,延时太短了,每个LED显示变暗,这在后一个实验中即可出现。延时太长了,就会出现形如CRT刷新率不高时闪烁现象。

最新文章