个粉丝

问答

专栏

资料

 发布于  2008-11-15 12:41:39
采纳率 0%
128个问答
2909

通用的数码管显示C51程序

//8个数码管由8个74ls164级联而成,接到单片机串口

#i nclude //我用的单片机为at89s52 #i nclude //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 ); 完整版本: #i nclude //我用的单片机为at89s52 #i nclude //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个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区