单片机流水灯与蜂鸣器结合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空转。
51单片机流水灯程序
51单片机流水灯程序51单片机是一种广泛使用的微控制器,具有丰富的IO端口和定时器资源。
流水灯程序是51单片机入门的基础示例之一,通过多个LED灯按照一定顺序逐个亮起或熄灭,形成流水灯的效果。
下面详细介绍51单片机流水灯程序的编写。
一、硬件连接要实现流水灯效果,需要将多个LED灯连接到51单片机的IO端口上。
一般使用P1端口作为输出端口控制LED灯的亮灭,P2端口作为输出口控制LED灯亮起的顺序。
具体连接方式如下:•将LED灯的阳极通过限流电阻连接到VCC。
•将每个LED灯的阴极通过限流电阻连接到P1端口。
•将P2端口的每个引脚依次连接到每个LED灯的阴极。
二、程序实现#include <reg52.h> //包含51单片机头文件#define LED P1 //定义LED为P1端口#define ORDER P2 //定义顺序控制为P2端口void delay(unsigned int t); //延时函数声明void main(){unsigned char i;while(1) //循环控制流水灯效果{for(i=0; i<8; i++) //控制8个LED灯{LED = 0x01<<i; //将第i个LED灯置亮delay(10000); //延时一段时间,使LED灯亮起后延时熄灭LED = 0x01>>(i+1); //将第i个LED灯置灭}}}void delay(unsigned int t) //延时函数定义{unsigned int i, j;for(i=0; i<t; i++){for(j=0; j<1275; j++);}}该程序首先定义了LED和ORDER两个变量,分别对应P1和P2端口的输出口。
在主函数中,使用一个while循环控制流水灯效果。
在循环内部,使用一个for循环控制8个LED灯的状态。
在每次循环中,先将第i个LED灯置亮,延时一段时间后将其置灭,然后进入下一个循环。
单片机实验蜂鸣器和流水
汽车电子
发动机控制、安全气囊、导航 系统等。
单片机的发展历程
01
02
03
起源
20世纪70年代,随着微处 理器技术的发展,单片机 逐渐问世。
发展阶段
经历了4位、8位、16位和 32位等不同位数的发展, 性能不断提升。
未来趋势
随着物联网、人工智能等 技术的兴起,单片机将更 加智能化、网络化。
2. 代码编写
使用C语言或汇编语言编写代码,控 制单片机依次点亮每个LED灯,形成 流水灯效果。
3. 编译与烧录
将编写好的代码编译后烧录到单片机 中。
4. 测试与验证
观察LED灯是否依次亮起,形成流水 灯效果,并检查是否有闪烁或亮度不 均等问题。
06 实验总结与思考
实验收获与体会
硬件连接理解
通过亲手连接单片机、蜂鸣 器和LED灯,我深入理解了 硬件电路的连接方式,掌握 了基本的硬件操作技能。
04 单片机实验开发环境与工 具
单片机开发板的选择与使用
选择单片机开发板时,需要考 虑其性能、功能、兼容性和易 用性。
开发板上通常集成了单片机、 电源电路、接口电路等,方便 开发者进行实验和开发。
使用单片机开发板时,需要按 照说明文档连接电源、接口等, 确保安全可靠。
编程语言的介绍与选择
01
单片机编程语言常用的 有C语言和汇编语言。
软件编程实践
编写单片机程序使我熟悉了 编程语言和逻辑,学会了如 何通过编程控制硬件。
问题解决能力
在实验过程中遇到问题,通 过查阅资料和尝试不同的解 决方案,提高了我的问题解 决能力。
团队协作精神
与同学共同完成实验,互相 帮助和学习,培养了团队协 作精神。
蜂鸣器与流水灯实验报告
======================蜂鸣器与流水灯实验===================实验(一)蜂鸣器一、电路图二、程序注释1、频率、节拍常数的编码2、定时/计数器0中断赋初值,使计数器计满一次时时间为100ms。
同时没记一满次,n减13、毫秒的延时函数4、无参数返回值的延时函数5、主函数,用switch函数选择,当case为0x00时,延时一段时间再开始6、让i自加1,延时7、选择频率常数,选择m、n为第1个,第2个……第i个频率8、开定时器中断,延时4*m的时间等待节拍完成,当n不等于0时,将选出来的频率依次输出,实验(二)流水灯一、电路图二、程序注释①直接赋值控制亮灯法#include <reg52.h>sbit LED0=P1^0 ; //定义八个流水灯等为输出端口P1^0~P1^7 sbit LED1=P1^1 ;sbit LED2=P1^2 ;sbit LED3=P1^3 ;sbit LED4=P1^4 ;sbit LED5=P1^5 ;sbit LED6=P1^6 ;sbit LED7=P1^7 ;void delay(float t) //延时函数{ unsigned int i,j;j=t*100;while(j--){for(i=8000;i;i--);}}void main() //主函数{while(1){LED0=0; //亮第1个灯delay(0.1); //延时0.1sLED0=1; //熄灭LED1=0; //亮第2个灯delay(0.1);LED1=1;LED2=0; //亮第3个灯delay(0.1);LED2=1;LED3=0; //亮第4个灯delay(0.1);LED3=1;LED4=0; //亮第5个灯delay(0.1);LED4=1;LED5=0; //亮第6个灯delay(0.1);LED5=1;LED6=0; //亮第7个灯delay(0.1);LED6=1;LED7=0; //亮第8个灯delay(0.1);LED7=1;}}②循环左移法#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit p1=P1^0;uchar temp;void delay(uint); //延时函数声明void main() //主函数{temp=0xfe; //将0xfe赋给tempP1=temp; //P1值为temp,即11111110,第一个灯亮 while(1){temp=_crol_(temp,1); /*循环左移函数,每次向左移一位,使其第1,2,3……依次为0*/delay(100); //延时0.1sP1=temp; //将temp值赋给P1使}}void delay(uint z) //延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}。
蜂鸣器和流水灯实验
蜂鸣器和流水灯实验一、实验目的1、练习使用SOPC Builder进行硬件构建,熟悉硬件开发流程;2、熟悉NiosII IDE的使用,包括创建NiosII软件工程,系统工程库设置和工程具体C程序的编写等;3、掌握GPIO的使用方法二、实验构建的微处理器系统1、硬件系统图图1 硬件系统图2、原理图Timer图2 原理图三、设计的程序和说明#include"alt_types.h"#include"altera_avalon_pio_regs.h"#include"sys/alt_irq.h"#include"system.h"#include <stdio.h>#include <unistd.h>void delay(alt_u32 cnt); //延时函数申明int main(){alt_u8 cnt;alt_u16 cntt;IOWR_ALTERA_AVALON_PIO_DATA(FM_PIO_BASE,0x0); //初始化蜂鸣器控制端口IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0xff); //初始化8个LED都处于熄灭状态cntt=0;while(1){IOWR_ALTERA_AVALON_PIO_DATA(FM_PIO_BASE,0x1);// IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,~(1 << cnt)); //给8个LED送数据usleep(500);//delay(16);IOWR_ALTERA_AVALON_PIO_DATA(FM_PIO_BASE,0x0);// IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,~(1 << cnt)); //给8个LED送数据usleep(500);//delay(16);cntt++;if(cntt==231){if(cnt==8) //循环LED显示{ cnt=0;IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,~(1 << cnt));}else{cnt++;IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,~(1 << cnt));//cnt++; //给8个LED送数据}cntt=0;}//}return 0;}//延时函数(延时时间为(2+2*i)us)void delay(alt_u32 cnt){alt_u32 i =0;while(i < cnt){i++;}}四、精度讨论根据设计的要求,蜂鸣器的鸣叫频率为1KHz即1ms,8个LED的流水灯的速度为4Hz即0.25s。
蜂鸣器音乐程序设定C语言
4.4.4.4.1111 音调音调音调音调、、、、节拍节拍节拍节拍以及以及以及以及编码的确定编码的确定编码的确定编码的确定方法方法方法方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。
4.4.4.4.1111.1.1.1.1 音调的确定音调的确定音调的确定音调的确定不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。
把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。
两个音之间的距离有两个“半音”,就叫“全音”。
在钢琴等键盘乐器上,C–D、D–E、F–G、G–A、A–B两音之间隔着一个黑键,他们之间的距离就是全音;E–F、B–C两音之间没有黑键相隔,它们之间的距离就是半音。
通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音。
﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。
例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。
1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
蜂鸣器闹钟和数字流水灯 模拟设计
{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);
单片机_AVR_流水灯_闹钟等
AVR单片机实验报告班级:学号:班内序号:姓名:Email:同组姓名:实验一:流水灯的设计和实现实验原理图:实验原理:AVR单片机的高低电平和TTL电路的一致,即高电平=5V,低电平=0V。
AVR 单片机的驱动能力比51单片机强,可以直接驱动LED。
所以将8个LED二极管正极接在ATmega16的PD0~PD7端口,负极经过限流电阻接到GND,通过控制PD口的电平的高低,就可以实现LED的亮灭。
实验源程序:实验程序使用iccavr编译器编译:#include <iom16v.h>#include<macros.h>void delay(int ms) //延时函数{int i,j;for(i=ms;i>0;i--)for(j=0;j<1141;j++);}void main(){int i;DDRA=0XFF; //配置PD端口为输出while(1){for(i=0;i<=7;i++) //循环逐次显示每个LED二极管{PORTA|=BIT(i);delay(1000);PORTA&=~BIT(i);}}}实验心得体会:通过学习,首先我了解了一些关于单片机的知识,包括单片机的分类,功能等,还有软硬件结合编程使用单片机,单片机的编程语言和EDA的使用,比如ICCAVR,AVR Studio 4等。
其次我了解了AVR单片机的一些基本知识,学会了控制端口的输入输出方向,和电平的高低的方法。
同时,AVR单片机的C语言编程基本和标准C语言一致,它在C语言的基础上,添加了一些适合单片机的头文件。
所以,在编程方面我遇到的障碍不是很大。
我觉得最大的收获是学会怎么看相关的技术文档,技术文档一般内容很多,并且都是以前没有学过的知识,所以快速的查阅到自己想看的内容,是一件很有学问的能力。
实验二:交通灯实验原理图:实验原理:数码管有共阴和共阳两种,8段数码管由8段LED组成,共阴极数码管的8段LED的阴极相连,共用一个阴极;共阳极数码管的8段LED的阳极相连,共用一个阳极。
c语言 stm32蜂鸣器代码
要编写C语言的STM32蜂鸣器代码,首先需要了解蜂鸣器的工作原理和STM32的基本操作。
在编写代码之前,建议按照以下步骤进行准备和规划。
一、了解蜂鸣器的工作原理蜂鸣器是一种能够产生声音的电子元件,它通常由振膜和驱动电路组成。
当有电流通过时,振膜会受到驱动而振动,从而产生声音。
我们在编写蜂鸣器代码时需要考虑如何控制电流输出来操控蜂鸣器的声音。
二、学习STM32的基本操作STM32是由意法半导体公司制造的一系列32位的嵌入式处理器芯片,它具有强大的功能和丰富的外设。
在使用STM32芯片时,需要了解其基本操作,包括寄存器的配置、时钟的设置、外设的控制等。
三、准备开发环境在编写C语言的STM32蜂鸣器代码之前,需要准备好相应的开发环境,包括编译器、调试器、下载器等工具。
常见的开发环境包括Keil、IAR等,选择一款适合自己的开发环境,进行相应的设置和配置。
四、编写蜂鸣器代码在以上准备工作完成之后,就可以着手编写C语言的STM32蜂鸣器代码了。
在编写代码时,需要注意以下几点:1. 选择合适的GPIO引脚首先需要选择一个合适的GPIO引脚来连接蜂鸣器,以便控制蜂鸣器的电流输出。
在选择引脚的需要了解其对应的端口号和引脚号,以便在代码中正确设置。
2. 配置引脚通过设置GPIO的相应寄存器,配置选定的GPIO引脚为输出模式,并初始化为低电平状态,以防止蜂鸣器在开始时就发出声音。
3. 控制蜂鸣器通过设置GPIO引脚的输出状态,来控制蜂鸣器的声音输出。
可以通过循环控制引脚的输出状态,从而产生不同频率和音调的声音。
4. 完善代码在编写完基本的蜂鸣器代码之后,可以考虑添加一些额外的功能,比如控制蜂鸣器的响声时长、声音的音量等,以使代码更加完善和实用。
五、调试和测试代码在编写完代码后,需要进行调试和测试,确保代码能够正常运行。
可以通过连接调试器,使用仿真器进行调试,或者直接下载到STM32芯片中进行测试,检查蜂鸣器是否按照预期工作。
单片机流水灯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++)
基于51单片机蜂鸣器发声的-C语言程序
本例使用延时函数实精品文档按键发音/* 名称:按键发音说明:按下不同的按键会是SOUNDE 发出不同频率的声音。
现不同频率的声音输出,以后也可使用定时器*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P3A 7;sbit K 仁 P1A4;sbit K2=P1A5;sbit K3=P1A6;sbit K4=P1A7;// 延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}// 按周期 t 发音void Play(uchar t){uchar i;for(i=0;i<100;i++){BEEP=~BEEP;DelayMS(t);}BEEP=0;}void main(){P1=0xff;BEEP=0;while(1){if(K1==0) Play(1);if(K2==0) Play(2);if(K3==0) Play(3);if(K4==0) Play(4);}}精品文档播放音乐/* 名称:播放音乐说明:程序运行时播放生日快乐歌, 未使用定时器中断,所有频率完全用延时 实现*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P3A7;// 生日快乐歌的音符频率表,不同频率由不同的延时来决定uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159, 169,190,119,119,126,159,142,159,0};// 生日快乐歌节拍表,节拍决定每个音符的演奏长短uchar code SONG_LONG[]= {9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0};// 延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}// 播放函数void PlayMusic(){ uint i=0,j,k; while(SONG_LONG[i]!=0||SONG_TONE[i]!=0){ //播放各个音符,SONG_LON为拍子长度for(j=0;j<SONG_LONG[i]*20;j++){BEEP=~BEEP;〃SONG_TON延时表决定了每个音符的频率for(k=0;k<SONG_TONE[i]/3;k++);} DelayMS(10);i++;}}void main(){BEEP=0;while(1){PlayMusic(); // 播放生日快乐DelayMS(500); // 播放完后暂停一段时间}精品文档。
单片机-流水灯的程序
#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
二进制
十六进制
二进制
单片机原理及应用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 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-流⽔灯控制、蜂鸣器、按键及外部中断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、蜂鸣器驱动: 蜂鸣器有有源和⽆源蜂鸣器,有源蜂鸣器只需要⾼低电平开关便可以蜂鸣器出声。
MSP430流水灯蜂鸣器实验报告
MSP430实验报告水位报警器姓名:丁宇昊学号: 021210508一、实验目的:掌握msp430单片机的程序编写和运行过程。
掌握IAR Embedded Workbench程序的编译和运行。
二、实验内容:用继电器代替传感器输入模拟电压,用IED灯显示水位高度,当超过预定值时,蜂鸣器响,实现报警。
三、使用串口:P1口,P2口四、电路实现:把继电器作为的AD的输入,通过AD转换,把电压分成16小分,每一份信号控制1个led,通过改变led两端电平高低,控制led亮灭。
当到达预定值时,把蜂鸣器的接口设置为高电平。
五、实验代码:#include <msp430.h>void delay(int j){do j--;while (j != 0);}int main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabledADC10CTL1 = INCH_1+SREF0; // input A1ADC10AE0 |= BIT7; // PA.1 ADC option selectP1DIR |= BIT0; // Set P1.0 to output directionP1DIR|=BIT4;P1DIR|=BIT5;P2DIR|= 0xff;P2OUT|=0xff;P2SEL&=0x00;for (;;){ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit if (ADC10MEM > 960){P1OUT |=BIT4;P1OUT &= ~BIT5;P2OUT =0xFE;}else if(ADC10MEM >900){ P1OUT |=BIT4;P1OUT &= ~BIT5;P2OUT = 0xfc;}else if(ADC10MEM >840){ P1OUT |=BIT4;P1OUT &= ~BIT5;P2OUT=0xf8;}else if(ADC10MEM >780){ P1OUT |=BIT4;P1OUT &= ~BIT5;P2OUT= 0xf0;}else if(ADC10MEM >660){ P1OUT |=BIT4;P1OUT &= ~BIT5;P2OUT= 0xe0;}else if(ADC10MEM >600){ P1OUT |=BIT4;P1OUT &= ~BIT5;P2OUT= 0xc0;}else if(ADC10MEM >540) { P1OUT |=BIT4;P1OUT &= ~BIT5;P2OUT= 0x80;}else if(ADC10MEM >480) { P1OUT |=BIT4;P1OUT &= ~BIT5;P2OUT= 0x00;}else if(ADC10MEM >420) { P1OUT&=~BIT5;P2OUT=0x00;P1OUT|=BIT4;P2OUT=0x00;delay(20);P1OUT&=~BIT4;P2OUT=0xfe;P1OUT|=BIT5;P2OUT=0xfe;}else if(ADC10MEM >360) { P1OUT&=~BIT5;P2OUT=0x00;P1OUT|=BIT4;P2OUT=0x00;delay(20);P1OUT&=~BIT4;P2OUT=0xfc;P1OUT|=BIT5;P2OUT=0xfc;}else if(ADC10MEM >300) {P1OUT&=~BIT5;P2OUT=0x00;P1OUT|=BIT4;P2OUT=0x00;delay(20);P1OUT&=~BIT4;P2OUT=0xf8;P1OUT|=BIT5;P2OUT=0xf8;}else if(ADC10MEM >240) { P1OUT&=~BIT5;P2OUT=0x00;P1OUT|=BIT4;P2OUT=0x00;delay(20);P1OUT&=~BIT4;P2OUT=0xf0;P1OUT|=BIT5;P2OUT=0xf0;}else if(ADC10MEM >180){ P1OUT&=~BIT5;P2OUT=0x00;P1OUT|=BIT4;P2OUT=0x00;delay(20);P1OUT&=~BIT4;P2OUT=0xe0;P1OUT|=BIT5;P2OUT=0xe0;}else if(ADC10MEM >120){ P1OUT&=~BIT5;P2OUT=0x00;P1OUT|=BIT4;P2OUT=0x00;delay(20);P1OUT&=~BIT4;P2OUT=0xc0;P1OUT|=BIT5;P2OUT=0xc0;P1DIR |=BIT6; P1OUT ^=BIT6;delay(100);}else if(ADC10MEM >60){ P1OUT&=~BIT5;P2OUT=0x00;P1OUT|=BIT4;P2OUT=0x00;delay(20);P1OUT&=~BIT4;P2OUT=0x80;P1OUT|=BIT5;P2OUT=0x80;P1DIR |=BIT6;P1OUT ^=BIT6;delay(100);}else{ P1OUT&=~BIT5;P2OUT=0x00;P1OUT|=BIT4;P2OUT=0x00;delay(20);P1OUT&=~BIT4;P2OUT=0x00;P1OUT|=BIT5;P2OUT=0x00;P1DIR |=BIT6;P1OUT ^=BIT6;delay(100);}}}// ADC10 interrupt service routine#pragma vector=ADC10_VECTOR__interrupt void ADC10_ISR(void){__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)}六、总结通过这次msp430单片机的实验,是我进一步的了解了单片机的远离,虽然在实验过程中遇到了一些问题,但我及时与同学讨论与老师沟通,解决了以上问题。