通用的数码管显示C51程序
//8个数码管由8个74ls164级联而成,接到单片机串口
#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 );
完整版本:
#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[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(); }
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
-
2014-04-17 19:43:05
-
2008-11-18 18:39:09
-
2018-12-20 13:41:20
-
02008-11-12 19:40:51
-
02008-11-12 19:35:47
-
02008-11-12 19:34:07
-
02008-11-12 19:39:51
-
2019-01-02 09:27:24
-
2008-11-18 18:42:45
-
2021-05-08 14:51: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
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明