Ⅰ STC12C5A60S2制作呼吸灯C语言程序怎么写
呼吸灯的程序:
/****************************************************************************
功能:LED灯慢慢变暗,再慢慢变亮。
用定时器模拟的PWM调制。
单片机:AT89S52
******************************************************************************/
#include<reg52.h>
#defineV_TH00XFF//设定定时器0,高8位的初值
#defineV_TL00XF6//设定定时器0,低8位的初值
#defineV_TMOD0X01//设定定时器0的工作方式为:方式1(计数位数是16位//,由TL0作为低8位、TH0作为高8位)
#defineucharunsignedchar
#defineuintunsignedint
voidinit_sys();//系统初始化函数
voiddelay(uint);//延时函数
unsignedcharZKB;//占空比
voidmain(void)
{
init_sys();//初始化
while(1)
{
for(ZKB=5;ZKB<40;ZKB=ZKB+2)//每调节一次占空比,就延时大概8ms左右,这使得LED现象更明显
{
delay(8);
}
for(ZKB=40;ZKB>5;ZKB=ZKB-2)
{
delay(8);
}
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
voidinit_sys()/*系统初始化函数*/
{
/*定时器初始化*/
TMOD=V_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA=1;
}
voidtimer0(void)interrupt1using2
{
staticucharclick=0;//中断次数计数器变量
TH0=V_TH0;//重新恢复定时器初始值
TL0=V_TL0;
++click;//每计数10次,产生一个中断,并且click增加一个
if(click>=100)
click=0;//计满一百次,这重新计数。
/*因为计一次数的时间是1us,10次产生一个中断,也就是一个中断10us。100个中断为1ms。
则,可以在这100个数中随便取值,用于表示占空比的多少,占空比的范围为(1~100)*/
if(click<=ZKB)//当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整
P1=0x00;//P1口接的是LED灯
else
P1=0xff;
}
此程序的总中断时间为100ms,即频率为:100KHZ,占空比从5变为40(即5%~25%)。
Ⅱ STC12C5A32S2-35I-LQPF44 单片机怎么烧录程序
STC单片机烧写程序步骤
找一个下载器,下载器的GND、TXD、RXD三条线跟单片机的三条线接好之后,把下载器插上电脑,然后打开这个软件,下图的红色地方要设置好,
1,MCU是STC89C52或是STC12C5A60S2之类。
2,COM口要设置好
3,波特率先设最最9600,如果下载不成功,就再调低,如果下载成功,可以再往上调,如果115200都成功,就一直用这个就行。(下载器的线如果太长,波特率无法比较高,这是下载程序的速度,越高,下载程序速度越快。)
Ⅲ 单片机怎么烧程序
问题一:51单片机芯片烧入程序 买一个烧录器就好了,杜邦线直接插到DIP脚上
问题二:单片机如何烧录程序 STC系列单片机为例:
首先,需要安装keil软件和STC_ISP程序下载软件。
先对你想要实现对单片机的功能用keil编程,然后用STC_ISP下载软件下载到单片机上,最后打开给单片机提供电源就可以观察单片机开发板或是自己搭建的板子上的现象了...通过不断修改程序,下载程序,最终获得自己在实验板上想要的结果。这样就可以了...
实验板与PC机的连接:一般对现成购买的开发板来说,会有一个USB接口提供5v电源、提供通信或另一个USB用桥答野来下载接口驱动程序,同时有RS232串口,实现MAX232电平与单片机TTL电平之间转换,用来进行通信下载程序和数据;;对自己搭建的电路板来说,仍会有MAX232芯片和RS232串口用来实现程序的烧写,实现对单片机写入数据和程序的下载。用的是RS232串口实现的程序烧写!
若要用USB来烧写,需要一个相应的ISP下载软件和硬件烧写器,一般这种烧写器价格不菲。用的是USB口实现烧写程序!
一般的,烧写程序还是选用可以用ISP下载的,自己搭建个RS232串口的电路,简单实用,对单片机烧写程序就够用了。
问题三:单片机中烧程序是什么意思 看处你刚刚入门。单片机是个有意思的东西,好好学。keil是电脑上的编程软件,烧程序你就理解为往单片机中下载程序。
问题四:单片机开始可以烧程序用了几次就烧不进去 怎么回事? 有可能已经烧坏敏喊了,特别是89c52系列 更特别是STC品牌的89C52的。很容易坏,
你要注意了,你电压可能有问题。
还有就是烧程序的时候需要复亥,如果以前你能烧现在不能烧,说明你复位电路没有问题,经常复位电路影响烧程序。
问题五:第一次给单片机烧程序要注意什么? use转232应该没有问题,我用现代的芯片试过已经通过。首先我们要分析你有没有进入ISP模式,用示波器观察一下串口的波形是否正常,再就是芯片各个管脚的电压是否正常。排除硬件原因后仍不能解决,建议换一下你的USB转232线,这方面的牌子实在太多了,虽然原理都一样,但作为一个故障点来分析也是应该考虑的。
问题六:为什么单片机程序烧不进去? 用的是什么型号的单片机?会不会是烧写前没有先擦除?单片机保存程序是使用EEPROM或者flash的,都需要先擦除,才能写入的。第一次能烧进去,是因为单片机出场时本来就是已擦除过的,可以写入。但之后的写入之前,都需要先擦除。
问题七:单片机程序烧入rom之后怎样执行 1,HEX文件包含了代码数据。是由链接器统一分配ROM地址。
2. 程序中的变量,也是在编译连接时,分配了RAM地址。不存在载入的问题,程序指令对变量的操作,就是对RAM地址的操作,地址值存在在指令中。
3. 堆栈在程序初始化时设置堆栈指针。Keil C 会自动设置好。
4. 一般的51单片机代码是从 0000开始执行,这是它的复位地址。也有别的型号的单片机并不一定从0开始执行。程序从0开始执行,但它执行的第一句往往是一个跳转指令(这个Keil C也是自动写好的),跳到另一块地址去执行,而不会顺序执行到 中断的地址的。
你如果是用汇编写程序,这些都是要你自己去分配的,用C写程序,由编译器来完成这些底层操作。
问题八:怎么程序突然烧不进单片机了??? 这种情况会有很多种可能性:
1、单片机已经损坏,楼主换个单片罚试试。
2、单片机开发板损坏,这个情况基本上不可能发生,但楼主需做好准备。
3、USBISP损坏,概率不大,换一个试试。
4、下载软件出问题了,楼主看看自己的程序下载软件的型号是否为“AT89S52”。
5、单片机在插座上插反了。
6、某条连接线不牢固。
7、开发板的晶振松了,或数值举派不对。
问题九:8051单片机通过什么口烧程序? at89c**系列是用并口下载。at89系列可以用isp方式下载。 stc系列可以通过串口下载。51有专门的仿真芯片。。
isp可以用串口或者并口,或者串口转u *** (这种方式最方便,笔记本上也可以下载)。isp就用到单片机的io口(P1.5,P1.6,P1.7),还有RST引脚+74h373+并口,就可以下载了。。
Ⅳ stc单片机烧录步骤
STC单片机烧录代码步骤:(以下文字由wannenggong经键盘录入)
1、需要有一根下载线。可以是连接电脑主板原生串行9针COM端口经MAX232芯片转换的串口连接线;也可以是连接电脑USB端口经CP21xx或CH3xx芯片转换的串口接线,如果使用的是USB转串口的下载线,使用前需要在电脑中安装相应转换芯片的驱动程序,目前使用最多的是CH340下载线,驱动安装成功后可以在电脑“设备管理器”端口列表中看到:USB-SERIAL CH340(COMx)项、此时需要牢记这个x也就是串口号码,例如:COM4。
2、连接下载线与STC单片机的串口1(P3.0,P3.1端口),此时需要注意的是下载线的TXD/RXD与单片机的TXD/RXD引线需要交叉连接。
3、到STC单片机官网下载最新版的STC-spi软件,打开软件后(1)、选择待下载芯片的型号。(2)、选择串口。(3)、设置波特率,最低波特率设为2400最高可以根据不同芯片从低到高试着设置。(4)、打开编译通过的.hex目标文件。
4、先不给单片机通电,点击“下载/编程”,等待3秒左右为单片机上电,接下来可以看到软件窗口的自动操作的各项提示和下载进度条,等待一段时间即可完成下载。
Ⅳ STC单片机开发板给单片机烧写程序的时候要用到哪些管脚贴片的单片机是怎么烧写程序的
STC单片机开发板给单片机烧写程序是不行的。
1、首先我们都是通过电脑的串口(232电平)通过232芯片转换为TTL后再给单片机,实现下载功能。
2、第1步用到stc的串口软件,这个软件下载时要和单片机进行握手,STC内部协议。
3、你的单片机开发板没有这个握手,怎么能下载程序呢?
如果想试一试,可以这么干:
1、把stc的握手码,及过程码(如何将hex文件烧进去的)截出来。
2、通过单片机程序把这个握手码及过程码发给另一个单片机。
3、如何将hex文件传给另一块单片机呢,可以把hex文件放到sd卡里。开发板上的单片机不断的读取sd卡的文件传给另一个单片机。
Ⅵ 基于STC51系列单片机的SPWM波形实现,程序如何编写急急急急
/*********************************************************
// 载波比选为N=24,调制比M=Uc/Ur=1,晶振频率12M
// 正弦波频率50Hz
// 高电平的宽度Tpw = Tt/2*(1+Msimwt)
// 低电平的宽度Tpw = Tt/2*(1-Msimwt)
// Tt周期
// T2是产生SPWM波形,并从P1^1输出,用导线连接到P3.4作为测试频率使用。
// T1工作在定时方式1,定时1s
// T0工作在计数方式,对输入的脉冲进行计数,溢出产生中断。
// 16位计数器最大值是65536,1s内可能会产生多次溢出,所以在中断处理程序对中断的次数进行
// 计数。1s到后,将中断的计数器里的计数值取出进行综合处理,处理后的数据送显示。
//信号频率的计算方法:
// T0工作在计数方式,假设1s内溢出C1次,最后未溢出的计数值是C2,则频率公式为:
// F=C1*2^16+C2 = C1*65536+TH0*256+TL0)
//使用12MHz时钟,测量的最大范围是不大于500KHz。
*********************************************************/
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar disp[8]={0,0,0,0,0,0,0,0};
uchar FreStr[]="Friquency is:";
uchar T0count,T1count;
uchar code x[]={66,38,26,89,15,97,7,102,2,103,1,102,2,
97,7,89,15,78,26,66,38,38,66,26,78,15,
89,7,97,2,102,1,103,1,103,2,102,7,97,15,
89,26,78,38,66};
uchar ky,kc,count=255;
sbit L1=P1^1;
void delayms(uchar ms)
{
uchar i ;
while(ms--)
{
for(i = 0 ; i < 120 ; i++) ;
}
}
//LCD定义开始
//以下三个是定义LCD的引脚
sbit lcden=P0^5;
sbit lcdwrite=P0^6;
sbit lcdrs=P0^7;
//延时程序
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//lcd的写指令
void write_com(uchar com)
{
lcdrs=0;
lcden=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//lcd的写数据
void write_data(uchar da)
{
lcdrs=1;
lcden=0;
P2=da;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//初始化
void Lcd_init()
{
lcdwrite=0;
lcden=0;
write_com(0x38); //16*2显示,5*7点阵,8位数据
write_com(0x0c);//显示开,关光标
write_com(0x06); //移动光标
write_com(0x01);//清除LCD的显示内容
}
//LCD定义结束
//计算频率值
void calc()
{
uchar i;
long frequency;
frequency=(T0count*256+TH0)*256+TL0;
for(i=7;i>0;i--)
{
disp[i]=frequency%10;
frequency=frequency/10;
}
disp[0]=frequency;
}
void init()
{
T0count=0;
T1count=0;
TH0=0;
TL0=0;
}
void main()
{
uchar dis;
init();
Lcd_init();
TMOD=0x15;
TH1=(65536-5*110592/12)/256;
TL1=(65536-5*110592/12)/256%10;
ET1=1;
ET0=1;
EA=1;
TR1=1;
TR0=1;
//以下四句的作用是在P1.1引脚上形成1000Hz的脉冲,用导线连接到P3.4作为测试用。将其中
//高8位和低8位的初始值更改后可输出不同频率的脉冲。
T2MOD = 0x02;
TH2=255-x[ky];
TL2=255-x[ky];
ET2=1;
EX0=1;
TR2=1;
L1=1;
write_com(0x80);
for(dis=0;dis<12;dis++)
write_data(FreStr[dis]);
while(1)
{
write_com(0xC0);
for(dis=0;dis<8;dis++)
write_data(disp[dis]+0x30); //显示频率
}
}
//计算输入脉冲的次数
void time0() interrupt 1
{
T0count++;
}
//计算1s时间
void time1() interrupt 3
{
TH1=(65536-5*110592/12)/256;
TL1=(65536-5*110592/12)/256%10;
if(T1count==20)
{
calc();
init();
}
else T1count++;
}
//这是产生SPWM波形、
void M() interrupt 5
{
TH2=255-x[ky];
TL2=255-x[ky];
kc++;
if(kc==count)
{
kc=0;
L1=~L1;
ky++;
if(ky==49) ky=0;
}
}
//这是使用外部中断0可以调整输出波形的频率
void MM() interrupt 0
{
delayms(300);
if(INT0==0)
{
count=count-5;
if(count==0) count=255;
}
}