由于C語言的結構性與可移植性強,所以主體框架采用C語言
另一方面,由于匯編延時計算比較精準,故采用匯編作為延時程序
首先先看開發板電路圖
1.138譯碼器,提供片選信號
s.png (42.5 KB, 下載次數: 40)
下載附件
2018-11-28 21:01 上傳
2.數碼管,提供位選
d.png (76.04 KB, 下載次數: 34)
下載附件
2018-11-28 21:01 上傳
程序如下:
#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文件的設置
a.png (22 KB, 下載次數: 28)
下載附件
2018-11-28 20:53 上傳
2.把這兩項點擊兩次到選項變黑(不是灰)
b.png (19.25 KB, 下載次數: 27)
下載附件
2018-11-28 20:56 上傳
3.本程序還需在source group里添加另一個文件
3.png (20.91 KB, 下載次數: 37)
下載附件
2018-11-28 20:56 上傳
該文件在keil下C51文件夾下的lib文件夾,有時需要加其他lib文件,可以看我另一個帖子http://www.zg4o1577.cn/bbs/dpj-143426-1.html
|