- 单片机C语言程序设计实训100例
- 彭伟编著
- 452字
- 2025-02-19 23:22:34
3.6 单只数码管循环显示0~9
本例运行时,电路中的单只数码管会循环显示0,1,2,…,9。
本例电路如图3-6所示。

图3-6 单只数码管循环显示0~9电路
程序设计调试与实训:
本例的单只共阴数码管连接在P0端口,电路中必须添加上拉电阻。当P0端口相应引脚为1时,对应数码管段点亮。程序中预设了数字0~9的段码,0~9的段码按固定时间间隔循环发送到P0端口,产生数字循环显示效果。
本例源程序预设的数字段码表存放在数组DSY_CODE中,由于段码表是固定的,因此存储类型可设为code。由于本例给出的段码表是针对共阳数码管的,但电路中使用的却是共阴数码管,因此在段码送至P0端口显示时要将其取反。
读者可将本例段码表改为共阴数码管段码表,使程序实现相同功能。
源程序代码:
//----------------------------------------------------------------- // 名称: 单只数码管循环显示0~9 //----------------------------------------------------------------- // 说明: 主程序中的循环语句反复将0~9的段码送至P0端口,使数字0~9 // 循环显示。 //----------------------------------------------------------------- #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int //0~9的数码管段码,最后一个为关闭 uchar code DSY_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0xff}; //----------------------------------------------------------------- // 延时 //----------------------------------------------------------------- void DelayMS(uint x) { uchar t; while(x--) for(t = 0; t < 120; t++); } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- void main() { uchar i = 0; P0 = 0x00; while(1) { P0 = ~DSY_CODE[i]; i = (i+1) % 10; DelayMS(180); } }