15年0个月前IP:未同步
347819
7楼
我也来发一个吧。我自己用的LED的驱动程序,Freescale 08 的片子,改一下就可以用到51上。主要大家看一下思路。
使用一个定时中断,并用了一个缓冲。这样做想显示什么都很方便了。而且点用CPU的资源很少。
其实只要加几个函数就可以显示数字,字符,字符串都可以。

#define LEDNUM    8

uhar uLedBuf[LEDNUM];

void InitLed(void)
{
    memset(uLedBuf,' ',LEDNUM);
    T1MOD = 0x01000;
}

void interrupt 7 LedDrv(void)    //10ms
{
    static uchar i = 0;
    static uchar bBit = 0x01;
    if(i >= LEDNUM){
        i = 0;
        bBit = 0x01;
    }
    PTC = 0;
    PTD = uLenBuf[i];
    PTC = bBit;
    bBit <<= 1;
    i++;
    T1SC_TOF = 0;        //清中断标志
}

void Dis(uchar uBit, char Ch)
{
    if(uBit >= LEDNUM)
        return;
    uLedBuf[uBit] = Ch;
}

void DisNum(uint n)
{
    sprintf(uLedBuf,"%d",n);
    return;
}
+1
科创币
科学人
2011/12/26
我的程序是原型,说明原理而已
评论
文号 / 347819

十步芳草
名片发私信
学术分 0
总主题 9 帖总回复 103 楼拥有证书:笔友
注册于 2011/03/27 14:46:40最后登录 2018/01/10 01:07:49
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的