当前位置:文档之家› 单片机课程设计例题1-流水灯

单片机课程设计例题1-流水灯


+5V R9 10K C1 4.7u C3 30p C2 30p Y1 12MHz
9 18 19
图4­5 流水灯电路图
3. 电路元件使用介绍
n n
n n n n
(1)发光二极管简介 发光二极管(LED)是一种能直接将 是一种能直接将 +5V 电能转化为光能的显示器件 电能转化为光能的显示器件,当内 部有电流通过时,它就会发光 它就会发光。常 R 见的发光二极管有发红色的 见的发光二极管有发红色的、绿色 的、黄色的等。 LED 作用: 将电能转化为光能(电 将电能转化为光能 —光) 工作条件: 图4­6 LED点亮电路图 工作电流Ig :一般为5~ ~20mA 发光二极管压降Vg:一般为 一般为1.5~ 2.0V之间
n n n n n n n n n n n
(2)限流电阻R阻值的计算与选取 阻值的计算与选取: 图4-6是LED点亮电路图, ,电源按在单片机应用电 路的电源考虑,电源电压选 电源电压选+ 5 V, R为限流电阻。 因Ig为5~20mA、管压降 管压降Vg为1.5~2.0V 根据欧姆定律可得: R= (Vcc - Vg)/ Ig; 则Rmin最小值时,Ig应最大 应最大,管压降Vg也最大 Rmax最大值时,Ig应最小 应最小,管压降Vg也最小 所以有: Rmin=(5-2)V/20mA=3/20KΩ=150Ω 2)V/20mA=3/20KΩ=150Ω Rmax=(5-1.5)V/5mA=3.5/5KΩ=700Ω 1.5)V/5mA=3.5/5KΩ=700Ω 限流电阻R取值范围:150Ω< 150Ω< R < 700Ω。这里选 700Ω 取R为330欧姆,发光二极管工作电流约 发光二极管工作电流约10mA。
5.程序仿真
n
在Keil集成开发环境中, ,输入上述源程序并命名 为lm4-1.c,建立名为lm4 lm4-1的工程并将lm4-1.c加 入工程中,经编译、链接后进入调试状态 链接后进入调试状态,打开 Parallel Port1对话框, ,观察P1口的电平变化, 应出现有1位低电平在循环移动 位低电平在循环移动 。
4.程序设计
(1)流程图
开 始 初 值 ->变 量 J 左 移 "或 "0x01 变 量 J数 据 处 理 J->P1口 延 时 J=FFH? Y J=FEH N J->P1口 延 时 N 开 始 置 变 量 J=FEH 左 移 "或 "0x01 J=FFH? Y J=FEH
(a)最初的流程图 (b)变量J数据处理 图4­7 例题1程序流程图
(c)流程图
n
n n n n n
பைடு நூலகம்
(2)C语言程序
#include<regx51.h> void delay (void) //延时约 延时约0.5s { unsigned int i, j; //声明局部变量 声明局部变量i,j for (i = 0; i < 500; i++) q for (j = 0; j < 120; j++); // for循环嵌套 } void main (void ) { q unsigned char j = 0xFE; //声明变量 声明变量j并赋初值,j=11111110, q while (1) q { n j = ( j<<1 ) | 0x01 ; //变量 变量j左移一位与0x01进行“或”运算 n if (j == 0xFF ) j = 0xFE ; n P1 = j ; //将变量j的内容输出到 的内容输出到P1口,控制LED的点亮与熄灭 q delay ( ) ; //调用函数 调用函数delay() q } }
单片机课程设计
例题1-流水灯
4.2.1例题1-流水灯 流水灯
n n n n n
P1口连接8支发光二极管 支发光二极管,轮流点亮,循环往复。 1.教学目的: (1)学会使用P1口输出数据 口输出数据,点亮发光二极管。 (2)编写延时函数delay( delay( ),实现程序延时。 ) (3)学习使用keil C51软件仿真 软件仿真,观察P1口的输 出状态变化。
6。习题
n
编写从左至右循环点亮的程序。 编写从左至右循环点亮的程序
2.电路图
R8 R7 R6 R5
+5V 330 x 8
39 38 37 R1 36 35 34
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 IC1 AT89S51
P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P3.0/RXD P3.1/TXD
21 22 23 24 25 26 27 28 10 11
R4
R3
R2
LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
33 P0.6 32 P0.7 1 P1.0 2 3 4 5 6 7 8 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST XTAL1 XTAL2
P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.5/T1 15 P3.6/WR 16 P3.7/RD 17 ALE/PROG PSEN EA/VPP 30 29 31 +5V
n n n
n
n
(3)程序说明
n
n
n
①#include<regx51.h> regx51.h头文件包含 了AT89S51所有特殊功能寄存器的名称定义和 相对应的地址。 ②unsigned char j=0xFE unsigned char j=0xFE ;语句让变量j的内容 等于11111110。 ③表达式j<<1将变量j的每一位往左移一位,移 的每一位往左移一位 动之后j右边会移入0。若 若j为0xFE,移位之后,j 变成0xFC,即11111100 11111100 如图4­8所示。 n 0xFE 11111110 n 0xFC 11111100 图4­8变量左移位示意图
④语句j=(j<<1)|0x01将变量j的每一位左移一位之 后,再与0x01执行OR操作,结果变量 操作 j的内容等 于11111101,送往P1口则P1.1引脚为低电平,该 引脚连接的LED被点亮。 。 ⑤当0移到最左边时,再执行语句 再执行语句j=(j<<1)|0x01时, 变量j就变成0xFF,这个数据送给 这个数据送给P1口,8个发光 二极管将全部熄灭,此时必须把 此时必须把 j置成0xFE送给 P1,使得P1.0引脚连接的LED被点亮,因此要加 语句if(j==0xFF) j=0xFE 来判断这一情况。
相关主题