闪烁LED灯的程序
51单片机控制LED灯程序设计

51单片机控制LED灯程序设计首先,我们需要明确要使用到的硬件资源和引脚连接情况。
假设我们使用的是STC89C51单片机,LED灯的正极连接到单片机的P1口,负极通过电阻连接到地。
接下来,我们需要了解一些基本的汇编指令和编程规范。
在编写51单片机程序时,需要使用到一些特定的寄存器和指令。
首先是P1寄存器,它用来控制P1口的输出和输入状态。
然后是MOV指令,这是一个用来将数据从一个寄存器复制到另一个寄存器的指令。
最后是一个延时函数,可以利用循环来实现延时。
首先,我们需要初始化P1口为输出状态。
在51单片机中,IO口可以被配置为输入(1)或输出(0)。
我们可以使用MOV指令将0赋值给P1寄存器,将其配置为输出。
此外,我们还需要一个简单的延时函数,来控制LED灯的亮灭时间。
下面是一个基本的51单片机控制LED灯的程序:```assemblyORG0;程序的起始地址MOVP1,;初始化P1口为输出状态LOOP:;主循环MOVP1,;将P1的状态置为0,LED灯灭ACALLDELAY;调用延时函数,延时一段时间MOVP1,;将P1的状态置为1,LED灯亮ACALLDELAY;调用延时函数,延时一段时间JMPLOOP;无限循环DELAY:;延时函数MOVR3,;初始化循环计数器为250LOOP1:MOVR2,;初始化循环计数器为250LOOP2:MOVR1,;初始化循环计数器为250LOOP3:DJNZR1,LOOP3;内层循环DJNZR2,LOOP2;中层循环DJNZR3,LOOP1;外层循环RET;返回主程序```以上是一个简单的51单片机控制LED灯的汇编程序。
程序中通过不断切换P1口的状态来实现LED灯的亮灭。
同时,通过调用延时函数来实现亮灭的时间间隔。
在主循环中,LED灯会亮和灭各一段时间,然后无限循环。
为了将以上汇编程序烧录到单片机中,需要将其汇编为二进制文件。
通常可以使用Keil C等开发工具进行汇编和烧录操作。
msp430Led按键控制灯亮程序

1.Led灯控制程序#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD; //关闭看门狗//P1DIR = 0x41;//P1OUT = 0x41; //程序点亮led1//P1DIR |=BIT0+BIT6;//P1OUT |=BIT0+BIT6; //程序点亮led2P1DIR |=BIT0;P1OUT |=BIT0;P1DIR |=BIT6;P1OUT &=~BIT6;while(1){P1OUT ^=BIT0;P1OUT ^=BIT6;__delay_cycles(1000000);} //led交替亮,持续1s2.Led按键控制灯亮#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;//关闭看门狗P1DIR &=~BIT3;P1DIR |=BIT0;P1IES |=BIT3;P1IE |=BIT3;_EINT();_BIS_SR(LPM0_bits+GIE);}#pragma vector=PORT1_VECTOR__interrupt void PORT1_ISR(void){int i;char pushkey;pushkey=P1IFG&BIT3;//第三位中断标志位for(i=0;i<1000;i++)//短暂延时软件去抖if((P1IN&pushkey)==pushkey){P1IFG=0;//中断标志清零return;}if(P1IFG&BIT3)//判断按键是否按下{P1OUT^=BIT0;}P1IFG=0;return;}3.矩阵键盘和数码管程序#include <msp430g2553.h>#include"Key&Display.h"//unsigned char Receive(void);void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;Init_4lines_Mode();//初始化4线工作模式Send_Command(CH452_RESET);//CH452芯片内部复位Send_Command(KeyDisplay_ON);//允许显示驱动并启动键盘扫描//开中断,P2.0接CH452的DOUT引脚,当有键按下时,DOUT上产生由高到低的脉冲// P2SEL &= ~(BIT6+BIT7);P2IE|=BIT0;P2IES|=BIT0;P2IFG&=~BIT0;_EINT();while(1){}}//中断处理函数#pragma vector = PORT2_VECTOR//中断处理程序,接收到DOUT脉冲信号时,运行之__interrupt void Port2(void){unsigned char Keyvalue;Send_Command(CH452_GET_KEY);//单片机向CH452发送读取按键代码命令Keyvalue=Key_Read();// Keyvalue=Receive();switch(Keyvalue){case 0x40://按键K0按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis00);//第0位数码管显示0break;}case 0x41://按键K1按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis01);//第0位数码管显示1break;}case 0x42://按键K2按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis02);//第0位数码管显示2break;}case 0x43://按键K3按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis03);//第0位数码管显示3break;}case 0x48://按键K4按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis04);//第0位数码管显示4break;}case 0x49://按键K5按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis05);//第0位数码管显示5break;}case 0x4A://按键K6按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis06);//第0位数码管显示6break;}case 0x4B://按键K7按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis07);//第0位数码管显示7break;}case 0x50://按键K8按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis08);//第0位数码管显示8break;}case 0x51://按键K9按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis09);//第0位数码管显示9break;}case 0x52://按键K10按下{Send_Command(Dis00);//第0个数码管显示字符"0"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x53://按键K11按下{Send_Command(Dis01);//第0个数码管显示字符"1"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x58://按键K12按下{Send_Command(Dis02);//第0个数码管显示字符"2"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x59://按键K13按下{Send_Command(Dis03);//第0个数码管显示字符"3"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x5A://按键K14按下{Send_Command(Dis04);//第0个数码管显示字符"4"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x5B://按键K15按下{Send_Command(Dis05);//第0个数码管显示字符"5"Send_Command(Dis11);//第1个数码管显示字符"1"break;}default:break;}P2IFG&=~BIT0;}4.红灯0.2秒闪一次,绿灯0.8秒闪一次#include <msp430g2553.h>void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 &=~XTS; //配置时钟BCSCTL3 |=LFXT1S_2;IFG1 &=OFIFG;P1DIR |=BIT0+BIT6; // P1.0,P1.6 output P1OUT &=~BIT0; // P1.0,P1.6置0 P1OUT &=~BIT6;TACCR0 = 12000-1; //1秒定时,产生中断TACCR1 = 2400; //频率0.2*12000,定时0.2秒TACCR2 = 9600; //定时0.8秒TACTL = TASSEL_1 + MC_1+TAIE; // ACLK, 增计数模式TACCTL1 |=CCIE; // TACCR1中断使能TACCTL2 |=CCIE; // TACCR1中断使能_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Timer_A3 Interrupt Vector (TA0IV) handler#pragma vector=TIMER0_A1_VECTOR__interrupt void Timer_A(void){switch( TA0IV ){case 2: P1OUT ^= BIT0; // 捕获/比较寄存器TACCR1break;case 4: P1OUT ^= BIT6;break; // 捕获/比较寄存器TACCR2case 10: break; // 未使用,计数达到TACCRO时执行中断,即1秒执行一次}}5.PMW波控制led灯亮度#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;P1DIR |=BIT6; //方向寄存器P1SEL |=BIT6; //功能寄存器TACTL=TASSEL_2+MC_1+ID_0; //定时器A控制寄存器选择增计数模式TACCTL1 |=OUTMOD_3; //捕获/比较控制寄存器TACCR0=1000-1;TACCR1=10;_BIS_SR(CPUOFF);}。
用C语言编写程序实现通过按键使LED灯周期闪烁

用C语言编写程序实现通过按键使LED灯周期闪烁(2010-02-24 21:12:44)标签:循环闪烁周期led灯按键杂谈一、设计题目二、程序功能:开机复位后,LED0到LED7全部点亮,所有LEDPort持续2S后熄灭,然后等待按键,按0键LED7以0.8S周期闪烁,按1键LEDPort以1S周期闪烁。
三、总体设计思想用中断方式实现定时器的定时,然后通过键盘中断程序实现通过对按键的操作来实现相应的周期闪烁。
在我编写的实验程序中我用到了定时器中断和外部中断。
程序共分为两个模块,一个为定时器模块,一个为键盘中断程序模块,在主函数中,首先实现所有LEDPort点亮,然后通过中断方式实现定时2S,在定时器num==20时,设定全局变量为标志位flag=1,然后再主函数中设定条件,通过标志位的变化实现所有LEDPort持续2S后熄灭。
然后进入循环,等待按键,在按键中断服务程序中使用switch语句实现通过改变num1的值来实现LED7的闪烁周期。
设定标志位b=0,在主函数中使用if语句通过判断b的值来改变LED7的亮灭情况,同时相应的b值会取反。
四、程序具体实现实验要求开机复位后,LED0到LED7全部点亮2S后熄灭。
在主函数中使用LEDPort=0x00;这条语句实现所有灯都亮,使用中断方式实现定时器定时2S,因为实验要求20ms溢出,所以设定num=100,在定时器中断服务程序中使用if语句判断条件,当num加到100,也就是说2S时间到时,执行flag=1;语句(先设定全局变量flag=0)。
然后在主函数中使用while语句规定只有在flag=0时才执行所有LEDPort点亮的操作。
2S时间到后,所有灯熄灭。
然后进入while循环,等待用户按键。
用户按键后,通过使用switch语句,实验按0键,num1=20,按1键,num1=50,。
而在主函数中,当按下0键或者1键时,num1就有了固定的值,通过if语句判断是否到达所要求的时间后,执行相应操作。
单片机C语言LED灯点亮程序完全版

1 例子1 第二个灯亮#include<reg52.h>void main()Pl=Oxfd;#include<reg52.h>Sbit D1=P1A O:Void main()1D1=O'注意:稍微改程序时需重新hex化例了2第?个灯亮#include<reg52.h> 〃52单片机头文件sbit ledl=Pl A0://单片机管脚位声明void main() 〃主函数{led 1=0; 〃将单片机P1.0 口清零whiled); 〃程序停止在这里,在后面会讲到为什么这样写。
}例子3第・?个灯亮#include<reg52.h> //52 单片机头文件void main() 〃主函数{Pl=0xfe; 〃将单片机P1 口的8个口由高到低分别赋值为I111I1I0 whiled); 〃程序停止在这里,在后面会讲到为什么这样写。
}2 例1 第三个灯闪烁fii?循环#include<reg52.h> sbit D2=P1A2: unsigned int a; void main()ID2=0;for(a=0;a<= 10000;a++){};D2=l;fbr(a=0;a<=10000;a++){};}例/ 2第三个闪烁while 循环#include<reg52.h>sbit D2=P1A2: unsigned int a;void main()a=5000;D2=0; while(a —); a=5000;D2=l;while(a-);}2.#include<reg52.h> //52单片机头文件sbit ledl=Pl A0: 〃单片机管脚位声明void mai n() 〃主函数unsigned int i; 〃定义?个int 型变量whiled)i=50000; 〃变量賦初值为50000 led仁0; 〃点亮灯while(i —); // 延时i=50000;ledl=l; 〃熄灭灯\vhile(i —);3 例子1 3 57灯同时亮#include<reg52.h> 〃52 单片机头文件sbit ledl=Pl A0; 〃单片机管脚位声明sbit led3=Pl A2; 〃单片机管脚位声明sbit led5=Pl A4; 〃单片机管脚位声明sbit led7=Pl A6; 〃单片机管脚位声明void mai n() 〃主函数led 仁0: 〃将单片机Pl.o 口淸零led3=0: 〃将单片机P1.2 口淸零led5=0: 〃将单片机P1.4 口淸零led7=0: 〃将单片机P1.6 口淸零while( 1); ——〃程疗:停止在这里,在后面会讲到为什么这样写例子2 1 3 57同时亮#in clude<reg52.h> 〃52 单片机头文件void mai n() 〃主函数IPl=0xaa;〃将单片机P1 口的8个口由高到低分别赋值为10101010例了? 3流水灯?个?个接着亮不循环#include<reg52.h> 〃52单片机头文件void mai n() 〃主函数unsigned int i:〃定义?个int 型变量whiled)仁50000: 〃变量赋初值为500()0Pl=0xfe:〃点亮第?个灯while(i —); 〃延时i=50000: 〃变量赋初值为50000Pl=Oxfd; 〃点亮第二个灯while(i —); 〃延时i=50000: 〃变呈赋初值为50000PI=Oxfb: 〃点亮第三个灯while(i —); 〃延时i=50000: 〃变量赋初值为50000Pl=0xf7; 〃点亮第四个灯while(i —); 〃延时i=50000: 〃变量赋初值为50000Pl=Oxef; 〃点亮第五个灯while(i —); 〃延时i=50000: 〃变量赋初值为50000Pl=Oxdf; 〃点亮第六个灯while(i —); 〃延时i=50000: 〃变量赋初值为50000Pl=Oxbf; 〃点亮第七个灯while(i —); 〃延时i=50000: 〃变量赋初值为50000PI=0x7f; 〃点亮第八个灯while(i —); 〃延时whiled); 〃程序停止在这里,在彳列 f 4 #include<reg52.h> #include <inlrins.h> #define uint unsigned int #define uchar un sig ned char uchar teinpjmnLnumlsbit beep二P2A3;void delay(uint);void main()1temp=Oxfe;while(l){for(num 1 =O:num 1 <3;num 1 ++){for(num=0:num<8:num++){Pl=temp;beep=O; delay(lOO); temp=_crol_(temp」); PI=Oxff: beep=l;delay(lOO);}}for(numl=0 :numl<3:numl++){for(num=0:num<8:nuin++){Pl=temp; beep=O; delay(lOO); temp=_cror_(temp. 1); Pl=Oxff;beep=l; delay(lOO);}}whiled);void delay(uint z){uinl x.y;for(x=z:x>0;x —) for(y=l 10;y>0:y —);4延时子程序void delay()uint x;for(x=100:x>0;x —){}:For 的嵌套void delay() {uint x,y;for(x= 100:x>0;x-)%小括号后不加分号与下句隔开(或者{ for(y=600:y>0:y —);})#include<reg52.h> 例子l#includevwg52? h>#define uint unsigned int#define uchar unsigned charsbit D1=PI A O:void delay(); %注意分号不能少void main()iwhile(l){Dl=0;delay();D1 = I;delay();}void delay()Iuint x,y; for(x=100:x>0;x-) for(y=600;y>0:y —);}带参数的比不带参数的要方便例r 2 无参和有参的对比#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit D1=P1A O;//void delay();void delay(uint);%带?个参数的,参数类型必须要写,参数可不写。
LED灯闪烁实验总结

课程名称:Zigbee技术及应用实验项目: LED灯闪烁实验指导教师:专业班级:姓名:学号:成绩:1.实验目的(1)学习单片机IO口配置与驱动,实现指示灯LED1闪烁,频率为1Hz;(2)通过模块化编程,养成良好编程习惯。
2.实验设备(1)CC2530核心板一块;(2)传感器底板一个;(3)仿真器一个;(4)方口USB线一根;3.实验原理3.1硬件设计原理本实验的原理如图1-1所示。
其中,LED1和LED3都串联一个R273和R275限流电阻,然后连接到CC2530的P1口的P1_1和P1_0管脚上。
当P1_1为低电平时,LED1上有电流流过,LED1被点亮,反之熄灭。
图1-1 LED灯原理图限流电阻R的计算:图中R273和R275限流电阻,其计算公式如下:R=(U-UF)/ID (1-1)式中,U为电路供电电压,UF为LED正向压降,ID为LED的工作电流。
对于普通LED发光二极管,其正向压降:黄色为1.4V、红色为1.6V、蓝/白色为2.5V;点亮工作电流为3-20mA。
由图1-1可知,电路供电电压为U=3.3V,LED1选择为黄色发光二极管(压降是1.4V),带入(1-1)式可得R的取值范围是95-633Ω,电阻只要在此范围内即可,一般选择了470Ω的常用电阻。
从图1-1可以看出,如果要让LED1发光,需要设置CC2530对应的I/O口将LED电平拉低。
本实验我们只点亮LED1指示灯,所以只要设置LED1为低电平即可,所以只要我们知道LED1与CC2530哪个管脚相连就可以进行编程。
随着这个思路我们在原理图中找到LED1与CC2530芯片的P1_1管脚连接,将P1_1管脚拉低LED1即被点亮。
3.2程序设计原理(1)主程序分析本实验的程序流程如图1-2所示,其重点IO口的配置。
如果以1Hz的频率点亮LED1闪烁,则需要配置P1_1为输出,然后在P1_1输出1Hz的脉冲信号。
图1-2 程序逻辑流程图(2)IO 端口配置P1口通过特殊功能寄存器P1SEL (P1口功能选择寄存器)和P1DIR (P1口方向寄存器)进行配置,其定义如下。
闪烁LED灯的程序

闪烁L E D灯软件描述:/*文件描述:使用的是口,可以用其他的端口,如果用其他的端口只需把程序里的改成相应的端口,程序实现的功能是单片机通过对端口高低电平的控制实现led灯的亮和灭。
赋值1就是高电平,0是低电平,具体赋什么值才亮要结合硬件部分,看led灯的接法。
这里是赋0就会亮。
*/#include<>sbitLED=P1^0;击确定就好了。
之后就需要在工程里面添加文件了(就是写程序代码的地方)。
点击file菜单下的new按钮就建立了新文件;键入程序点击保存按钮。
键入文件名但必须以.c为后缀,因为你写的是c语言文件。
如果是汇编就是.asm了。
一般用c语言写,这里我就用test1.了,点击保存。
然后就是设置了。
右击target1,选择第一项的options for target “target1”。
选择output在create HEX前勾上对号。
点击确定。
之后就是添加文件了,就是把c语言文件添加到工程里面去。
右击上图灰色的部分,再左击Add files to ‘source group 1‘,点击文件名,点击Add;文件添加完毕,关闭对话框就可以了。
下面就是编译了,就是安从左到右的3个按键即可。
创建了hex文件,这个文件就是烧写到单片机的文件;下面就是烧写程序了。
打开烧写程序选择单片机型号一般不用该默认c52.打开需要下载的文件即点击open file按钮;选择下载的文件;点击打开即可;选择端口。
一般这个电脑就是com1.点击下载即可。
给单片机上电;硬件描述:硬件部分就是一个led灯。
但是需要串联一个限流电阻,如果只加入一个led灯就是烧掉,限流电阻的选择要合适,这个自己百度看看很简单的在这里就不必说了,应该串联个500R左右的电阻,因为办公室里没有所以就用了2个1K的并联。
我建议同学自己焊下电路板,然后下载上程序看看。
下载后的状态:定时器/*文件描述:这个led口用的也是是口,可以用其他的端口,如果用其他的端口只需把程序里的改成相应的端口,这个程序实行的功能是利用定时器0的计数功能实现上面闪烁led灯的功能。
运用AT89C51使LED 灯闪烁

运用AT89C51使LED 灯闪烁1. 概述本文档将介绍如何使用AT89C51微控制器来控制LED灯的闪烁。
AT89C51是一种高性能、低功耗的8位单片机,具备丰富的GPIO(通用输入输出)引脚,适合用于各种嵌入式应用中。
2. 硬件准备在开始编程之前,我们需要准备以下硬件设备:•AT89C51单片机开发板•LED灯•220欧姆电阻(用于限流)3. 连接电路在连接电路之前,确保开发板和所需的元件处于关机状态。
按照以下步骤连接电路:1.连接LED灯的长脚(阳极)到AT89C51的P1.0引脚。
2.连接LED灯的短脚(阴极)通过220欧姆电阻接地。
确保连接正确后,即可准备开始编程。
4. 编程以下是使用AT89C51使LED灯闪烁的示例程序:#include <REG51.h>#define LED P1_0 // 定义LED控制引脚为P1.0void delay(int milliseconds){int i, j;for (i = 0; i < milliseconds; i++)for (j = 0; j < 120; j++);}void main(){while (1){LED = 1; // 将LED引脚置高,点亮LEDdelay(1000); // 延时1秒LED = 0; // 将LED引脚置低,熄灭LEDdelay(1000); // 延时1秒}}在上面的示例代码中,我们使用P1.0引脚来控制LED灯的开关。
程序使用了一个简单的延时函数delay来实现LED灯的闪烁效果。
当LED引脚置高时,LED 灯亮起;当LED引脚置低时,LED灯熄灭。
通过在LED灯亮起和熄灭之间加入适当的延时,我们可以实现LED灯的闪烁效果。
5. 下载程序在编程完成后,我们需要将程序下载到AT89C51单片机中。
以下是下载程序的步骤:1.将AT89C51单片机开发板连接到电脑的USB口或串口上。
proteus控制led灯闪烁的简单电路及程序

proteus控制led灯闪烁的简单电路及程序LED灯作为电子元件中广泛应用的一种,通过闪烁可以提供一种视觉提示。
在这篇文章中,我们将介绍如何使用Proteus软件设计一个简单的电路,并编写程序控制LED灯的闪烁效果。
本文将分为以下几个部分展开讨论。
1. 硬件设计在Proteus软件中,我们首先需要设计电路图。
请先插入一个微处理器芯片,例如Arduino UNO,然后将LED灯连接到芯片的一个数字引脚上。
确保LED的正极连接到数字引脚,负极连接到芯片的地线上。
为了实现闪烁效果,可以连接一个电阻到LED的负极,然后将另一端连接到芯片的VCC引脚。
2. 软件编程在设计了硬件电路后,我们需要编写控制LED闪烁的程序。
在Proteus软件中,可以使用Arduino IDE来完成这一任务。
以下是一个简单的C代码示例:```cvoid setup() {pinMode(2, OUTPUT); // 选择使用的数字引脚}void loop() {digitalWrite(2, HIGH); // LED灯亮起delay(1000); // 延时1秒digitalWrite(2, LOW); // LED灯熄灭delay(1000); // 延时1秒}```代码中的`setup`函数用于设置程序运行时的初始状态,其中`pinMode`函数用于配置数字引脚为输出模式。
`loop`函数则是程序的主要循环,其中`digitalWrite`函数用于控制LED灯的亮灭状态,`delay`函数用于给LED保持亮灭状态的时间间隔。
3. 仿真验证完成软件编程后,我们需要在Proteus中进行电路仿真验证。
打开Proteus软件,将设计好的电路图和编写好的程序导入到仿真环境中。
然后点击开始仿真按钮,程序将开始运行,并控制LED灯按照设定的时间间隔闪烁。
通过仿真验证,我们可以判断程序的逻辑是否正确,同时可以观察LED灯的正常工作情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
闪烁LED灯
软件描述:
/*文件描述:使用的是口,可以用其他的端口,如果用其他的端口只需把程序里的改成相应的端口,程序实现的功能是单片机通过对端口高低电平的控制实现led灯的亮和灭。
赋值1就是高电平,0是低电平,具体赋什么值才亮要结合硬件部分,看led灯的接法。
这里是赋0就会亮。
*/
#include<>
sbit
LED=P1^0;
击确定就好了。
之后就需要在工程里面添加文件了(就是写程序代码的地方)。
点击file菜单下的new按钮就建立了新文件;
键入程序点击保存按钮。
键入文件名但必须以.c为后缀,因为你写的是c语言文件。
如果是汇编就是.asm了。
一般用c语言写,这里我就用test1.了,点击保存。
然后就是设置了。
右击target1,选择第一项的options for target “target1”。
选择output
在create HEX前勾上对号。
点击确定。
之后就是添加文件了,就是把c语言文件添加到工程里面去。
右击上图灰色的部分,再左击Add files to ‘source group 1‘,
点击文件名,点击Add;
文件添加完毕,关闭对话框就可以了。
下面就是编译了,
就是安从左到右的3个按键即可。
创建了hex文件,这个文件就是烧写到单片机的文件;
下面就是烧写程序了。
打开烧写程序
选择单片机型号一般不用该默认c52.打开需要下载的文件即点击open file按钮;选择下载的
文件;
点击打开即可;选择端口。
一般这个电脑就是com1.点击下载即可。
给单片机上电;
硬件描述:硬件部分就是一个led灯。
但是需要串联一个限流电阻,如果只加入一个led灯就是烧掉,限流电阻的选择要合适,这个自己百度看看很简单的在这里就不必说了,应该串联个500R左右的电阻,因为办公室里没有所以就用了2个1K的并联。
我建议同学自己焊下电路板,然后下载上程序看看。
下载后的状态:
定时器
/*文件描述:这个led口用的也是是口,可以用其他的端口,如果用其他的端口只需把程序里的改成相应的端口,这个程序实行的功能是利用定时器0的计数功能实现上面闪烁led灯的功能。
*/
#include <>
sbit LED= P1^0;
unsigned char Time=0;
有串口号根据情况可以改变)。
在下方写入你要发送的字符看看上面的方框收到什么。
写入a得到了E1.这是为什么呢。
这是因为接收区设置为十六进制显示。
所以得到的是a的十六进制代码值。
串口查询
/*文件描述:对串口进行测试,单片机发送字符到电脑,在由电脑发送回来*/
#include <>
int main(void) //主函数
{
unsigned char Temp; //定义变量用来发送或接收数据
TMOD=0x20; //定时器T1使用工作方式2
TH1=253; //设置初值
TH0=253;
TR1=1; //开始计时定时器不能开中断
PCON=0x00; //SMOD=0;
SCON=0x50; //工作方式1,波特率9600bit/s,允许接收
TI=1; //TI置初值TI发送数据标志位
IE=0; //屏蔽中断就是不使用中断了
while(1)
{
if(RI)
{
RI=0; //清除RI标志
Temp=SBUF; //接收数据
}
if(TI)
{ TI=0;
SBUF=Temp; //发送数据
}
}
}
程序运行的结果:
我现在写入ab点击发送:。