数码管由于价格便宜,使用简单,在电器特别是家电领域(比如空调、热水器和冰箱等)得到了极为广泛的应用。在高校电子信息类专业单片机的教学过程中,数码管动态显示及实现方法是学生普遍反映较难掌握的内容。鉴于此,本文为大家带来三个数码管动态扫描显示01234567程序介绍。
数码管动态扫描显示01234567程序一
原理图
8个数码管它的数据线并联接到JP5, 位控制由8个PNP型三级管驱动后由JP8引出。
程序流程图
汇编语言参考程序
ORG 0000H
AJMP MAIN
ORG 0080H
MAIN:
CLR P2.0 选中第一个数码管
MOV P0,#28H 显示0
LCALL DELAY 调用延时ORG
MOV P0,#0FFH 关显示
SETB P2.0
CLR P2.1 选中第二个数码管
MOV P0,#7EH 显示1
LCALL DELAY
MOV P0,#0FFH
SETB P2.1
CLR P2.2 选中第三个数码管
MOV P0,#0A2H 显示2
LCALL DELAY
MOV P0,#0FFH
SETB P2.2
CLR P2.3 选中第四个数码管
MOV P0,#62H 显示3
LCALL DELAY
MOV P0,#0FFH
SETB P2.3
CLR P2.4 选中第五个数码管
MOV P0,#74H 显示4
LCALL DELAY
MOV P0,#0FFH
SETB P2.4
CLR P2.5 选中第六个数码管
MOV P0,#61H 显示5
LCALL DELAY
MOV P0,#0FFH
SETB P2.5
CLR P2.6 选中第七个数码管
MOV P0,#21H 显示6
LCALL DELAY
MOV P0,#0FFH
SETB P2.6
CLR P2.7 选中第八个数码管
MOV P0,#7AH 显示7
LCALL DELAY
SETB P2.7
MOV P0,#0FFH
AJMP MAIN 重新开始
DELAY: 延时子程序
MOV R7,#2
D1: MOV R6,#25
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
c语言参考程序
#include
#define uchar unsigned char //宏定义,为方便编程
#define uint unsigned int
#define DIGI P0 //宏定义,将P1口定义为数码管
#define SELECT P2 //宏定义,将P2定义为数码管选择口
uchar digivalue[]={0x28,0x7e,0x0a2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};
//显示的数字数组,依次为0,1,。。,9
uchar select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //选择数码管数组,依次选择1,2,。。,8
void delay() //延迟函数,决定数码管跳变的间隔时间
{
uchar ii=200; //若发现数码管闪烁,调节这里即可
while(ii--);
}
char code SST516[3] _at_ 0x003b; //仿真器插入代码
main() //主函数
{
uchar i=0;
while(1)
{
for(i=0;i<8;i++) //8个数码管轮流显示
{
SELECT=select[i]; //选择第i个数码管
IGI=digivalue[i]; //显示i
delay();
}
}