单片机实验程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一LED流水灯
一、实验目的
制作一个流水灯,编写程序来控制发光二极管由上至下的反复循环流水点亮,每次点亮一个发光二极管。
二、程序设计
#include
#include
sbit LED = P1^0;
void delay()
{
unsigned int i,j;
for(i=120;i>0;i++)
for(j=120;j>0;j++);
}
void main()
{
unsigned char i;
LED = 0;
while(1)
{
for(i=0;i<8;i++)
{
LED=0xfe;
delay( );
LED = _crol_(LED,1);
P1 = LED;
}
LED=0X01;
for(i=0;i<8;i++)
{
delay( );
LED = _cror_(LED,1);
P1 = LED;
}
}
}
实验二按键扫描
一、实验目的
使用单片机片内的I/O口来进行开关状态的检测。当开关打开时,I/O引脚为高电平,当开关闭合时,I/O引脚为低电平。编写一个程序,控制流水灯,开关闭合,对应的发光二极管点亮。
二、程序设计
#include
#include
#define GPIO_LED P1
sbit K1=P3^5;
sbit K2=P3^4;
void Delay10ms( );
void main(void)
{
unsigned int i,j,l;
j=0xfe;
while(1)
{
GPIO_LED=j;
if (K1==0)
{
Delay10ms( );
if (K1==0)
{
j=_cror_(j,1);
while((i<50)&&(K1==0))
{
Delay10ms( );
i++;
}
i=0;
}
}
if (K2==0)
{
Delay10ms( );
if (K2==0)
{
l=0xff;
GPIO_LED=~l;
while((i<500)&&(K2==0))
{
Delay10ms( );
i++;
}
}
}
}
}
void Delay10ms(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
{
for(b=38;b>0;b--)
{
for(a=130;a>0;a--);
}
}
}
实验三数码管数码管动态计数
一、实验目的
单片机控制数码管,程序运行时,让数码管进行动态计数0~99。
二、程序设计
#include
#define GPIO_DIG P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char code DIG_CODE[7]={0x66,0x06,0x4f,0x06,0X3f,0x5b,0x6d};//{0x06,,0x7d,0x07,0x7f,0x 6f};
unsigned char DisplayDate[7];
void DigDisplay();
void main(void)
{
unsigned char i;
for(i=0;i<7;i++)
{
DisplayDate[i]=DIG_CODE[i];
}
while(1)
{
DigDisplay();
}
}
void DigDisplay()
{
unsigned char i;
unsigned int j;
for(i=0;i<7;i++)
{
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0; break;
case(1):
LSA=1;LSB=0;LSC=0; break;
case(2):
LSA=0;LSB=1;LSC=0; break;
case(3):
LSA=1;LSB=1;LSC=0; break;
case(4):
LSA=0;LSB=0;LSC=1; break;
case(5):
LSA=1;LSB=0;LSC=1; break;
case(6):
LSA=0;LSB=1;LSC=1; break;
}
GPIO_DIG=DisplayDate[i];
j=10;
while(j--);
GPIO_DIG=0x00;
}
}