文档详情

单片机实验及proteus仿真_C语言篇..doc

发布:2017-01-17约8.43千字共22页下载文档
文本预览下载声明
单片机实验: 说明,以下是我整理了一些在学习单片机的过程中所做的一些典型的实验,所有程序均用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,
显示全部
相似文档