由于C语言的结构性与可移植性强,所以主体框架采用C语言
另一方面,由于汇编延时计算比较精准,故采用汇编作为延时程序
首先先看开发板电路图
1.138译码器,提供片选信号
2.数码管,提供位选
程序如下:
#include "reg52.h"
#include<intrins.h>
sbit beep=P1^5;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char tbs[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void del() /*本函数延迟为1MS*/
{
#pragma asm /*嵌套汇编开始的标识符*/
DEL3:MOV R0,#1 /*这段为循环DEL2的次数*/
DEL2:MOV R1,#10 /*最内层为100微秒,R1的数为循环100微秒的次数*/
DEL1:MOV R2,#25
DEL0:NOP
NOP
DJNZ R2,DEL0
DJNZ R1,DEL1
DJNZ R0,DEL2
#pragma endasm /*嵌套汇编结束的标识符*/
}
void display(int i)
{
P0=tbs[ i];
}
void main()
{
int x,y,ps;
while(1)
{
x=0;
while(x<=5)
{
y=0;
while(y<=9)
{ ps=0;
while(ps<500) /* 500*2*1ms=1s 即延迟一秒y值+1 */
{
LSA=1;
LSB=0;
LSC=0;
display(x);
del(); /*采用动态显示,因为单片机一次操作只能显示1片数码管,1MS交替显示第一位和第二位数码管*/
LSA=0;
LSB=0;
LSC=0;
display(y);
del();
ps=ps+1;
}
y=y+1;
}
x=x+1;
}
}
}
注:C嵌套汇编步骤
1.打开c文件的设置
2.把这两项点击两次到选项变黑(不是灰)
3.本程序还需在source group里添加另一个文件
该文件在keil下C51文件夹下的lib文件夹,有时需要加其他lib文件,可以看我另一个帖子http://www.51hei.com/bbs/dpj-143426-1.html
|