单片机学习程序_第1页
单片机学习程序_第2页
单片机学习程序_第3页
单片机学习程序_第4页
单片机学习程序_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/* 普中科技-* 实 验 名 : LED闪烁的简单试验* 实验说明 : 得到8盏LED交替亮灭的实验效果* 连接方式 : 见连接图* 注 意 : */-包含你要使用的头文件-/#include <reg51.h> /此文件中定义了51的一些特殊功能寄存器/-声明全局函数-/void Delay10ms(unsigned int c); /延时10ms/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main() while(1)/-数字前面加0x表示该数是十六进制的数,0x00就是十六进制的00-/-P2口一共有8个IO口,即

2、从P2.0到P2.7,而0x00二进制就是0000 0000-/-效果就是P2.0到P2.7都是0,即低电平。而如果你想给P2.1口赋高电平时-/-二进制就是0000 0001,就是十六进制0x01.-/P0 = 0x00; /置P0口为低电平Delay10ms(500); /调用延时程序,修改括号里面的值可以调整延时时间P0 = 0xff; /置P0口为高电平Delay10ms(50); / 调用延时程序/* 函 数 名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输 入 : 无* 输 出 : 无*/void Delay10ms(unsigned int c) /误差

3、0us unsigned char a, b;/-c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* 普中科技-* 实 验 名 : LED二进制加法显示实验* 实验说明 : LED灯做二进制加1显示* 连接方式 : 见接线图* 注 意 : */#include <reg52.h>/-声明全局函数-/void Delay10ms(unsigned int c); /延时10ms/* 函 数 名 : main* 函数功能 : 主函数* 输 入

4、 : 无* 输 出 : 无*/void main() unsigned char Num = 0x00; while (1) P0 = Num; Delay10ms(50); /延时函数 Num+; /* 函 数 名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输 入 : 无* 输 出 : 无*/void Delay10ms(unsigned int c) /误差 0us unsigned char a, b;/-c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=

5、130;a>0;a-); /* * 普中科技-* 实 验 名 : 流水灯实验* 实验说明 : 延时实现LED流水灯效果P2口八个灯作跑马灯。采用了寄存器存中间数* 连接方式 : 见接线图* 注 意 : */-包含你要使用的头文件#include <reg52.h> /此文件中定义了51的一些特殊功能寄存器#include <intrins.h>/-声明全局函数-/void Delay10ms(unsigned int c); /延时10ms /* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/main()unsigned

6、char LED;LED = 0xfe; /0xfe = 1111 1110 while (1) P0 = LED; Delay10ms(50); LED = LED << 1; /循环右移1位,点亮下一个LED "<<"为左移位 if (P0 = 0x00)/当它全灭的时候,重新赋值 LED = 0xfe; / 0xfe = 1111 1110 /* 函 数 名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输 入 : 无* 输 出 : 无*/void Delay10ms(unsigned int c) /误差 0us unsi

7、gned char a, b;/-c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* * 普中科技-* 实 验 名 : LED二进制加法显示实验* 实验说明 : LED灯做右移跑马灯* 连接方式 : 见接线图* 注 意 : */-包含你要使用的头文件#include <reg51.h>#include <intrins.h>/-声明全局函数-/void Delay10ms(unsigned int c); /延时10ms/*

8、函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void)unsigned char LED;LED = 0xFE;while(1)P0 = LED;Delay10ms(50);LED = _crol_(LED,1); /循环右移1位,点亮下一个LED 此函数于库函数/* 函 数 名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输 入 : 无* 输 出 : 无*/void Delay10ms(unsigned int c) /误差 0us unsigned char a, b;/-c已经在传递过来的时候已经赋值了

9、,所以在for语句第一句就不用赋值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* * 普中科技-* 实 验 名 : 跑马灯实验* 实验说明 : LED灯做跑马灯左右移动* 连接方式 : 见接线图* 注 意 : */-包含你要使用的头文件#include <reg52.h>/-声明全局函数-/void Delay10ms(unsigned int c); /延时10ms/-声明一个全局变量-/unsigned char LED;/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无*

10、 输 出 : 无*/void main() unsigned char i; /-首先赋值LED-/LED = 0xFE;while (1) /-LED往左闪烁-/ for (i = 0 ;i < 7 ; i+) /-将LED 的值赋给P2口-/P0 = LED;Delay10ms(50); /延时一下,为了让灯有持续点亮的时间LED = LED << 1; / 将LED里面的值左移一位,然后重新赋给LEDLED = LED | 0x01; / 移位后,前面的位为高电平/-LED向右显示-/for (i = 0 ;i < 7 ; i+)P0 = LED;Delay10m

11、s(50);LED = LED >> 1; / 右移LED = LED | 0x80; / 移位后,后面的位为高电平 /* 函 数 名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输 入 : 无* 输 出 : 无*/void Delay10ms(unsigned int c) /误差 0us unsigned char a, b;/-c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* * 普中科技-* 实 验 名 :

12、 独立按键控制LED实验* 实验说明 : 每个按键控制一个LED* 连接方式 : 见接线图* 注 意 : */-包含你要使用的头文件-/#include <reg51.h> /此文件中定义了51的一些特殊功能寄存器#include <intrins.h>/-定义要使用的IO口-/#define GPIO_KEY P1 /独立键盘用P1口#define GPIO_LED P0 /led使用P0口/-声明全局函数-/void Delay10ms(unsigned int c); /延时10msunsigned char Key_Scan();/* 函 数 名 : main*

13、 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void)unsigned char ledValue, keyNum;ledValue = 0x01;while (1)keyNum = Key_Scan(); /扫描键盘switch (keyNum)case(0xFE) : /返回按键K1的数据ledValue = 0x01;break;case(0xFD) : /返回按键K2的数据ledValue = 0x02;break;case(0xFB) : /返回按键K3的数据ledValue = 0x04;break;case(0xF7) : /返回按键K4的数

14、据ledValue = 0x08;break;case(0xEF) : /返回按键K5的数据ledValue = 0x10;break;case(0xDF) : /返回按键K6的数据ledValue = 0x20;break;case(0xBF) : /返回按键K7的数据ledValue = 0x40;break;case(0x7F) : /返回按键K8的数据ledValue = 0x80;break;default:break;GPIO_LED = ledValue;/点亮LED灯/* 函 数 名 : Key_Scan()* 函数功能 : 扫描键盘* 输 入 : 无* 输 出 : 读取到的键

15、值*/unsigned char Key_Scan()unsigned char keyValue = 0 , i; /保存键值/-检测按键1-/if (GPIO_KEY != 0xFF)/检测按键K1是否按下Delay10ms(1);/消除抖动if (GPIO_KEY != 0xFF)/再次检测按键是否按下keyValue = GPIO_KEY;i = 0;while (i<50) && (GPIO_KEY != 0xFF) /检测按键是否松开Delay10ms(1);i+;return keyValue; /将读取到键值的值返回/* 函 数 名 : Delay10ms

16、* 函数功能 : 延时函数,延时10ms* 输 入 : 无* 输 出 : 无*/void Delay10ms(unsigned int c) /误差 0us unsigned char a, b;/-c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* * 普中科技-* 实 验 名 : LED显示键值实验* 实验说明 : 8个LED显示读取的8个按键的值* 连接方式 : 见接线图* 注 意 : */-包含你要使用的头文件-/#include <r

17、eg51.h> /此文件中定义了51的一些特殊功能寄存器#include <intrins.h>/-定义要使用的IO口-/#define GPIO_KEY P1 /独立键盘用P1口#define GPIO_LED P0 /led使用P0口/-定义全局函数-/void Delay10ms(unsigned int c); /延时10msunsigned char Key_Scan();/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void)unsigned char ledValue, keyNum;ledVa

18、lue = 0x00;while (1)keyNum = Key_Scan(); /扫描键盘if (keyNum != 0) /有按键按下ledValue = keyNum;GPIO_LED = ledValue;/点亮LED灯/* 函 数 名 : Key_Scan()* 函数功能 : 扫描键盘* 输 入 : 无* 输 出 : 读取到的键值*/unsigned char Key_Scan()unsigned char keyValue = 0 , i; /保存键值/-检测按键1-/if (GPIO_KEY != 0xFF)/检测按键K1是否按下Delay10ms(1);/消除抖动if (GPI

19、O_KEY != 0xFF)/再次检测按键是否按下keyValue = GPIO_KEY;i = 0;while (i<50) && (GPIO_KEY != 0xFF) /检测按键是否松开Delay10ms(1);i+;return keyValue; /将读取到键值的值返回/* 函 数 名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输 入 : 无* 输 出 : 无*/void Delay10ms(unsigned int c) /误差 0us unsigned char a, b;/-c已经在传递过来的时候已经赋值了,所以在for语句第一句就不

20、用赋值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* * 普中科技-* 实 验 名 : 按键选择LED花样显示实验* 实验说明 : 每个按键控制选择一种LED显示效果* 连接方式 : 见接线图* 注 意 : */-包含你要使用的头文件-/#include <reg51.h> /此文件中定义了51的一些特殊功能寄存器#include <intrins.h>/-定义要使用的IO口-/#define GPIO_KEY P1 /独立键盘用P1口#define GPIO_LED P0 /led使用

21、P0口/-定义全局函数-/void Delay10ms(unsigned int c); /延时10msunsigned char Key_Scan();void LED1();void LED2();void LED3();void LED4();void LED5();void LED6();void LED7();void LED8();/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void)unsigned char keyNum;while (1)keyNum = Key_Scan(); /扫描键盘switch (k

22、eyNum)case(0xFE) : /返回按键K1的数据LED1();break;case(0xFD) : /返回按键K2的数据LED2();break;case(0xFB) : /返回按键K3的数据LED3();break;case(0xF7) : /返回按键K4的数据LED4();break;case(0xEF) : /返回按键K5的数据LED5();break;case(0xDF) : /返回按键K6的数据LED6();break;case(0xBF) : /返回按键K7的数据LED7();break;case(0x7F) : /返回按键K8的数据LED8();break;defaul

23、t:break;/* 函 数 名 : Key_Scan()* 函数功能 : 扫描键盘* 输 入 : 无* 输 出 : 读取到的键值*/unsigned char Key_Scan()unsigned char keyValue = 0 , i; /保存键值/-检测按键1-/if (GPIO_KEY != 0xFF)/检测按键K1是否按下Delay10ms(1);/消除抖动if (GPIO_KEY != 0xFF)/再次检测按键是否按下keyValue = GPIO_KEY;i = 0;while (i<50) && (GPIO_KEY != 0xFF) /检测按键是否松开

24、Delay10ms(1);i+;return keyValue; /将读取到键值的值返回/* 函 数 名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输 入 : 无* 输 出 : 无*/void Delay10ms(unsigned int c) /误差 0us unsigned char a, b;/-c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* 函 数 名 : LED1* 函数功能 : LED左移闪烁两次* 输 入 :

25、 无* 输 出 : 无*/void LED1()unsigned char i;GPIO_LED = 0x01;for (i=0; i<16; i+)GPIO_LED = _crol_(GPIO_LED, 1);Delay10ms(5);/* 函 数 名 : LED2* 函数功能 : LED右移闪烁两次* 输 入 : 无* 输 出 : 无*/void LED2()unsigned char i;GPIO_LED = 0x80;for (i=0; i<16; i+)GPIO_LED = _cror_(GPIO_LED, 1);Delay10ms(5);/* 函 数 名 : LED3*

26、 函数功能 : LED交替闪烁* 输 入 : 无* 输 出 : 无*/void LED3()GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);/* 函 数 名 : LED4* 函数功能 : LED交替闪烁* 输 入 : 无* 输 出 : 无*/void LED4()GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);/* 函 数 名 : LED5* 函数功能 : LED交替闪烁* 输 入 : 无* 输 出 : 无*/void LED5()GPIO_LED = 0xCC;Delay10ms(5);GPIO_LED = 0x33;Delay10ms(5);GPIO_LED = 0xCC;Delay10ms(5);GPIO_LED = 0x33;Delay10ms(5);/* 函 数 名 : LED6* 函数功能 : LED交替闪烁* 输 入 : 无* 输 出 : 无*/void LED6()GPIO_LE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论