51单片机数码管显示实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机数码管显示实验
实验内容:
1)编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复。
2)C语言程序
#include
#define uint unsigned int
void display();
void num();
int i;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表
void delayms(uint);
void main()
{
while(1)
{
num();
display();
}
}
void display()
{
P2=0xff;//消隐P0连接段选,P1节位选
P1=0x00;//8个数码管同时显示
P2=table[i];//数码管显示数码0
delayms(1000);//延时5ms
}
void num()
{
if(i<9)
i++;
else
i=0;
}
void delayms(uint x)
{
uint i,j;
for(i=0;i for(j=0;j<110;j++); } 3)汇编语言: ORG 0000H LJMP MAIN ORG 0100H ;P2连接段选,P1节位选 MAIN: MOV P1,#00H ;所有的数码管都显示 MOV R2,#00H ;从0开始显示 LOOP: MOV A,R2 ;为下面的基址加变址寄存器寻址方式做准备MOV DPTR,#TAB1 ;把数组的首地址赋给DPTR MOVC A,@A+DPTR ;取数组中的数字 MOV P2,A ;把取得的值送给P0口显示 ACALL DELAY ;延时一会 INC R2 ;为取下一个数加一 CJNE R2,#10,LOOP ;只要数小于10就继续循环显示 MOV R2,#00H ;如果加到10后重新从0开始 LJMP LOOP ;进入循环函数 ;****************************************** TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H; 数组 DB 92H,82H,0F8H,80H,90H RET ;****************************************** DELAY: MOV R3,#3 ;延时函数 DE1: MOV R4,#0FFH DE2: MOV R5,#0FFH DJNZ R5,$ DJNZ R4,DE2 DJNZ R3,DE1 RET ;************************************************* END (3)编写程序学习数码管的动态显示,让8只数码管从从左往右显示1、2、3……8。 C语言程序: #include #define uint unsigned int unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表 void delayms(uint x); void zuoyi(); void main() { int i; while(1) { P1=0xfe; for(i=0;i<8;i++) { P2=table[i]; delayms(3); zuoyi(); } } } void delayms(uint x) { uint i,j; for(i=0;i for(j=0;j<110;j++); } void zuoyi() { int a; a=~P1; a=a<<1; P1=~a; } 汇编语言: ;数码管动态显示 ORG 0000H LJMP MAIN ORG 0100H ;P0连接段选,P1节位选 MAIN: MOV R2,#0 ;从0开始显示 MOV P1,#0FEH LOOP: MOV A,R2 MOV DPTR,#TAB1 MOVC A,@A+DPTR MOV P2,A ACALL DELAY INC R2 MOV A,P1 RL A MOV P1,A CJNE R2,#8,LOOP MOV R2,#0 AJMP LOOP ;****************************************** TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H ;数组DB 92H,82H,0F8H,80H,90H RET