流水灯是51单片机的入门级实验,以下是其电路图以及C代码
流水灯proteus电路图
此图发光二极管采用 共阳极式连接
流水灯C代码
#include#define TIME 1
//宏定义秒数,方便更改间隔时间
void delaySec(unsigned char n);
void Movinglight();
unsigned char code MovinglightArray[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char i,n = 1;
int main()
{
Movinglight();
return 0;
}
void Movinglight()
{
while(1)
{
for(i = 0;i < 8;i++)
P1 = MovinglightArray[i];
delaySec(TIME);
}
}
void delaySec(unsigned char n)
{
unsigned int i,j,l;
for(l = 0;l < n;l++)
for(i = 0;i < 1000;i++)
for(j = 0;j < 114;j++);
}/*当n为1时,误差约0.001s*/
授人以鱼不如授人以渔,在此,笔者觉得应该给大家简单剖析一下以上的代码,以方便初学者更加容易更改和理解代码。
我看代码习惯从主函数开始,相信大家大多都是这样的吧?
进入主函数:
1,调用Movinglight函数
进入Movinglight函数:
1,调用while函数,1代表死循环
2,for循环,依次给P1口赋值
初学者一般看不懂0x 加 数字,其实0x 加 数字的意思,0x就是表示后两位是16进制数。
但是单片机处理是按照二进制处理数据的。
所以我们把上述例子转化为字节(即八个二进制位)。
例如,0xfe = 1111 1110;0xfd = 1111 1101。
不要纠结0xfe或者0xfd的,对应单片机来说,P1口的值不重要,这个值包含的位才是控制单片机的关键所在,单片机只在意它所代表的二进制数的位是0还是1。
根据电路图,P1.7对应二进制数的最高位,P1.0对应二进制数的最低位。
拿0xfe举例大家就能更好地理解了。
0xfe = 1111 1110。
分解开来实际上是:
P1.0 = 0
P1.1 = 1
P1.2 = 1
P1.3 = 1
P1.4 = 1
P1.5 = 1
P1.6 = 1
P1.7 = 1
最低位为0,其余为均为1。
那么0和1有什么含义?
以本实验为例,在单片机通电的情况下:
P1.0 = 0 表示这个引脚处为低电平。
其余引脚处则是高电平。
那什么是高低电平呢?
说白了就是高低电势。
其实我认为说成高低电势更容易为广大读者理解。
高低电平是相对的,比如5V相对于0V 是高电平,但是相对于10V 又是低电平。
但是圈子里的所有书都是说电平的。
一般情况下,单片机是5V和0V。
一端高电平,一端低电平才能形成电压,发光二极管才能点亮。两边都是高电平或者两边都是低电平发光二极管都不能被点亮。
通常情况下,通电情况下单片机引脚默认为高电平。
由于发光二极管正极连接公共正电压源,所以只有位为0时,灯才会亮。
以上内容如果有什么谬误,敬请指正。
关键字:51单片机 流水灯 C代码
引用地址:
51单片机流水灯电路以及C代码
推荐阅读最新更新时间:2024-11-07 17:25
51单片机C语言教程(一) 建立第一个工程
学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头疼的事。在众多单片机中51架构的芯片风行很久,学习资料也相对很多,是初学的较好的选择之一。51的编程语言常用的有二种,一种是汇编语言,一种是C语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发 周期 来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。综合以上C语言的优点,我在学习时选择了C语言。以后的教程也只是我在
[单片机]
mcs-51单片机中断优先级寄存器IP
在MCS- 中断 优先级中由 中断 优先级寄存器IP来高置的,IP中某位设为1,相应的中断就是高优先级,否则就是低优先级。 - - - PS PT1 PX1 PT0 PX0 IP优先级别寄存器各位介绍如下: PS:串行口中断优先级控制位。PS=1设定串行口为高优先级中断;PS=0为低优先级中断。 PT1:T1中断优先级控制位。PT1=1设定定时器T1为高优先级中断;PT1=0为低优先级中断。 PX1:外部中断1优先级控制位。PX1=1设定定时器外部中断1为高优先级中断;PX1=0为低优先级中断。 PT0:
[单片机]
MSP430流水灯Ⅰ
#include msp430f149.h unsigned char LED; unsigned int table = {BIT0,BIT1,BIT2,BIT3,BIT4,BIT5,BIT6,BIT7}; void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; LED = 0XFF; P2DIR = 0XFF; P2OUT = LED; while(1) { unsigned int i,j; for(i=0;i 8;i++)
[单片机]
跟我学51单片机(七)——LCD1602液晶显示模块
本刊上期介绍单片机捕获红外遥控器解码方法电路原路和程序设计方法,并给出了实例。这一讲将介绍单片机驱动LCD1602 液晶显示模块。通过该讲,读者可以掌握LCD1602 液晶的工作原理和如何通过单片机来驱动LCD1602 液晶。 一、原理简介 液晶显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点,在嵌入式应用系统中得到越来越广泛的应用,这讲中向大家介绍的LCD1602 液晶显示模块(其内部控制器为HD44780 芯片),它可以显示两行,每行16 个字符,因此可相当于32 个LED 数码管,而且比数码管显示的信息还多。采用单+5V 电源供电,外围电路配置简单,价格便宜,具有很高的性价比。 LCD1602 外
[单片机]
51单片机识别四个独立按键是短按还是长按
这是一个可以识别四个独立按键是短按还是长按的参考程序,此程序已编译通过,初学者可以移植到51单片机上试试. /********************************************/ //FileName:识别四个独立按键是短按还是长按 //Function: 不同按键 短按或长按分别显示不同的LED //author:liu yong //QQ:545018331 //Date:2013/03/13 /********************************************/ #include PIC.H __CONFIG(0X3B31); #define uint8 unsigned
[单片机]
51单片机中断详解(中)
一.外部中断相关寄存器 1.定时器/计数器控制寄存器控制寄存器(TCON) IT0:外部中断0触发方式控制位 当IT0=0时,为电平触发方式(低电平有效) 当IT0=1时,为边沿触发方式(下降沿有效) IT1:外部中断1触发方式控制位 当IT1=0时,为电平触发方式(低电平有效) 当IT1=1时,为边沿触发方式(下降沿有效) 2.中断允许控制寄存器(IE) EX0:外部中断0允许位; EX1:外部中断1允许位; EA :CPU中断允许(总允许)位。 二.外部中断的处理过程 1、设置中断触发方式,即IT0=1或0,IT1=1或0 2、开对应的外部中断,即EX0=1或EX1=1; 3、开总中断,即EA=1; 4、等待外部设备
[单片机]
从零开始51单片机教程 —— 23 单片机串行口通信程序设计
单片机串行口通信程序设计范例及注释 1.串行口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能扩展一个并行口。 单片机串行口通信程序设计硬件连接图 例:用8051单片机串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,能靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起
[单片机]
MCS-51单片机P0口扩展技术研究
0 引言 在单片机家族的众多成员中,MCS-51系列单片机以其优越的性能、成熟的技术、高可靠性和高性价比,占领了工业测控和自动化工程应用的主要市场,并成为国内单片机应用领域中的主流机型。 MCS-51单片机的并行口有P0、P1、P2和P3,由于P0口是地址/数据总线口,P2口是高8位地址线,P3口具有第二功能,这样,真正可以作为双向I/O口应用的就只有P1口了。这在大多数应用中是不够的,因此,大部分MCS-51单片机应用系统设计都不可避免的需要对P0口进行扩展。 由于MCS-51单片机的外部RAM和I/O口是统一编址的,因此,可以把单片机外部64K字节RAM空间的一部分作为扩展外围I/O口的地址空间。这样,单片机就可以像访问
[应用]