单片机32个IO口流水灯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语言)
软件分析: 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 熟练掌握二进制与十六进制之间的转换. 规律:一般把四个二进制数放在一起转换成一个十 六进制数,转换时先把二进制数转换成十进制数, 再把十进制数转换成十六进制数.
单片机流水灯所有程序
#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语言)
将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语言实现
//------------------------------------------------
#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语言程序)#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。
32种花样流水灯c语言程序,32LED单片机心形花样流水灯程序+视频
32种花样流⽔灯c语⾔程序,32LED单⽚机⼼形花样流⽔灯程序+视频include#include#define uint unsigned int#define uchar unsigned charuchar code zou[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//单个从0到7uchar code you[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//单个从7到0uchar code liang0_7[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐个点亮0~7uchar code liang7_0[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; // 逐个点亮7~0uchar code mie0_7[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // 逐个灭0~7uchar code mie7_0[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; // 逐个灭7~0/***********************************************************/void delay(uint t); //延时void zg(uint t,uchar a);//两边逐个亮void qs(uint t,uchar a);//全部闪烁void zgxh(uint t,uchar a); // 逆时针逐个点亮//void zgxh1(uint t,uchar a); // 顺时针逐个点亮void djs(uint t,uchar a); //对⾓闪void lbzgm(uint t,uchar a);//两边逐个灭//void sszgm(uint t,uchar a); // 顺时针逐个灭void nszgm(uint t,uchar a); // 逆时针逐个灭void sztl(uint t,uchar a);//顺时逐个同步亮void nztl(uint t,uchar a);//逆时逐个同步亮void sztm(uint t,uchar a);//顺时逐个同步灭void nztm(uint t,uchar a);//逆时逐个同步灭void hwzjl(uint t,uchar a); //横往中间亮void hwzjm(uint t,uchar a); //横往中间灭//void swzjl(uint t,uchar a); //竖往中间亮//void swzjm(uint t,uchar a); //竖往中间灭void nzdl(uint t,uchar a); //逆时逐段亮void nzdgl(uint t,uchar a); //逆时逐段⼀个点亮void jgs(uint t,uchar a); //间隔闪/**********************************************************/ void zg(uint t,uchar a)//两边逐个亮{uchar i,j;for(j=0;j{P0=P1=P2=P3=0x00;P0=0x01;delay(t);for(i=0;i<7;i++){P0=liang0_7[i+1];P3=liang7_0[i];delay(t);}P3=0xff;P1=0x01;delay(t);for(i=0;i<7;i++){P1=liang0_7[i+1];P2=liang7_0[i];delay(t);}P2=0xff;delay(t);}}void qs(uint t,uchar a) //全部闪烁{uchar j;for(j=0;j。
五种编程方式实现流水灯的单片机C程序
五种编程方式实现流水灯的单片机C程序//功能:采用顺序结构实现的流水灯控制程序/*此方式中采用的是字操作(也称为总线操作)*/#include <reg51."h>void delay(unsigned char i);//延时函数声明void main()//主函数{while(1) {P1 = 0xfe;//点亮第1个发光二极管,0."000389sdelay(200);//延时P1 = 0xfd;//点亮第2个发光二极管,0."155403s,0."1558delay(200);//延时P1 = 0xfb;//点亮第3个发光二极管delay(200);//延时P1 = 0xf7;//点亮第4个发光二极管delay(200);//延时P1 = 0xef;//点亮第5个发光二极管delay(200);//延时P1 = 0xdf;//点亮第6个发光二极管delay(200);//延时P1 = 0xbf;//点亮第7个发光二极管delay(200);//延时P1 = 0x7f;//点亮第8个发光二极管delay(200);//延时}}//函数名:delay//函数功能:实现软件延时//形式参数:unsigned char i;//i控制空循环的外循环次数,共循环i*255次//返回值:无voiddelay(unsigned char i) //延时函数,无符号字符型变量i为形式参数{unsigned char j, k;//定义无符号字符型变量j和kfor(k = 0; k < i; k++)//双重for循环语句实现软件延时for(j = 0; j < 255; j++);}//功能:采用循环结构实现的流水灯控制程序//此方式中采用的移位,按位取反等操作是位操作#include <reg51."h>//包含头文件REG51."Hvoid delay(unsigned char i);//延时函数声明void main()//主函数{unsigned char i,w;while(1){w = 0x01;//信号灯显示字初值为01Hfor(i = 0; i < 8; i++){P1 = ~w;//显示字取反后,送P1口delay(200);//延时w <<= 1;//显示字左移一位}}}//函数名:delay//函数功能:实现软件延时//形式参数:unsigned char i;//i控制空循环的外循环次数,共循环i*255次//返回值:无voiddelay(unsigned char i) //延时函数,无符号字符型变量i为形式参数{unsigned char j,k;//定义无符号字符型变量j和kfor(k = 0; k < i; k++)//双重for循环语句实现软件延时for(j = 0; j < 255;j++);}/**************************************************************** *****///功能:采用位运算符编写的流水灯控制程序,显示效果为依次熄灭信号灯//此方式也是典型的顺序结构#include <reg51."h>void delay(unsigned char i);//延时函数声明void main()//主函数{while(1) {P1 = 0x00;//P1口全部清0,即点亮8个发光二极管delay(200);//延时P1 = P1 | 0x01;//熄灭第1个发光二极管delay(200);//延时P1 = P1 | 0x03;//熄灭第1、"2个发光二极管delay(200);//延时P1 = P1 | 0x07;//熄灭第1~3个发光二极管delay(200);//延时P1 = P1 | 0x0f;//熄灭第1~4个发光二极管delay(200);//延时P1 = P1 | 0x1f;//熄灭第1~5个发光二极管delay(200);//延时P1 = P1 | 0x3f;//熄灭第1~6个发光二极管delay(200);//延时P1 = P1 | 0x7f;//熄灭第1~7个发光二极管delay(200);//延时P1 = P1 | 0x7f;//熄灭所有发光二极管delay(200);//延时}}//函数名:delay//函数功能:实现软件延时//形式参数:unsigned char i;//i控制空循环的外循环次数,共循环i*255次//返回值:无voiddelay(unsigned char i) //延时函数,无符号字符型变量i为形式参数{unsigned char j, k;//定义无符号字符型变量j和kfor(k = 0; k < i; k++)//双重for循环语句实现软件延时for(j = 0; j < 255;j++);}/**********************************************************/ //功能:采用数组实现的流水灯控制程序//此方式也是典型的循环结构#include <reg51."h>//包含头文件REG51."Hvoid delay(unsigned char i);//延时函数声明void main()//主函数{unsigned char i;unsigned char display[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};(1){for(i = 0; i < 8; i++){P1 = display[i];//显示字送P1口delay(200);//延时}}}//函数名:delay//函数功能:实现软件延时//形式参数:unsigned char i;//i控制空循环的外循环次数,共循环i*255次//返回值:无voiddelay(unsigned char i) //延时函数,无符号字符型变量i为形式参数{unsigned char j, k;//定义无符号字符型变量j和kfor(k = 0; k < i; k++)//双重for循环语句实现软件延时for(j = 0; j < 255; j++);}#include<reg52."h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint z){uint x, y;for(x = z; x > 0; x--)for(y = 110; y > 0; y--);}void main(){uchar a, i, j;(1){for(j = 0; j<2; j++){a = 0xfe; for(i = 0; i<8; i++){P2 = a;delay(200);a = _crol_(a, 1); //11110}a = 0x7f; for(i = 0; i < 8; i++){P2 = a;delay(200);a = _cror_(a, 1);}}P2 = 0xff;for(j = 0; j < 10; j++)}}{}delay(300);P2 = ~P2;。
单片机流水灯程序
流水灯程序闲来没事,就总结一下流水灯的工作,用两种语言实验C语言和汇编语言。
学习单片机的第一个程序就是流水灯实验!学习语言的输出的第一个程序就是hello word! 这都是一个过程!我们知道单片机执行的机器语言!汇编就是其执行的根本的语言,任何程序的编译最终还是要生成HEX语言,汇编语言~~!来回显示,并且显示时还会发出蜂咛声!P1口接八个发光二极管,P2.3接一个蜂咛器!一.汇编语言mov r7,#8main:mov r0,#8 ;一个循环需要移动8位acall ds1ms ;延时,以便人眼可以观察到acall ds1msmov a,p1 ;读P0口当前显示的数据送到Arr a ;将A中的数据循环右移1位mov p1,a ;再将A中右移过的数据送到P0djnz r0,loopdjnz r7,main ;移动不够8位,跳到LOOP处循环,ljmp rel ;流动1遍跳转到MAIN处循环流。
;---显示延时----------ds1ms: mov r1,#1ds1lo: mov r2,#200ds2lo: mov r3,#200djnz r3,$djnz r2,ds2lodjnz r1,ds1loret ;延时返回rel:end二.C语言#include<reg52.h>unsigned char i;unsigned char temp;unsigned char a,b;void delay(void) //延时子程序{unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);}void main(void) //主程序{while(1) //循环条件永远为真,以下程序一直执行下去。
{temp=0xfe;P1=temp; //直接对I/O口P1赋值,使P1.0输出低点平。
delay(); //延时for(i=1;i<8;i++) //实现广告灯的移动{a=temp<<i;b=temp>>(8-i);P1=a|b;delay();}for(i=1;i<8;i++) //实现广告灯的反方向移动{a=temp>>i;b=temp<<(8-i);P1=a|b;delay();}}}实验很简单!懂的朋友完全可以在此基础上开发!比如一个爱心的流水灯。
单片机-流水灯的程序
void main() {
Led = 0xfe; while(1) { P2 = Led;
for(i=1;i<800;i++) for(j=1;j<800;j++); Led = Led << 1; if(P2 == 0x00 ) {Led = 0xfe; } } }
方法四:利用移位操作实现流水灯(8位二极管循环点亮)
假设机器字长为8位,变量a的值为16,将a左移二位,即 a=a<<2: 左移前 0001 0000
左移后 0100 0000
由此看出,左移一位相当于该数乘2,左移二位相当于乘4 ,即22,但这要以该数左移之后不“溢出”为前提。所谓“溢出 ”指该数已超过机器字长所能容纳的范围,如该例若继续左移二 位,该数为16× 24=256,超出了字长8位的表示范围(257),
void main() { while(1) {
led1=0; delay(120);
led2=0; delay(120);
led3=0; delay(120);
led4=0; delay(120);
led5=0 ; delay(120);
led6=0; delay(120);
led7=0; delay(120);
即产生了溢出。
二、按位右移
按位右移是将一个运算量的各位依次右移若干位, 低位被移出,高位对无符号数补0,对有符号数要按最 高符号位自身填补。
右移一位相当于该数除以2,但有可能带来误差。假设机器 字长为8位,变量a值为15,将a右移二位,即a=a>>2:
右移前 0000 1111
右移后 0000 0011
单片机-流水灯的程序
32位流水灯程序
uint8 code table4[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; //八个亮到一个亮,低位到高位;
for(i=0;i<8;i++) {P1=table0[i];delay(1000);} P1=0xFF;
for(i=0;i<8;i++) {P3=table0[i];delay(1000);} P3=0xFF;
for(i=0;i<8;i++) {P2=table0[i];delay(1000);} P2=0xFF;
uint8 code table5[]={0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF}; //八个亮到一个亮,高位到低位;
uint8 code table6[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //一个灯移位,低位到高位;
}
void disp3 () //顺时针旋转
{
for(i=0;i<8;i++) {P2=table1[i];delay(1000);} P2=0xFF;
for(i=0;i<8;i++) {P3=table1[i];delay(1000);} P3=0xFF;
for(i=0;i<8;i++) {P1=table1[i];delay(1000);} P1=0xFF;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*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)