由于C語言的結(jié)構(gòu)性與可移植性強,所以主體框架采用C語言
另一方面,由于匯編延時計算比較精準,故采用匯編作為延時程序
首先先看開發(fā)板電路圖
1.138譯碼器,提供片選信號
s.png (42.5 KB, 下載次數(shù): 40)
下載附件
2018-11-28 21:01 上傳
2.數(shù)碼管,提供位選
d.png (76.04 KB, 下載次數(shù): 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() /*本函數(shù)延遲為1MS*/
{
#pragma asm /*嵌套匯編開始的標識符*/
DEL3:MOV R0,#1 /*這段為循環(huán)DEL2的次數(shù)*/
DEL2:MOV R1,#10 /*最內(nèi)層為100微秒,R1的數(shù)為循環(huán)100微秒的次數(shù)*/
DEL1:MOV R2,#25
DEL0:NOP
NOP
DJNZ R2,DEL0
DJNZ R1,DEL1
DJNZ R0,DEL2
#pragma endasm /*嵌套匯編結(jié)束的標識符*/
}
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(); /*采用動態(tài)顯示,因為單片機一次操作只能顯示1片數(shù)碼管,1MS交替顯示第一位和第二位數(shù)碼管*/
LSA=0;
LSB=0;
LSC=0;
display(y);
del();
ps=ps+1;
}
y=y+1;
}
x=x+1;
}
}
}
注:C嵌套匯編步驟
1.打開c文件的設(shè)置
a.png (22 KB, 下載次數(shù): 28)
下載附件
2018-11-28 20:53 上傳
2.把這兩項點擊兩次到選項變黑(不是灰)
b.png (19.25 KB, 下載次數(shù): 27)
下載附件
2018-11-28 20:56 上傳
3.本程序還需在source group里添加另一個文件
3.png (20.91 KB, 下載次數(shù): 37)
下載附件
2018-11-28 20:56 上傳
該文件在keil下C51文件夾下的lib文件夾,有時需要加其他lib文件,可以看我另一個帖子http://www.torrancerestoration.com/bbs/dpj-143426-1.html
|