单片机32个IO口流水灯C程序

合集下载

单片机c语言编程控制流水灯

单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。

那个单片机究竟有什么功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^)我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。

一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。

#include<reg51.h> //头文件定义。

或用#include<at89x51.h>其具体的区别在于:后者定义了更多的地址空间。

//在Keil安装文件夹中,找到相应的文件,比较一下便知!sbit P1_0 = P1 ^ 0; //定义管脚void main (void){while(1){P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效}}就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。

因为我们把LED的正通过电阻接至VCC。

P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。

那么这样就能达到了我们预先的要求了。

while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。

如果我们要试着点亮其他的LED,也类似上述语句。

这里就不再讲了。

点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。

我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。

假设我们有8个LED分别接在P1口的8个引脚上。

硬件连接,在P1_1--P1_7上再接7个LED即可。

例程如下:#include<reg51.h>sbit P1_0 = P1 ^ 0;sbit P1_1 = P1 ^ 1;sbit P1_2 = P1 ^ 2;sbit P1_3 = P1 ^ 3;sbit P1_4 = P1 ^ 4;sbit P1_5 = P1 ^ 5;sbit P1_6 = P1 ^ 6;sbit P1_7 = P1 ^ 7;void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。

单片机控制LED灯点亮(C语言)

单片机控制LED灯点亮(C语言)

软件分析: 1)依次把这8个值赋给P1口,延时一段 程序
void main() { while(1) { P1=0xfe; delay(100); P1=0xfd; delay(100); P1=0xfb; delay(100); P1=0xf7; delay(100); P1=0xef; delay(100); P1=0xdf; delay(100); P1=0xbf; delay(100); P1=0x7f; delay(100); } } }
C语言-51单片机的头文件
通常有:reg51.h reg52.h math.h 通常有 ctype.h stdio.h stdlib.h absacc.h 常用有:reg51.h reg52.h 常用有 (定义特殊功能寄存器和位寄存器 ); math.h (定义常用数学运算); 定义常用数学运算);
三,流水灯:从D0---D7依次点亮
分析: D0亮 D1亮 D2亮 D3亮 D4亮 D5亮 D6亮 D7亮
0xfe 0xfd 0xfb 0xf7 0xef 0xdf 0xbf 0x7f
11111110 11111101 11111011 11110111 11101111 11011111 10111111 01111111
各种进位制的对应关系
十进制 二进制 0 1 2 3 4 5 6 7 8 0 1 10 11 100 101 110 111 1000 十六进制 0 1 2 3 4 5 6 7 8 十进制 二进制 9 10 11 12 13 14 15 16 1001 1010 1011 1100 1101 1110 1111 10000 十六进制 9 A B C D E F 10
十六进制
是二进制的简短表示形式. 十进制中的0-15分别表示为十六进制的0,1,2,3 ,4,5,6,7,8,9,A,B,C,D,E,F 熟练掌握二进制与十六进制之间的转换. 规律:一般把四个二进制数放在一起转换成一个十 六进制数,转换时先把二进制数转换成十进制数, 再把十进制数转换成十六进制数.

单片机流水灯所有程序

单片机流水灯所有程序
#include<reg52.h>
#define unit unsigned int unit i,j;
void delay1s();
sbit led=P1;
sbit led仁PMO;
sbit led2=P1A1;
sbit led3=P1A2;
sbit led4=P1A3;
sbit led5=P1A4;
{
unit i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
用数组实现流水灯循环,依次点亮,然后依次熄灭
#include<reg52.h>
#define uchar unsigned char
//char是字符数组
#define unit unsigned int unit num;
头文件宏定义端口循环永不停止voiddelaymsunitxms用循环左移指令实现流水灯延迟05s下一灯亮led31
#include<reg52.h>
#define uchar unsigned char
//char是字符数组
#define unit unsigned int
uchar num;
sbit led仁PMO;
for(j=110;j>0;j--);
}流水灯
#include<reg52.h>
#define unit unsigned int unit i,j;
void delay1s();
sbit led=P1;
sbit led仁PMO;
sbit led2=P1A1;
sbit led3=P1A2;

单片机控制LED灯点亮(C语言)

单片机控制LED灯点亮(C语言)

将0xfe赋给P1口,然后使用移位函数来改变P1口的值,达到流水灯的效果 移位函数: _crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回 。 _crol_,_cror_: c51中的intrins.h库函数
程序如下:
随后会弹出一个对话框,要求选择单片机的型号。在该对话框中显示了Vision2的器件数据库,从中可以根据使用的单片机来选择。
PART ONE
AT89S52
8051 based Full Static CMOS controller with Three-Level Program Memory Lock, 32 I/O lines, 3 Timers/Counters, 8 Interrupts Sources, Watchdog Timer, 2 DPTRs(DATA POINTER REGISTERS ), 8K Flash Memory, 256 Bytes On-chip RAM 基于8051全静态CMOS控制器、 三级加密程序存储器 、 32个I/O口 、三个定时器/计数器 、八个中断源 、看门狗定时器、2 个数据指针 寄存器、8k字节Flash,256字节片内RAM
十六进制整常数
十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。 以下各数是合法的十六进制整常数: 0X2A(十进制为42) 0XA0 (十进制为160) 0XFFFF (十进制为65535) 以下各数不是合法的十六进制整常数: 5A (无前缀0X) 0X3H (含有非十六进制数码)
各种进位制的对应关系
十进制
二进制
十六进制
十进制
二进制
十六进制
0
0
0
9
1001

单片机控制流水灯程序汇编语言

单片机控制流水灯程序汇编语言

单片机控制流水灯程序汇编语言随着科技的发展和微电子技术的迅猛进步,单片机逐渐成为智能系统与设备中不可或缺的组成部分。

而流水灯作为最基础的应用之一,不仅在学习过程中具有重要意义,同时也在实际工程中发挥着重要作用。

本文将介绍如何使用汇编语言编写单片机控制流水灯程序,并详细讲解其运行原理和实现方法。

一、流水灯原理流水灯是一种由多个LED组成的灯条或灯链,在按照一定次序依次点亮和熄灭的灯光效果。

其原理基于单片机通过控制输出口的电平高低来控制LED的亮灭状态,实现灯光的变化和移动效果。

二、程序设计方法1. 初始化设置在编写流水灯程序之前,我们首先要了解单片机的相应接口和寄存器的使用方法。

在程序开始时,需要进行相应的初始化设置,包括将数据方向寄存器和端口寄存器设置为输出,并将初始值赋予输出口电平。

例如,对于51单片机,可以使用以下汇编语言代码进行初始化设置:MOV P1, #00H ;将P1端口的输出电平置为低电平MOV P1M1, #FFH ;将P1端口的数据方向设置为输出MOV P1M0, #00H2. 主程序在流水灯程序中,需要编写主程序来实现流水灯的效果。

主程序中使用循环结构控制LED的亮灭状态和移动效果。

例如,以下是一个简单的汇编语言代码,实现了由4个LED组成的流水灯的效果:MOV R0, #F0H ;初始亮灭状态MOV R1, #00H ;初始LED位置LOOP: ;循环MOV P1, R0 ;将亮灭状态赋予P1端口的输出电平ACALL DELAY ;延时,形成流水灯效果MOV A, R1SUBB A, #01H ;将LED位置减一MOV R1, AJZ CHANGE ;当LED位置为零时,改变亮灭状态MOV R0, R0SJMP LOOP ;继续循环CHANGE: ;改变亮灭状态CPL R0 ;对亮灭状态进行取反操作SJMP LOOP ;继续循环3. 延时函数为了实现流水灯的移动效果,需要设置一个合适的延时时间来控制LED的亮灭速度。

单片机流水灯c语言实现

单片机流水灯c语言实现
//使数字0--9循环显示
//------------------------------------------------
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE []=
red_a=1;yellow_a=1;green_a=0;
red_b=0;yellow_b=1;green_b=1;
delayMs(2000);
Operation_Type=2;
break;
case 2://东西向黄灯开始闪烁,绿灯关闭
delayMs(300);
yellow_a=!yellow_a; green_a=1;
while(x--)
{
for(i=0;i<120;i++);
}
}
//---------------------------------------------
//交通灯切换子程序
void Traffic_Light()
{
switch (Operation_Type)
{
case 1://东西向绿灯亮与南北向红灯亮
{
uchar i;
P2=0x01;//P2端口初始化
while(1)//死循环
{
for(i=0;i<7;i++)//i自加1,当i=7时执行第二个for语句
{
P2=_crol_(P2,1);//P2端口循环左移1位
delayMs(150);
}
for(i=0;i<7;i++)

单片机-流水灯的程序

单片机-流水灯的程序
程序分析:
#include<reg51.h> sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit led5=P2^4; sbit led6=P2^5; sbit led7=P2^6; sbit led8=P2^7; void delay (unsigned char x);
其中void表示这 个函数执行完后 不返回任何数据。 ()内无任何东西, 所以这是个无参 数的函数。 Delayms是函数名。
1
2
3
4
5
6
2)带参数函数的用位定义实现流水灯(8位二极管循环点亮)
编程思路: a) 先点亮第一盏灯,延时点亮第二盏, 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
循环移动
循环左移 最高位移入最低位,其它依次向左移动一位。C语言中 没有专门的指令,通过移位指令和简单逻辑运算来实现循环左移,或直接利用C51库中自带的函数-crol-实现。
循环右移 最低位移入最高位,其它位依次向右移一位,C语言中没有专门的指令,通过移位指令与简单的逻辑运算可以实现循环右移,或专门利用C51库中自带函数-cror-实现
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
相关知识 二进制和十六进制之间的相互转换
二进制
十六进制
二进制
十六进制
0000
0
0100
4
0001
1
0101
5
0010
2
0110
6
0011
3
0111
7
二进制
十六进制
二进制

C51单片机(32路流水灯C语言程序)

C51单片机(32路流水灯C语言程序)

C51单片机(32路流水灯C语言程序)#include <reg52.h>void delay(int t){ //时间延迟子函数unsigned int i,j;for(j=0;j<30;j++)for(i=0;i<t;i++);}void putOne(int n,char a){ //定义变量函数unsigned int m = n%8, k = n/8, b;if(k==0) b=P0; if(k==1) b=P1; if(k==2) b=P2; if(k==3) b=P3; if(a) b = b & (~(1<<m));else b = b | (1<<m) ;if(k==0) P0=b; if(k==1) P1=b; if(k==2) P2=b; if(k==3) P3=b; }void liu(int n1,int n2){ //流水灯子程序int i;for(i=n1; i<=n2; i++ ) {putOne(i,1);delay(2000);putOne(i,0);}}main(){ //流水灯主程序while(1){P0 = P1 = P2 =P3 = 0;liu(0, 31 ); putOne(31,1);liu(0, 30 ); putOne(30,1);liu(0, 29 ); putOne(29,1);liu(0, 28 ); putOne(28,1);liu(0, 27 ); putOne(27,1);liu(0, 26 ); putOne(26,1);liu(0, 25 ); putOne(25, 1);liu(0, 24 ); putOne(24,1);liu(0, 23 ); putOne(23,1);liu(0, 22 ); putOne(22,1);liu(0, 21 ); putOne(21,1);liu(0, 20 ); putOne(20,1);liu(0, 19 ); putOne(19,1);liu(0, 18 ); putOne(18, 1);liu(0, 17 ); putOne(17,1);liu(0, 16 ); putOne(16,1);liu(0, 15 ); putOne(15,1);liu(0,14 ); putOne(14,1);liu(0, 13 ); putOne(13,1);liu(0, 12 ); putOne(12,1);liu(0, 11 ); putOne(11, 1);liu(0, 10 ); putOne(10,1);liu(0, 9 ); putOne(9,1);liu(0, 8 ); putOne(8,1);liu(0, 7 ); putOne(7,1);liu(0, 6 ); putOne(6,1);liu(0, 5 ); putOne(5,1);liu(0, 4 ); putOne(4, 1);liu(0, 3 ); putOne(3,1);liu(0, 2 ); putOne(2,1);liu(0, 1 ); putOne(1,1);liu(0, 0 ); putOne(0,1);P0 = P1 = P2 =P3 =0; delay(2000);P0 = P1 = P2 =P3 =255; delay(2000); P0 = P1 = P2 =P3 =0; delay(2000);}如主函数改成:main() //流水灯主程序{unsigned int k;while(1){P0 = P1 = P2 =P3 = 0;for(k=31;k>-1;k--){liu(0, k); putOne(k,1);}P0 = P1 = P2 =P3 =0; delay(2000);P0 = P1 = P2 =P3 =255; delay(2000);P0 = P1 = P2 =P3 =0; delay(2000);}}这样就可以代替你的主程序了/local/changchun/huochezhan-sq-jiudian-tg?sp=1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机32个IO口流水灯C程序(转)2008-11-23 11:37/************************************************************
*89C51、S51单片机32个IO口流水灯测试程序
*Flash0、1、2、3分别对应单片机的P0、1、2、3四个口
delay(TimeDelay);
Temp = Temp >> 1;
}
P1 = 0xff;
}
void Flash1b(void)
{
uchar i;
uchar Temp;
P1 = 1;
Temp = 0x80;
for(i=0;i<8;i++)
{
P1 = Temp;
delay(TimeDelay);
Temp = Temp >> 1;
{
uchar i;
uchar Temp;
P2 = 1;
Temp = 0x80;
for(i=0;i<8;i++)
{
P2 = Temp;
delay(TimeDelay);
Temp = Temp >> 1;
}
P2 = 0;
}
void Flash3a(void)
{
uchar i;
uchar Temp;
P3 = 1;
*a程序对应流水灯从全灭到一个一个亮
*b程序对应流水灯从全亮到一个一个灭
*Author:大灵通
*2006-7-26 10:57,OK!
*************************************************************/
#include<reg51.h>
#include<intrins.h>
for(i=0;i<8;i++)
{
P0 = Temp;
delay(TimeDelay);
Temp = Temp >> 1;
}
P0 = 0;
}
void Flash1a(void)
{
uchar i;
uchar Temp;
P1 = 1;
Temp = 0x80;
for(i=0;i<8;i++)
{
P1 = ~Temp;
delay(TimeDelay);
Flash0b();
Flash0a();
Flash2b();
Flash2a();
Flash1b();
Flash1a();
Flash3b();
Flash3a();
}
}
/************************************************************
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define TimeDelay 60000
void delay(uint n);
void Flash0a(void);
void Flash0b(void);
{
P3 = Temp;
delay(TimeDelay);
Temp = Temp >> 1;
}
P3 = 0;
}
{
uchar i;
uchar Temp;
Temp = 0x80;
for(i=0;i<8;i++)
{
P0 = ~Temp;
delay(TimeDelay);
Temp = Temp >> 1;
}
P0 = 0xff;
}
void Flash0b(void)
{
uchar i;
uchar Temp;
Temp = 0x80;
}
P1 = 0;
}
void Flash2a(void)
{
uchar i;
uchar Temp;
P2 = 1;
Temp++)
{
P2 = ~Temp;
delay(TimeDelay);
Temp = Temp >> 1;
}
P2 = 0xff;
}
void Flash2b(void)
Temp = 0x80;
for(i=0;i<8;i++)
{
P3 = ~Temp;
delay(TimeDelay);
Temp = Temp >> 1;
}
P3 = 0xff;
}
void Flash3b(void)
{
uchar i;
uchar Temp;
P3 = 1;
Temp = 0x80;
for(i=0;i<8;i++)
*Function:主函数
*parameter:
*Return:
*Modify:
*************************************************************/
void main(void)
{
while(1)
{
Flash1b();
Flash1a();
delay(TimeDelay);
void Flash1a(void);
void Flash1b(void);
void Flash2a(void);
void Flash2b(void);
void Flash3a(void);
void Flash3b(void);
/************************************************************
*Function:延时
*parameter:
*Return:
*Modify:
*************************************************************/
void delay(uint n)
{
while(n!=0)
{
n--;
}
}
void Flash0a(void)
相关文档
最新文档