2181
- 收藏
- 点赞
- 分享
- 举报
通用的数码管显示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 );
完整版本:
[hide]#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>=0x80) //若此位要显示小数点,
{
SBUF=led_num[led_buf&0x7f]|0x01; //数码管代码最低位置1
}
else
SBUF=led_num[led_buf];
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=li;
for(;i!=0;i--)
{
asc[i-1]=asc%div;//取出名位
asc=asc/div;
div/=base;
}
for(i=dispn;i!=0xff;i--)
{
if(asc<=9)
{
if(i==type)
asc|=0x80;//若要在此位显示小数点,把其最高位置为1
led_buf[xy++]=asc;
}
}
led_update();
}
//################################################################33
//清数码管的from到to位,上面不显示任何东西。
//####################################################################
void lclear(uchar from,uchar to)
{
for(;from<=to;from++)
led_buf[from]=LED_BLANK;
led_update();
}
[/hide]
#i nclude
#i nclude
#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 );
完整版本:
[hide]#i nclude
#i nclude
#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>=0x80) //若此位要显示小数点,
{
SBUF=led_num[led_buf&0x7f]|0x01; //数码管代码最低位置1
}
else
SBUF=led_num[led_buf];
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=li;
for(;i!=0;i--)
{
asc[i-1]=asc%div;//取出名位
asc=asc/div;
div/=base;
}
for(i=dispn;i!=0xff;i--)
{
if(asc<=9)
{
if(i==type)
asc|=0x80;//若要在此位显示小数点,把其最高位置为1
led_buf[xy++]=asc;
}
}
led_update();
}
//################################################################33
//清数码管的from到to位,上面不显示任何东西。
//####################################################################
void lclear(uchar from,uchar to)
{
for(;from<=to;from++)
led_buf[from]=LED_BLANK;
led_update();
}
[/hide]
我来回答
回答0个
时间排序
认可量排序

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片
相关问答
-
2014-04-17 19:43:05
-
2008-11-18 18:39:09
-
02008-11-12 19:34:07
-
02008-11-12 19:39:51
-
02008-11-12 19:40:51
-
02008-11-12 19:35:47
-
2018-12-20 13:41:20
-
2019-01-02 09:27:24
-
2008-11-18 18:42:45
-
2008-09-28 20:14:51
-
2008-11-15 12:44:06
-
2008-05-28 20:02:06
-
2008-07-06 21:01:58
-
2008-07-06 20:55:53
-
2019-01-09 09:46:58
-
2008-07-06 19:02:51
-
2018-03-07 11:22:54
-
2008-11-18 18:53:24
-
2012-12-24 14:56:39
无更多相似问答 去提问

点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认