51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
通用的数码管显示C51程序
作者:佚名  发布时间:2009/10/16  阅读次数:1807  字体大小: 【】 【】【
通用的数码管显示C51程序
//8个数码管由8个74ls164级联而成,接到单片机串口

#i nclude <at89x52.h>//我用的单片机为at89s52
#i nclude <intrins.h>//_nop_()语句在其中有定义
#define LED_A 0x0a
#define LED_B 0x0b
#define LED_C 0x0c
#define LED_D 0x0d
#define LED_E 0x0e
#define LED_F 0x0f
#define LED_BLANK 16             //数码管灭的索引值是16                                                                                 #define LED_NEG 17           //负号的索引值是17
#define nop8() {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
void led_update();
void lprinti(uint,uchar,uchar);
void lclear(uchar ,uchar );

//共阴极                                     //   ' '   '-'
uchar code led_num[18]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x00,0x0

2};
uchar led_buf[8]={16,16,16,16,16,16,16,16};
void led_update()
{
uchar i;
for(i=0;i<8;i++)
{
   if(led_buf[i]>=0x80) //若此位要显示小数点,
   {
     SBUF=led_num[led_buf[i]&0x7f]|0x01; //数码管代码最低位置1
   }
   else
     SBUF=led_num[led_buf[i]];
   nop8();//延时8个机器周期才能送下一个

}
}
//li: 要显示的数
//mode:高4位表示显示方式,5:十进制显示,1~4:十进制显示时的小数的个数即也是小数点位置,0:十六进制显示;     低4位,表示显示多少位数字。
//xy:从第几个数码管开始向左显示
void lprinti(uint li,uchar mode,uchar xy)  
{
uint asc[5];
uchar i;
uint div;
uchar base;
uchar type=mode>>4,dispn=(mode&0x0f)-1; //注意优先级, mode&0x0f必须打()
if(type==0)//十六进制显示

{
   div=4096;
   base=16;
   i=3;
}
else   //十进制显示
{
   div=10000;
   base=10;
   i=4;
}
asc[i]=li;
for(;i!=0;i--)
{
   asc[i-1]=asc[i]%div;//取出名位
   asc[i]=asc[i]/div;
   div/=base;
}
for(i=dispn;i!=0xff;i--)
{
   if(asc[i]<=9)
   {
     if(i==type)
       asc[i]|=0x80;//若要在此位显示小数点,把其最高位置为1
     led_buf[xy++]=asc[i];
   }
}
led_update();
}
//################################################################33
//清数码管的from到to位,上面不显示任何东西。
//####################################################################
void lclear(uchar from,uchar to)
{
   for(;from<=to;from++)
   led_buf[from]=LED_BLANK;
led_update();
}

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号