/*
名称:51单片机实现LED流水灯(数组方式和位运算方式)
说明:今天又重新开始系统的学习51了,LED就算个开端吧。
要注意两点:
1、sfr和sbit是C语言扩展出来的关键字。其中sfr用于对特殊功能寄存器进行声明,sbit用于对某些特殊功能寄存器的某位进行声明。这里和宏定义很相似,但是不能用宏定义进行替换,对于前者是因为51单片机的寄存器存在于内部空间0x80-0xFF,这空间属于直接寻址,51特殊功能寄存只能直接寻址,不能间接寻址。如果用宏定义的话,在翻译成汇编时就会认为是通过总线访问对应的外部地址了。对于后者,sbit是定义一个标志位,也叫位变量。而类似于#define key1 P3^0就说不通了。
2.对于一般的二极管LED来说,驱动其发光的电流一般为5-30mA。所以一般的发光二极管都接成灌电流的形式,(即电流是流入单片机的,使其对应位为低电平)。但是我用的开发板用的却不是这种形式,(在这里是高电平对应的二极管工作。)但是51单片机IO口输出的电流大小只有1-2mA,为什么足以驱动二极管发光呢(私自以为是中间接了一些能够放大电流的东西)?
*/
#include
#define uchar unsigned char
//延时函数
void delay_ms(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i for(j=0;j<123;j++);
}
//以数组方式实现流水灯
void LEDlightByArray()
{
uchar _data[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar i = 0;
while(1)
{
for(i = 0;i<8;++i)
{
P2 = _data[i];
delay_ms(1000);
}
}
}
//利用位运算实现流水灯
void LEDlightByBitOpe()
{
uchar i = 0;
while(1)
{
P2 = 0x01;
for(i = 0;i<8;++i)
{
delay_ms(1000);
P2 = P2<<1;
}
}
}
int main()
{
//LEDlightByArray();
LEDlightByBitOpe();
return 0;
}
关键字:51单片机 LED流水灯 数组方式 位运算方式
引用地址:
51单片机实现LED流水灯(数组方式和位运算方式)
推荐阅读最新更新时间:2024-03-16 16:09
基于PID算法和51单片机的温度控制系统
0 引 言 温控技术无论是在工业生产,还是日常生活中都起着非常重要的作用。在冶金、石油、化工、电力和现代农业等行业,温度是极为重要而又普遍的热工参数之一,在普通家庭里热水器、电饭煲、电烤箱等依赖于温控技术的家电设备也是必不可少。可以说温度控制技术无处不在。 常规的温度控制方法以设定温度为临界点,超出设定允许范围即进行温度调控:低于设定值就加热,反之就停止或降温。这种方法实现简单、成本低,但控制效果不理想,控制温度精度不高、容易引起震荡,达到稳定点的时间也长,因此,只能用在精度要求不高的场合。 而采用PID算法进行温度控制,它具有控制精度高,能够克服容量滞后的特点,特别适用于负荷变化大、容量滞后较大、控制品质要求又很高的
[单片机]
51单片机之数码管静态显示
在对单片机编程以实现数码管静态显示数字之前,我们先来了解一下数码管的结构以及一些常识,对于数码管,有称八段数码管的,也有称七段数码管的,其实无非就是多在一个小数点h , 如上图所示,我们就拿带小数点的八段数码管来说 ,其实我们没必要说对数码管很陌生,因为数码管无非就是八块发光二极管集成在了一起,另外数码管有共阴极和共阳极数码管之分,说起共阴,共阳,大家可能会有所陌生,这里我们简单介绍一下: 共阴极数码管:将八只发光二极管的负极通过一根总线连接在了一起 , 然后每只二极管的正极被引了出来,通过二极管的单向导通性可知,当对应数码管的二极管段接入高电平时,二极管点亮。(换句话说,也就是说想让哪一只二极管点亮,就给哪只二极管高电平。下
[单片机]
在Linux下搭建51单片机的开发烧写环境
在Linux下没有像keli那样好用的IDE来开发51单片机,开发环境只能自己搭建了。 第一步:安装交叉编译工具 a) 安装SDCC sudo apt-get install sdcc b)测试SDCC是否可用,这是个网上找的简单的流水灯代码 test.c, 用来测试 #include 8051.h #define uint unsigned int #define uchar unsigned char uchar tab = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void Delay(uint xms) { uint i,j; fo
[单片机]
51单片机教程:单片机的特殊功能寄存器
我们已知单片机的内部有ROM、有RAM、有并行I/O口,那么,除了这些东西之外,单片机内部究竟还有些什么,这些个零碎的东西怎么连在一起的,让我们来对单片机内部的寄存器作一个完整的功能分析吧! 下图中我们能看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在一个51单片机的内部包含了这么多的东西。 单片机内部结构图 对上面的图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到对应I/O口的锁存器就能了,那么对于定时/计数器,串行I/O口等怎么用
[单片机]
51单片机实验8:led点阵(2):点亮一个数字图案
开发板led点阵模块电路图如下: 点阵内部led连接方式如下图: led点阵点亮图案仍然使用动态扫描的方式,方法同“51单片机实验5:动态数码管”https://blog.csdn.net/cax1165/article/details/86557551 D0口到D7口依次控制点阵的第8到1行(注意顺序),P0^0到P0^7口依次控制点阵的第8到1列(注意顺序)。 显然,根据点阵内部led连接电路,74HC595控制高电平输出,P0口控制低电平输出。 以移位寄存器74HC595控制段选,P0口控制位选! 注意:写程序时需要考虑74HC595移位寄存器的工作特点。 程序可参考“51单片机实验8:led点
[单片机]
基于51单片机的篮球计分器设计
这是我以前做的51单片机篮球计分器设计, 花了一个星期时间, 附件里面包括源代码;PCB原理图, 和proteus的仿真文件以及课程设计的相关文档, 都是自己原创的,大家多多指教 制作出来的篮球计分器实物图如下: 电路原理图如下: 篮球计分器仿真原理图如下 Altium Designer画的篮球计分器原理图和PCB图如下: 单片机篮球计分器程序源码: #include reg51.h //51单片机头文件 typedef unsigned char uchar; typedef unsigned int uint; sbit K1=P3^2;//比赛倒计时开始/暂停 sbit K2=P3^3;//24s倒计时重新
[单片机]
51单片机---中断系统
一、单片机中断系统 1、基本特点 有5个固定的中断源,其中3个在片内,2个在片外,它们在程序存储器ROM中都分别有各自固定的中断入口地址,由此进入中断服务程序(ISR);这5个固定的中断源都分别有两级中断优先级:高优先级和低优先级;可形成中断嵌套;有2个特殊功能寄存器用于中断控制的编程(IE和IP);对于8052单片机来说,增加了第三个中断源:定时器/计数器T2的中断; 外部中断源: (1)、外部中断0:INT0,由P3.2(12号引脚)口引入,低电平或下降沿触发; (2)、外部中断1:INT1,由P3.3(13号引脚)口引入,低电平或下降沿触发; 这两个外部中断的控制位锁存在定时器/计数器的工作状态控制寄存器TCON的低4位; 内
[单片机]
基于AT89C51单片机的变频调速控制系统设计
1.概述 在电气传动领域中,随着自关断器件技术水平的不断提高,脉宽调制技术(简称PWM技术)也日趋成熟。PMW交流变频调速以其高效率、高功率因数、输出波形好、结构简单等优点,在井下风机、水泵、造纸机等设备中得到了广泛的应用。将单片机应用于交流变频调速系统,可有效地避免传统调速方案中的一些缺点,达到了提高控制精度的目的 ,其特点: (1)采用单片机可以使绝大多数控制逻辑通过软件实现,简化了电路。 (2)单片机具有更强的逻辑功能,运算速度快,精度高,有大容量的存储单元,可以实现较为复杂的控制。 (3)无零点漂移,控制精度高。 (4)可以提供人机界面,多机连网工作。 根据国内外有关变频调速的最
[单片机]