Delay1ms();
}
voidmain()
{
while
(1)
{
P1=0X88;//D0,D1,D2,D4,D5,D6亮,显示0
DelayNms(1000);
P1=0XDB;//D2,D5亮,显示1
DelayNms(1000);
P1=0XA2;//D0,D2,D3,D4,D6亮,显示2
DelayNms(1000);
P1=0X92;//D0,D2,D3,D5,D6亮,显示3
DelayNms(1000);
P1=0XD1;//D1,D2,D3,D5亮,显示4
DelayNms(1000);
P1=0X94;//D0,D1,D3,D5,D6亮,显示5
DelayNms(1000);
P1=0X85;//D1,D3,D4,D5,D6亮,显示6
DelayNms(1000);
P1=0XDA;//D0,D2,D5亮,显示7
DelayNms(1000);
P1=0X80;//D0,D1,D2,D3,D4,D5,D6亮,显示8
DelayNms(1000);
P1=0X90;//D0,D1,D2,D3,D5,D6亮,显示9
DelayNms(1000);
}
}
实验二:
A/D转换实验:
实验程序:
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharADCDat[3];
//ucharbdataADCbase_at_0x2f;
sbitADC=PSW^5;
sbitCOM=P3^1;
voidTran()
{
ucharDat;
Dat=ADCDat[0];
if((Dat&0x40)==0x40)
{
P1=0xFF;P2=0xFF;P3|=0XF0;
return;
}
if((Dat&0x20)==0x20)
{
P1=0x00;P2=0x00;P3|=0X0F;
return;
}
if((Dat&0x80)==0x80)COM=0;
elseCOM=1;
Dat=_crol_(ADCDat[0],4);
Dat=Dat&0xf0;P3&=0X0f;P3|=Dat;
P1=ADCDat[1];P2=ADCDat[2];
return;
}
voidmain()
{
//ADCDat=0x20;
P0=0x0FF;TCON=0x01;IE=0x81;
while
(1)
{
//if(ADC==1)
//{
//ADC=0;Tran();
//}
}
}
voidint0()interrupt0using1
{
ucharDat1;
IE=0x00;
Dat1=P0;
if((Dat1&0xf0)==0)
{
Dat1=_crol_((Dat1&0x0f),4);
ADCDat[0]=(Dat1&0xe0)|(_crol_(Dat1,4))&0x01;
doDat1=P0;
while((Dat1&0x80)==0);
ADCDat[1]=_crol_((Dat1&0x0f),4);
doDat1=P0;
while((Dat1&0x40)==0);
Dat1=Dat1&0x0f;
ADCDat[1]=ADCDat[1]|Dat1;
doDat1=P0;
while((Dat1&0x20)==0);
ADCDat[2]=_crol_((Dat1&0x0f),4);
doDat1=P0;
while((Dat1&0x10)==0);
Dat1=Dat1&0x0f;
ADCDat[2]=ADCDat[2]|Dat1;
ADC=1;
}Tran();
IE=0x81;
}
实验三:
D/A转换实验
实验程序:
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodesine_table[]={0x80,0x8c,0x98,0xa5,0xb0,0xbc,0xc7,0xd1,
0xda,0xe2,0xea,0xf0,0xf6,0xfa,0xfd,0xff,
0xff,0xff,0xfd,0xfa,0xf6,0xf0,0xea,0xe3,
0xda,0xd1,0xc7,0xbc,0xb1,0xa5,0x99,0x8c,
0x80,0x73,0x67,0x5b,0x4f,0x43,0x39,0x2e,
0x25,0x1d,0x15,0xf,0x9,0x5,0x2,0x0,0x0,
0x0,0x2,0x5,0x9,0xe,0x15,0x1c,0x25,0x2e,
0x38,0x43,0x4e,0x5a,0x66,0x73};
sbitK1=P2^7;
sbitWR1=P2^5;
voidDelay(ucharx)
{
uchari;
while(--x)for(i=0;i<1;i++);
}
voidmain()
{
uchark;
while
(1)
{
if(K1==0)
{
for(k=0;k<64;k++)
{
WR1=1;
P0=sine_table[k];
WR1=0;
Delay
(1);
}
}
else
{
for(k=0;k<255;k=k+4)
{
WR1=1;
P0=sine_table[k];
WR1=0;
Delay
(1);
}
}
}
}
实验四:
步进电机实验
实验程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeFFW[]={0X03,0X02,0X06,0X04,0X0C,0X08,0X09,0X01,};
ucharcodeREV[]={0X01,0X09,0X08,0X0C,0X04,0X06,0X02,0X03,};
sbitK1=P3^0;
sbitK2=P3^1;
sbitK3=P3^2;
voiddelay_ms(uintx)
{
uchart;
while(x--)
for(t=0;t<120;t++);
}
voidSTEP_MOTOR_FFW(ucharn)
{
uchari,j;
for(i=0;i<1*n;i++)
{
for(j=0;j<8;j++)
{
if(K3==0)break;
P1=FFW[j];
delay_ms(200);
}
}
}
voidSTEP_MOTOR_REV(ucharn)
{
uchari,j;
for(i=0;i<1*n;i++)
{
for(j=0;j<8;j++)
{
if(K3==0)break;
P1=REV[j];
delay_ms(200);
}
}
}
voidmain()
{
ucharn=3;
while
(1)
{
if(K1==0)
{
P0=0XFE;
STEP_MOTOR_FFW(n);
//if(K3==0)break;
}
elseif(K2==0)
{
P0=0XFD;
STEP_MOTOR_REV(n);
//if(K3==0)break;
}
else
{
P0=0XFb;
//P1=0X03;
}
}
}
实验五、六:
热电阻测温装置
实验程序:
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitCS=P3^3;//使能。
sbitCLK=P3^0;//时钟
sbitDO=P3^1;//数据输出
sbitDI=P3^1;//数据输入
charCC[]="11001001";
uchartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
ucharcodetab2[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchartemp;
uintvvv,i;
uinttem;
//通道的选择:
0x02就是单通道0;0x03就是单通道1;
//0x00就是双通道ch0="+";ch0="-"
//0x01就是双通道ch0="-";ch0="+"
voiddelay(inttt)//延时
{
while(tt--)
{for(i=0;i<120;i++);}
}
voidstartADC()
{
CS=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
CS=0;
_nop_();
_nop_();
DI=1;
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
DI=0;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
}
voidchoiceADC(uintCH)//CH为0选择通道ch0,为1,选择ch1进行AD转换
{
startADC();
if(CH==0)
{
DI=1;
_nop_();
CLK=1;//上升沿DI=1
_nop_();
CLK=0;//1个下降沿DI=1
_nop_();
DI=0;
_nop_();
CLK=1;
_nop_();
CLK=0;//第3个上升沿DI=0
_nop_();
}
else
{
CLK=0;
_nop_();
DI=1;
_nop_();
CLK=1;//上升沿DI=1
_nop_();
CLK=0;//1个下降沿DI=1
_nop_();
DI=1;
_nop_();
CLK=1;//第3个上升沿DI=0
_nop_();
}
/********通道选择结束开始读取转换后的二进制数****/
CLK=1;
_nop_();
CLK=0;//下降沿读数,一下进行判断和处理,共8次
for(i=0;i<8;i++)
{
DI=1;
if(DO)
{
temp|=0x01;
}
else
{
temp&=0xfe;
}
CLK=0;
_nop_();
CLK=1;
temp=temp<<1;
}
vvv=temp;
}
voiddisplay(uintdat)
{
P2=0xfb;
//P0=tab2[dat/100];
P0=(dat/100);
delay
(1);
//P0=0xff;
P2=0xfd;
//P0=tab2[dat%100/10];
P0=(dat%100/10);
delay
(1);
//P0=0xff;
P2=0xfe;
//P0=tab2[dat%10];
P0=(dat%10);
delay
(1);
//P0=0xff;
}
voidmain()
{
P2=0x00;
P0=0xff;
while
(1)
{
choiceADC(0);
delay
(1);
tem=29013-100*sqrt(336701-(longint)(785012*vvv/10000)+578)/2;
display(tem);
//display(vvv);
}
}
实验七:
串口通信实验
实验程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharrb[101];
ucharbi=0;
ucharcodedis[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
ucharcodeLEDTABVCC[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
voiddelay(ucharm)
{
uchari;
while(--m)
for(i=0;i<120;i++);
}
voidmain()
{
uchari,a;
P0=0Xff;
rb[0]=0x0a;
SCON=0X50;
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
PCON=0X00;
IE=0X91;
IT0=1;
IP=0X01;
TR1=1;
while
(1)
{P2=0X01;
for(i=0;i<6;i++)
{if(i==0)P2=0X01;
if(rb[i]==0x0a)
break;
P0=LEDTABVCC[rb[i]];
delay(10);
//i++;
P2=_crol_(P2,1);
//P2=a;
}
//P0=0X00;
bi=0;
}
}
voiduart()interrupt4
{
ucharc;
if(RI==0)
return;
RI=0;
c=SBUF;
if(c>='0'&&c<='9')
{
rb[bi]=c-'0';
rb[bi+1]=0x0a;
bi=(bi+1)%100;
}
}
voidex0()interrupt0
{
uchar*s="单片机与串口调试助手之间的通信!
\r\n";
uchari=0;
while(s[i]!
='\0')
{
SBUF=s[i];
while(TI==0);
TI=0;
i++;
}
}