|
|
由于C語言的結(jié)構(gòu)性與可移植性強(qiáng),所以主體框架采用C語言
另一方面,由于匯編延時計(jì)算比較精準(zhǔn),故采用匯編作為延時程序
首先先看開發(fā)板電路圖
1.138譯碼器,提供片選信號
2.數(shù)碼管,提供位選
程序如下:
#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 /*嵌套匯編開始的標(biāo)識符*/
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é)束的標(biāo)識符*/
}
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)顯示,因?yàn)閱纹瑱C(jī)一次操作只能顯示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è)置
2.把這兩項(xiàng)點(diǎn)擊兩次到選項(xiàng)變黑(不是灰)
3.本程序還需在source group里添加另一個文件
該文件在keil下C51文件夾下的lib文件夾,有時需要加其他lib文件,可以看我另一個帖子http://www.raoushi.com/bbs/dpj-143426-1.html
|
評分
-
查看全部評分
|