单片机流水灯蜂鸣器上机程序

合集下载

(完整版)51单片机流水灯程序

(完整版)51单片机流水灯程序

1.第一个发光管以间隔200ms 闪烁。

2.8 个发光管由上至下间隔1s 流动,其中每个管亮500ms, 灭500ms 。

3.8 个发光管来回流动,第个管亮100ms 。

4.用8 个发光管演示出8 位二进制数累加过程。

5.8 个发光管间隔200ms 由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms 间隔全部闪烁 5 次。

重复此过程。

6.间隔300ms 第一次一个管亮流动一次,第二次两个管亮流动,依次到8 个管亮,然后重复整个过程。

7.间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8 个全部闪烁 3 次;关闭发光管,程序停止。

1#include<reg52.h>#define uint unsigned intsbit led 仁P"0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x--) for(y=100;y>0;y--);}#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit p P1A0; uchar a;void delay(); void main() {a=0xfe;P1=a;while(1){ a=_crol_(a,1); delay();P1=a; delay();}}void delay(){uint b; for(b=55000;b>0;b--);}3#include<reg52.h>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void delay() {uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--);}void main() {uchar a,i;while(1)a=0xfe; for(i=0;i<8;i++){P1=a; delay(100); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(100); a=_cror_(a,1);4#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint a) { uint x,y; for(x=a;x>0;x--) for(y=110;y>0;y--);}void main() {uchar b;while(1){b++;P1=~b; delay(200);5#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void main() { uchar a,i,j;while(1){ for(j=0;j<2;j++){a=0xfe; for(i=0;i<8;i++){P1=a;delay(200); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(200); a=_cror_(a,1);}}P1=0xff; for(j=0;j<10;j++) {delay(300);P1=~P1;}}}void delay(){uint x,y; for(x=200;x>0;x--) for(y=110;y>0;y--); 6 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=300;x>0;x--) for(y=110;y>0;y--);} void main(){uchar a,i,j; while(1) {a=0xfe; for(j=0;j<8;j++) { for(i=0;i<8-j;i++) {P1=a; delay(200); a=_crol_(a,1);} a=_crol_(a,j); P1=0xff; a=a<<1;}} }7#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){uchar a,i,j;for(j=0;j<3;j++){P1=0x55;delay(300);P1=0xaa; delay(300);}for(j=0;j<3;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(300); a=_crol_(a,1);}}P1=0xff; for(j=0;j<3;j++){P1=0x7e;delay(300);P1=0xbd; delay(300);P1=0xdb; delay(300);P1=0xe7; delay(300);}P1=0xff;for(j=0;j<3;j++){P1=0xe7;delay(300);P1=0xdb;delay(300);P1=0xbd;delay(300);P1=0x7e;delay(300);}P1=0xff; for(j=0;j<6;j++) {P1=~P1; delay(300);}P1=0xff;while(1);}。

单片机花样流水灯源代码

单片机花样流水灯源代码

花样流水灯C语言程序代码Lesso2.1: 第一个发光管以间隔200ms闪烁(这是最原始的程序没有用延迟子函数)。

#include<reg52.h>sbit D1=P1^0;int a;void main(){while(1){D1=0;a=25000;while(--a);D1=1;a=25000;while(--a);}}Lesson2.2: 8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。

#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint);uchar temp;sbit beep=P2^3;void main(){temp=0xfe;while(1){P1=temp;beep=0;delay(500);P1=0xff;beep=1;delay(500); temp=_crol_(temp,1);}}void delay(uint z){uint x,y;for(x=z;x>0;x--) for(y=110;y>0;y--);}Lesson2.3:8个发光管来回流动,第个管亮100ms,流动时让蜂鸣器发出“滴滴”声。

#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint);uchar temp;int i,j;sbit beep=P2^3;void main(){temp=0xfe;while(1){for(i=7;i>0;i--){ beep=0;delay(100);beep=1;delay(100);beep=0;delay(100);beep=1;P1=temp;delay(500); temp=_crol_(temp,1);}for(i=7;i>0;i--){beep=0;delay(100);beep=1;delay(100);beep=0;delay(100);beep=1;P1=temp;delay(500); temp=_cror_(temp,1);}}}void delay(uint z){uint x,y;for(x=z;x>0;x--) for(y=110;y>0;y--);}Lesson2.4:用8个发光管演示出8位二进制数累加过程。

(完整版)51单片机流水灯程序

(完整版)51单片机流水灯程序

1.第一个发光管以间隔200ms 闪烁。

2.8 个发光管由上至下间隔1s 流动,其中每个管亮500ms, 灭500ms 。

3.8 个发光管来回流动,第个管亮100ms 。

4.用8 个发光管演示出8 位二进制数累加过程。

5.8 个发光管间隔200ms 由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms 间隔全部闪烁 5 次。

重复此过程。

6.间隔300ms 第一次一个管亮流动一次,第二次两个管亮流动,依次到8 个管亮,然后重复整个过程。

7.间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8 个全部闪烁 3 次;关闭发光管,程序停止。

1#include<reg52.h>#define uint unsigned intsbit led 仁P"0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x--) for(y=100;y>0;y--);}#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit p P1A0; uchar a;void delay(); void main() {a=0xfe;P1=a;while(1){ a=_crol_(a,1); delay();P1=a; delay();}}void delay(){uint b; for(b=55000;b>0;b--);}3#include<reg52.h>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void delay() {uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--);}void main() {uchar a,i;while(1)a=0xfe; for(i=0;i<8;i++){P1=a; delay(100); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(100); a=_cror_(a,1);4#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint a) { uint x,y; for(x=a;x>0;x--) for(y=110;y>0;y--);}void main() {uchar b;while(1){b++;P1=~b; delay(200);5#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void main() { uchar a,i,j;while(1){ for(j=0;j<2;j++){a=0xfe; for(i=0;i<8;i++){P1=a;delay(200); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(200); a=_cror_(a,1);}}P1=0xff; for(j=0;j<10;j++) {delay(300);P1=~P1;}}}void delay(){uint x,y; for(x=200;x>0;x--) for(y=110;y>0;y--); 6 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=300;x>0;x--) for(y=110;y>0;y--);} void main(){uchar a,i,j; while(1) {a=0xfe; for(j=0;j<8;j++) { for(i=0;i<8-j;i++) {P1=a; delay(200); a=_crol_(a,1);} a=_crol_(a,j); P1=0xff; a=a<<1;}} }7#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){uchar a,i,j;for(j=0;j<3;j++){P1=0x55;delay(300);P1=0xaa; delay(300);}for(j=0;j<3;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(300); a=_crol_(a,1);}}P1=0xff; for(j=0;j<3;j++){P1=0x7e;delay(300);P1=0xbd; delay(300);P1=0xdb; delay(300);P1=0xe7; delay(300);}P1=0xff;for(j=0;j<3;j++){P1=0xe7;delay(300);P1=0xdb;delay(300);P1=0xbd;delay(300);P1=0x7e;delay(300);}P1=0xff; for(j=0;j<6;j++) {P1=~P1; delay(300);}P1=0xff;while(1);}。

单片机实验蜂鸣器和流水

单片机实验蜂鸣器和流水
测量和控制各种物理量,如温 度、压力、流量等。
汽车电子
发动机控制、安全气囊、导航 系统等。
单片机的发展历程
01
02
03
起源
20世纪70年代,随着微处 理器技术的发展,单片机 逐渐问世。
发展阶段
经历了4位、8位、16位和 32位等不同位数的发展, 性能不断提升。
未来趋势
随着物联网、人工智能等 技术的兴起,单片机将更 加智能化、网络化。
2. 代码编写
使用C语言或汇编语言编写代码,控 制单片机依次点亮每个LED灯,形成 流水灯效果。
3. 编译与烧录
将编写好的代码编译后烧录到单片机 中。
4. 测试与验证
观察LED灯是否依次亮起,形成流水 灯效果,并检查是否有闪烁或亮度不 均等问题。
06 实验总结与思考
实验收获与体会
硬件连接理解
通过亲手连接单片机、蜂鸣 器和LED灯,我深入理解了 硬件电路的连接方式,掌握 了基本的硬件操作技能。
04 单片机实验开发环境与工 具
单片机开发板的选择与使用
选择单片机开发板时,需要考 虑其性能、功能、兼容性和易 用性。
开发板上通常集成了单片机、 电源电路、接口电路等,方便 开发者进行实验和开发。
使用单片机开发板时,需要按 照说明文档连接电源、接口等, 确保安全可靠。
编程语言的介绍与选择
01
单片机编程语言常用的 有C语言和汇编语言。
软件编程实践
编写单片机程序使我熟悉了 编程语言和逻辑,学会了如 何通过编程控制硬件。
问题解决能力
在实验过程中遇到问题,通 过查阅资料和尝试不同的解 决方案,提高了我的问题解 决能力。
团队协作精神
与同学共同完成实验,互相 帮助和学习,培养了团队协 作精神。

PIC单片机——点亮一个流水灯(含程序)

PIC单片机——点亮一个流水灯(含程序)

PIC单片机——点亮一个流水灯(含程序)MPLAB简介及PIC点亮的第一个流水灯1.PIC16F87X系列单片机引脚简介PIC16F87X系列单片机的引脚分为两种:一种为40脚(包括871,874,877这三种),如图所示;另一种为28脚(包括870,872,873,876这四种)。

PIC16F877除了基本电路所占用的7根引脚外,其余的33支引脚都可当成输出、输入引脚,输入输出端口是单片机基本元素,可以与周边电路进行电路控制和信号传输与检测。

PIC是8位的单片机,以引脚特性分组,每组尽量凑满8支引脚,并将I/O命名为PORTA(RA0~RA5)、PORTB(RB0~RB7)、PORTC(RC0~RC7)、PORTD(RD0~RD7)和PORTE(RE0~RE2)等,各分组特性说明如下:PORTAPIC16F877的PORTA总共有6位(RA0~RA5),PORTA的引脚可作为数据输出输入端口,而系统重置后,PORTA自动成为模拟输入状态,可读取模拟输入信号。

PORTBPORTB总共有8位(RB0~RB7),可以编写程序规划输入输出方向、状态,其中,要进行烧录时,使用到三个引脚,分别是引脚36(RB3/PGM)、引脚39(RB6/PGC)与引脚40(RB7/PGD)。

PORTCPORTC总共有8位(RC0~RC7),除了可作为数据I/O外,还和一些特殊功能的外围电路共享引脚,例如CCP(直流马达控制)、I2C、SPI(同步串行通信电路)、UART(异步串行传输电路)等。

PORTDPORTD总共有8位(RD0~RD7),可作一般数据I/O外,并与PSP(ParallelSlavePort)并行传输区共享。

当整体系统需要多机时,彼此可以经由并行传输区来快速传输资料。

PORTEPORTE总共有3位(RE0~RE2),PORTE的引脚8、9、10有三种功能,除了基本I/O功能,还有模拟输入功能,而上述PORTD的并行传输区设定所需的控制引脚,如/RD、/WR、/CS等,也是属于PORTE引脚。

C51单片机实现呼吸灯和花样流水灯程序

C51单片机实现呼吸灯和花样流水灯程序

C51单⽚机实现呼吸灯和花样流⽔灯程序1.⽤C51单⽚机实现花样流⽔灯,代码如下:#include <reg52.h>#define LED_A P1 //led灯所⽤的接⼝,是哪个⼝就写P⼏void delayms(){unsigned char x = 0; unsigned char i;unsigned char y = 0;while(y < 0.001) //定义led灯的切换的延时时间,越⼩越快。

{ //(y < 0.001);(x<100);(i<100)都可以修改x = 0;while(x<100){i = 0;while(i<100){i++;}x++;}y++;}}#define LED_NUM 8 //定义led灯的数量,可快速实现不同⽤途的修改;void main(){unsigned char k;unsigned char j;unsigned char LED_ALL[] = {0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F}; //led灯亮灭的⼗六进制数组;unsigned char LED_ALL_2[] = {0XFC,0XF3,0XCF,0X3F}; while(1) { for(k=0;k<3;k++) //第⼀个for实现奇偶灯交叉闪烁三次,想闪烁⼏次就修改(K<3)中的数值; { LED_A = 0xAA; delayms(); LED_A = 0x55; delayms(); } for(k=3;k>0;k--) //实现⼀个流⽔灯左右三次(从左到右再从右到左算⼀次); { for(j=0;j<LED_NUM;j++) { LED_A = LED_ALL[j]; delayms(); } for(j=6;j>0;j--) { LED_A = LED_ALL[j]; delayms(); } } for(k=0;k<3;k++) //实现前四个灯亮后四个灯灭,交叉闪烁3次,修改次数同上; { LED_A = 0xf0; delayms(); LED_A = 0xf; delayms(); } for(k=3;k>0;k--) //实现两个灯依次流⽔3次; { for(j=0;j<4;j++) { LED_A = LED_ALL_2[j]; delayms(); } for(j=2;j>0;j--) { LED_A = LED_ALL_2[j]; delayms(); } } }}2.实现第⼀个灯呼吸,由暗变亮,再由亮变暗,程序如下;#include <reg52.h>sbit LED1 = P3^0;void delay(unsigned int a) //定义⼀个延时函数{ while(--a);}void main(){ unsigned int t,circle=800; //定义变量,circle=800为led灯呼吸的间隔长短,数值越⼩,间隔越短。

MSP430流水灯蜂鸣器实验报告

MSP430流水灯蜂鸣器实验报告

MSP430实验报告姓名:学号:一、实验目的:掌握msp430单片机的程序编写和运行过程。

掌握IAR Embedded Workbench程序的编译和运行。

二、实验内容:实现流水灯以三种流动方式和四种流动速度的不同组合而进行点亮"流动",同时每改变一次流水方式,蜂鸣器响一次。

三、使用串口:P2口,P6口四、蜂鸣器实现:通过定义Timer()函数,并在每次改变流水方式时调用Timer()函数,通过对p6接口的设置,来达到蜂鸣器声音的实现。

五、实验代码://BoardConfig.h//typedef unsigned char uchar;typedef unsigned int uint;//控制位的宏定义#define Ctrl_Out P3DIR |= BIT3 + BIT6 + BIT7;#define Ctrl_0 P3OUT &= ~(BIT3 + BIT6 + BIT7)#define SRCLK_1 P3OUT |= BIT7#define SRCLK_0 P3OUT &= ~BIT7#define SER_1 P3OUT |= BIT6#define SER_0 P3OUT &= ~BIT6#define RCLK_1 P3OUT |= BIT3#define RCLK_0 P3OUT &= ~BIT3//板上资源配置函数void BoardConfig(uchar cmd){uchar i;Ctrl_Out;Ctrl_0;for(i = 0; i < 8; i++){SRCLK_0;if(cmd & 0x80) SER_1;else SER_0;SRCLK_1;cmd <<= 1;}RCLK_1;_NOP();RCLK_0;}主函数:#include <msp430x14x.h>#include "BoardConfig.h"void Timer (void);void delay(int z);uint i = 0,j = 0,dir = 0;uchar step = 0xff;uint flag = 0,speed = 0; //flag--灯光流动方式,speed--灯光流动速度void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗BoardConfig(0xf0);CCTL0 = CCIE; //使能CCR0中断CCR0 = 50000;TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,增计数模式P2DIR = 0xff; //设置P2口方向为输出P2OUT = 0xff;P6DIR |= BIT7; //蜂鸣器对应IO设置为输出_EINT(); //使能全局中断LPM0; //CPU进入LPM0模式}函数名称:Timer_A功能:定时器A的中断服务函数,在这里通过标志控制流水灯的流动方向和流动速度参数:无返回值:无#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){if(flag == 0){P2OUT = ~(0x80>>(i++)); //灯的点亮顺序D8 -> D1}else if(flag == 1){P2OUT = ~(0x01<<(i++)); //灯的点亮顺序D1 -> D8}else{if(dir) //灯的点亮顺序 D8 -> D1,D1 -> D8,循环绕圈{P2OUT = ~(0x80>>(i++));}else{P2OUT = ~(0x01<<(i++));}}if(i == 8){i = 0;dir = ~dir;}j++;if(j == 8){ Timer();i = 0;j = 0;flag++;if(flag == 4) flag = 0;switch(speed){case 0:TACTL &=~ (ID0 + ID1); TACTL |= ID_3;break;case 1:TACTL &=~ (ID0 + ID1); TACTL |= ID_2;break;case 2:TACTL &=~ (ID0 + ID1); TACTL |= ID_1;break;case 3:TACTL &=~ (ID0 + ID1); TACTL |= ID_0;break;default:break;}if(flag != 3) speed++; if(speed == 4) speed = 0; }}void Timer (void){P6OUT ^= BIT7; // Toggle P6.7delay(1);}void delay(int z){int x;for(x=z;x>0;x--);//for(y=10;y>0;y--);}六、总结通过这次msp430单片机的实验,是我进一步的了解了单片机的远离,虽然在实验过程中遇到了一些问题,但我及时与同学讨论与老师沟通,解决了以上问题。

蜂鸣器闹钟和数字流水灯 模拟设计

蜂鸣器闹钟和数字流水灯 模拟设计
int main(int ac,char *av[])
{void *count_words(void *);
if(ac!=3)
{printf("Usage:%s file1 file2\n",av[0]);
exit(1);
}
total_words=0;
pthread_create(&t1,NULL,count_words,(void *)av[1]);
(6)定时风扇(RTC实时闹钟、直流电机、声、光提示)
(7)定时温控天窗系统(RTC实时闹钟+步进电机、声、光提示)
(8)其他应用系统设计(键盘、显示器接口实验)
设计专题是基于现有的32位单片机实验系统(要求通过实验验证),涉及所设计的应用系统的硬件结构,软件编程的程序流程图,以及主要程序代码。
(注意:具体题目可以自拟;可以3~5人合作完成一个课程设计,需要注明;设计正文从第2页开始,使用A4纸;每一小组提供程序电子文档,每人提供纸质和电子文档)。
}
void*count_words(void *f)
{char *filename=(char *f);
FILE * fg;
int c,prevc='\0';
if((fg=fopen(filename,"r"))!=NULL)
{while((c=getc(fp))!=EOF)
{if(!isalnum(c)&&isalnum(prevc))
pthread_create(&t2,NULL,count_words,(void *)av[2]);
pthread_join(t1,NULL);
pthread_join(t2,NULL);

单片机:流水灯程序

单片机:流水灯程序

单片机:流水灯程序
程序4-2:流水灯程序(对应图4-51)
ORG 00H ;起始地址
START: ;程序一开始,初始一些所需要变量,如进位C的清0等
MOV A, #0FFH ;累加器A的8位全置1(0FFH),发光二极管全熄灭
CLR C ;进位C被清0,C=0
MOV R1, #8 ;R1=8,循环8次(右移8次),用R1作计数器
RIGHT: ;这是发光二极管向右“流动”的循环体
RRC A ;把进位C在累加器A中从左向右轮换一位
MOV P2, A ;输出至P2口
CALL DELAY ;调延时子程序,延时200ms
DJNZ R1, RIGHT ;R1减1,如果不为0跳回RIGHT循环执行
MOV R2, #7 ;R2=7,为向左“流动”设置次数,考虑一下为什么不是8, LEFT: ;这是发光二极管向左“流动”的循环体
RLC A ;把进位C在累加器A中从右向左轮换一位
MOV P2, A ;输出至P2口
CALL DELAY ;调延时子程序,延时200ms
DJNZ R2, LEFT ;是否左移了7次,如果不是则跳回LEFT继续执行
JMP START ;跳回一开始,重复执行该流水灯程序
DELAY: ;延时200ms的子程序
MOV R3, #20
D1:
MOV R4, #20
D2:
MOV R5, #248
DJNZ R5, $ ;R5减1,如果不为0,就执行本行DJNZ R4, D2
DJNZ R3, D1
RET ;子程序结束标志,返回主程序
END ;程序结束点。

(完整版)51单片机流水灯程序

(完整版)51单片机流水灯程序

1.第一个发光管以间隔200ms 闪烁。

2.8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms。

3.8 个发光管来回流动,第个管亮100ms。

4.用8 个发光管演示出8 位二进制数累加过程。

5.8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁 5 次。

重复此过程。

6.间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。

7.间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。

1#include<reg52.h>#define uint unsigned intsbit led 仁P"0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x--) for(y=100;y>0;y--);}2#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit p 仁P1A0;uchar a;void delay(); void main() {a=0xfe;P1=a;while(1){ a=_crol_(a,1); delay();P1=a;delay();}}void delay(){uint b; for(b=55000;b>0;b--);}3#include<reg52.h>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--);}void main(){uchar a,i;while(1)a=0xfe;for(i=0;i<8;i++){P1=a; delay(100); a=_crol_(a,1);}a=0x7f;for(i=0;i<8;i++){P1=a; delay(100); a=_cror_(a,1);}}}4#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint a){uint x,y;for(x=a;x>0;x--) for(y=110;y>0;y--);}void main(){uchar b;while(1){b++;P1=~b; delay(200);5#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void main(){uchar a,i,j;while(1){ for(j=0;j<2;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(200); a=_crol_(a,1);}a=0x7f;for(i=0;i<8;i++){P1=a;delay(200); a=_cror_(a,1);}}P1=0xff; for(j=0;j<10;j++) {delay(300);P1=~P1;}}}void delay(){uint x,y; for(x=200;x>0;x--) for(y=110;y>0;y--); 6 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=300;x>0;x--) for(y=110;y>0;y--);} void main(){uchar a,i,j; while(1) {a=0xfe; for(j=0;j<8;j++) { for(i=0;i<8-j;i++) {P1=a; delay(200); a=_crol_(a,1);} a=_crol_(a,j); P1=0xff; a=a<<1;}} }7#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){uchar a,i,j;for(j=0;j<3;j++){P1=0x55;delay(300);P1=0xaa;delay(300);}for(j=0;j<3;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(300);a=_crol_(a,1);}}P1=0xff;for(j=0;j<3;j++){P1=0x7e;delay(300);P1=0xbd;delay(300);P1=0xdb;delay(300);P1=0xe7;delay(300);}P1=0xff;for(j=0;j<3;j++){P1=0xe7;delay(300);P1=0xdb;delay(300);P1=0xbd;delay(300);P1=0x7e;delay(300);}P1=0xff; for(j=0;j<6;j++) {P1=~P1; delay(300);}P1=0xff;while(1);}。

51单片机音乐流水灯程序

51单片机音乐流水灯程序

#include <reg52."h>sbitspeaker = P1^6;sbitkey1=P1^5;sbitkey2=P1^7;unsigned char kk=0;unsigned long t3;unsigned char timer0h, timer0l, time,n;codecharled[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0x55,0xaa,0x00,0x5 5,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00}; //灯亮数组//--------------------------------------//单片机晶振采用11."0592MHz//频率-半周期数据表高八位本软件共保存了四个八度的28个频率数据code unsigned char FREQH[] = {0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,//低音0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,//高音2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};//超高音//频率-半周期数据表低八位code unsigned char FREQL[] = {0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,//低音0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,//高音2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};//超高音//--------------------------------------//世上只有妈妈好数据表要想演奏不同的乐曲,只需要修改这个数据表codeint shengrikuaile[] = {5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,//生日快乐5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4,0,0,0};code int tonghua[]={5,1,2, 5,2,2, 4,2,2,3,2,4, 3,2,2, 4,2,1, 3,2,1, 3,2,4, 3,2,2, 4,2,2,3,2,2, 4,2,2, 3,2,2, 2,2,1, 1,2,1, 1,2,2, 1,2,2, 3,2,2, 5,2,2,6,2,4, 6,2,2, 6,2,1, 5,2,1, 5,2,2, 2,2,2, 2,2,2, 4,2,2,3,2,8, 1,2,2, 3,2,2, 5,2,2,6,2,4, 6,2,2, 6,2,1, 5,2,1, 2,2,2, 2,2,2, 4,2,2,3,2,2, 4,2,2, 3,2,2, 2,2,1, 1,2,1, 1,2,4, 2,2,2, 3,2,2,6,1,4, 6,1,2, 1,2,2, 1,2,2, 7,1,2, 7,1,2, 1,2,1, 1,2,16,0,0,0};//童话//一个音符有三个数字。

单片机流水灯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
二进制
十六进制
二进制

(完整版)51单片机流水灯程序

(完整版)51单片机流水灯程序
P1=0xbd;
delay(300);
P1=0xdb;
delay(300);
P1=0xe7;
delay(300);
}
P1=0xff;
for(j=0;j<3;j++)
{
P1=0xe7;
delay(300);
P1=0xdb;
delay(300);
P1=0xbd;
delay(300);
P1=0x7e;
delay(300);
{
P1=0x55;
delay(300);
P1=0xaa;
delay(300);}源自for(j=0;j<3;j++)
{
a=0xfe;
for(i=0;i<8;i++)
{
P1=a;
delay(300);
a=_crol_(a,1);
}
}
P1=0xff;
for(j=0;j<3;j++)
{
P1=0x7e;
delay(300);
sbit led1=P1^0;
void delay();
void main()
{
while(1)
{
led1=0;
delay();
led1=1;
delay();
}
}
void delay()
{
uint x,y;
for(x=200;x>0;x--)
for(y=100;y>0;y--);
}
2
#include<reg52.h>
}
P1=0xff;
for(j=0;j<6;j++)

单片机原理及应用A实验-流水灯、蜂鸣器、独立按键

单片机原理及应用A实验-流水灯、蜂鸣器、独立按键

流水灯、蜂鸣器、独立按键一、实验目的1、学习实验系统的基本操作,了解在实验系统中进行程序设计、仿真和调试的操作方法和步骤;2、了解单片机的基本输入、输出功能;3、熟悉Proteus的基本仿真功能;二、实验原理1、LED流水灯的原理即为单个控制LED的亮灭、亮灭,让单个LED灯先亮然后很快灭掉,并在很短的时间里使下一个LED重复这一过程。

这样让一排LED灯依次亮灭后即形成流水灯的效果。

2、在本次实验中把蜂鸣器用扬声器替代,通过控制扬声器工作时间来控制扬声器的发音频率。

3、按键是机械装置,在其闭合的时候会产生震荡,这会让软件产生误判。

为了消除这种影响,就需要对按键进行软件消抖。

消抖原理为两次判断,只要相隔一段时间的两次判断皆为按键已按下,那么这次的判断结果就是可信的,所以用到延时函数。

三、实验步骤;1、硬件仿真。

先分析实验所需的硬件条件,然后在Proteus上连接好硬件电路,注意连接好必要的电阻等。

2、软件编写。

在Keil或其它的单片机编程软件上用C语言编写出构思好的软件。

3、将程序编译为HEX文件,然后烧录到仿真单片机中,进行仿真。

四、实验结果及分析1、LED流水灯的硬件仿真电路图:实验中加入了循环处理,所以该流水灯可以顺着亮一遍再逆着亮一遍,如此反复。

并且改变流水灯亮灭的时间间隔还可以得到各种不同的效果。

2、蜂鸣器驱动的硬件仿真电路图:这里用扬声器代替蜂鸣器。

以单片机产生的一方波脉冲作为扬声器的电信号输入,用不同频率的方波信号产生不同音调的声音。

3、;4、独立按键延时去抖的硬件仿真电路图:用一个按键控制LED灯的亮灭,在软件中对按键进行消抖。

五、体会这一次的单片机实验让我感到自己对Proteus的运用还欠缺许多,基本可以说是一窍不通。

所以,这次实验以后还要花大量的时间在Proteus的学习上,希望可以从中学习到很多的东西。

还有在编程方面,很多的编程思想都还不成熟,想到的方法都有很多欠缺的地方,和书上所给的例子差距还很大。

左右流水灯,蜂鸣器响

左右流水灯,蜂鸣器响
#define uchar unsigned char
#define GPIO_LED P2 //将P2口另外取名为GPIO_LED
sbit beep = P1^5;
void delay(uchar c)
{
for(;c>0;c--);
}
void Delay10ms(unsigned int); //误差 0r(n=0;n<7;n++) //左移7次,这样子就会到达最左边
{
GPIO_LED=_crol_(GPIO_LED,1); //将GPIO_LED左移一位
Delay10ms(43); //延时
for(a=1000;a>0;a--)
/*******************************************************************************
* 实 验 名 : 左右流水灯,蜂鸣器响实验
* 使用的IO : P2
* 实验效果 : 点亮的LED从右边往左边移动,到达左边再往右边移动,蜂鸣器同时响,间隔500ms,依此循环。
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
* 函 数 名 : Delay10ms
* 函数功能 : 延时函数,延时10ms
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/

day02-流水灯控制、蜂鸣器、按键及外部中断

day02-流水灯控制、蜂鸣器、按键及外部中断

day02-流⽔灯控制、蜂鸣器、按键及外部中断1、led点灯:int main(void){delay_init(168); //³õʼ»¯ÑÓʱº¯ÊýLED_Init(); //³õʼ»¯LED¶Ë¿Ú/**这⾥的PF.1是板⼦上的任意管脚,将原来的PF.9不配置,使⽤杜邦线连接PF.1和PF.9进⾏驱动led **/while(1){GPIO_ResetBits(GPIOF,GPIO_Pin_1); //GPIOF.1 =0,LED0GPIO_SetBits(GPIOF,GPIO_Pin_10); //GPIOF.10 =1,LED1delay_ms(500); //延时GPIO_SetBits(GPIOF,GPIO_Pin_1); //LED0GPIO_ResetBits(GPIOF,GPIO_Pin_10); //LED1delay_ms(500);}}// led 管脚初始化void LED_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);////GPIOF9,F10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_10;//LED0ºÍLED1GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_Init(GPIOF, &GPIO_InitStructure);//GPIOGPIO_SetBits(GPIOF,GPIO_Pin_1 | GPIO_Pin_10);//GPIOF1,F10}View Code驱动led需要配置外设的时钟,具体选择外设的哪⼀个管脚,选择管脚为输出模式,输出模式中管脚驱动能⼒,管脚最⼤输出速度,管脚配置上下拉输出;具体的每种模式详细查看库函数可选项;2、蜂鸣器驱动: 蜂鸣器有有源和⽆源蜂鸣器,有源蜂鸣器只需要⾼低电平开关便可以蜂鸣器出声。

实验报告_流水灯与蜂鸣器

实验报告_流水灯与蜂鸣器

重庆理工大学实验报告课程汇编语言程序设计题目流水灯与蜂鸣器实验院系名称计算机科学与工程学院班级 115030703 学生姓名郭鑫学号 11503070310 任课教师但远宏时间 2016-11-151 电路原理分析1.1 LED及其驱动电路工作原理Led灯两端为高电势灯不亮,两端出现电势差则灯亮,因为led的一端接的VCC,.所以I/O口为高电势不亮,为低电势就亮,所以通过控制P0端的电势,就能控制led。

1.2 蜂鸣器及其驱动电路工作原理蜂鸣器里由三极管,I/O口驱动三极管,如果I/O口为高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,如果I/O口为低电平,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音。

2 程序设计与实现2.1用位操作依次点亮1、3、5、7,再点亮2、4、6、8用一个值来表示8个灯的状态,每次循环都将这个状态赋给P0口,改变灯的状态起始状态为1111 1111,都不亮,使用位左移两个,变为1111 1100,再加2,变为1111 1110循环3次变为1010 1010,此时已经完成依次亮1 3 5 7用一个计数器记录循环次数,接下来循环只执行位左移两个,不用加2最终变为0000 0000程序完成2.2 用总线操作依次点亮1、3、5、7,再点亮2、4、6、8直接改变P0口的值,使其控制的灯亮,比如先是0xff -> 0xfe这样就使灯1亮依次改变P0的值就能完成2.3 间隔100ms先奇数灯亮再偶数亮,循环三次,每循环一次,蜂鸣器响一声;8个全部闪烁3次;关闭发光管,程序停止先将奇数亮的值0x55赋给P0,等100ms,再将偶数亮的值0xaa赋给P0,等100ms,将P2^4也就是蜂鸣器的I/O口赋0,再赋1,形成依次蜂鸣。

循环三次,用计数器记录循环次数。

当计数器为三时,结束循环,将P0赋0x00,再赋0xff,完成一次闪烁,计数器减一,当计数器为0,进入死循环,程序停止。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档