单片机实验及proteus仿真_C语言篇..doc
文本预览下载声明
单片机实验:
说明,以下是我整理了一些在学习单片机的过程中所做的一些典型的实验,所有程序均用C语言编写,为了方便,在仿真时电路能省的都被省掉了(比如省去晶振用了外部时钟)。程序不一定很优化,也不一定完全没有错误,仅供大家参考。
希望大家一块学习!!!!
第一:I/O操作篇
实验一.闪烁的灯
图:
程序:
#include AT89X51.H
void delay02s();
void main(void)
{while(1)
{P1_0=0; //P1.0=0 led点亮
delay02s(); //延时0.2s
P1_0=1; //P1.0=1 led熄灭
delay02s(); //延时0.2s
}
}
void delay02s(void) //延时0.2s的函数
{unsigned char i,j,k;
for(j=20;j0;j--)
for(i=20;i=0;i--)
for(k=248;k=0;k--);
}
实验二:模拟开关
程序:
#include AT89X51.H
void main()
{
while(1)
{if (P1_7==0) P1_0 = 0;//key按下P1_7=0,led点亮
else if ( P1_7==1) P1_0 = 1;//key弹起P1_7=1,led熄灭
}
}
实验三: 多路开关
程序:
#include AT89X51.H
void main()
{while(1)
{P1_0 = P1_7;
P1_1 = P1_6;
P1_2 = P1_5;
P1_3 = P1_4;
}
}
实验四:跑马灯(一)
图:
程序:
//单一灯的左移右移
//八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上
//输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。
#include AT89X51.H
void delay02s();
void main()
{unsigned int a;
while (1)
{P1=0xfe;
delay02s();
for(a=7;a0;a--)//右移
{P1=(P11)+1;
delay02s();
}
for(a=6;a0;a--)//左移
{P1=(P11)+0x80;
delay02s();
}
}
}
void delay02s()
{unsigned int i,j,k;
for(i=0;i20;i++)
for(j=0;j20;j++)
for(k=0;k248;k++);
}
实验五:跑马灯(二、查表方式)
图:
程序:
#include AT89X51.H
void delay02s();
void main()
{unsigned char table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, //第一次,右移一行
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, //第二次,右移一行
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, //第一次,左移一行
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, //第二次,左移一行
0x00,0xff,0x00,0xff}; //闪烁两次
unsigned char a;
while(1)
{ for (a=0;a35;a++)
{P1=table[a];
delay02s();
}
}
}
void delay02s()
{unsigned char i,j,k;
for(i=20;i0;i--)
for(j=20;j0;j--)
for(k=248;k0;k--);
}
实验六:led计数
程序:
#include AT89X51.H
void delay02s();
void main()
{unsigned char code table[]={0x40,0xf9,0x24,0x30,0x19,0x12,
显示全部