用stc12c5a60s2.h做的数字电压表与用其他单片机相比,有什么优点

如何使用STCS2进行多路电压采样?【单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:149,235贴子:
如何使用STCS2进行多路电压采样?收藏
下面是P1.0口的电压采样程序,已测可用void caiyangP10()
//测输入电压{P1M0|=0x01;
//设P1_0为开漏模式 如: P1_0= #BP1M1|=0x01;
ADC_CONTR=0xe0;
//设置P1.0为输入AD转换口delay(2);
get_ad_result();
//取转换数据;
Vin=ad_average_
R=V}然后我想再多一路的采样,程序如下,然后12864显示只能显示一路电压值,显示的两个电压值是一样的void caiyangP12()
//输出电压{P1M0|=0x00;
//设P1_2为开漏模式 如: P1_2= #BP1M1|=0x01;
ADC_CONTR=0xe0;
//设置P1.1为输入AD转换口delay(2);
get_ad_result();
//取转换数据;
Vout=ad_average_
K=V}主程序如下,能输出两路电压值,但是是相同的void main(){
EA=1;AD_initiate();
//初始化 ADC_Power_On();
//开AD电源//init();lcd_init();delay(10);while(1){
for(i=2;i&0;i--)
caiyangP10();
send_ad_result();
displayP10();
delay(10);
}for(i=2;i&0;i--)
caiyangP12();
send_ad_result();
displayP12();
delay(10);
}}}求助,如何进行两路电压采样?我这个程序可以改吗?
这是全部的程序/***************************************************************************** 文件名:AD_CAIYANG.C* 功能:使用AD采集电压显示在LCD* 说明:转自网络,本人验证通过****************************************************************************/#include&STC12C5A60S2.H&#define uint
unsigned int#define uchar unsigned charsbit CS=P2^0;
//LCD12864串行通信片选sbit SID=P2^1;
//LCD12864串行通信数据口sbit SCLK=P2^2;
//LCD12864串行通信同步时钟信号sbit PSB=P2^5;
//LCD12864并/串选择:H并行 L串行 unsigned int temp1,shi1,ge1,n1,m1,temp2,shi2,ge2,n2,m2;unsigned char ad_result_data[10];
//AD转换高八位unsigned char ad_result_low2[10];
//AD转换低八位unsigned char ad_result_total[10];
//AD转换总十位unsigned char ad_average_
//AD转换十次的平均值unsigned char Ain,Vin,Vunsigned char b,t,R,K;char tp=0;unsigned char code ma1[6]={0xb5,0xe7,0xd1,0xb9,0xa1,0xc3}; //电压:unsigned char code ma2[]={&.&};uchar code disp1[]={&提示: 按1 键进入&};uchar code disp2[]={&功能选择界面. &};uchar code disp3[]={&U:&};unsigned char code num0[]={0xa3,0xb0};unsigned char code num1[]={0xa3,0xb1};unsigned char code num2[]={0xa3,0xb2};unsigned char code num3[]={0xa3,0xb3};unsigned char code num4[]={0xa3,0xb4};unsigned char code num5[]={0xa3,0xb5};unsigned char code num6[]={0xa3,0xb6};unsigned char code num7[]={0xa3,0xb7};unsigned char code num8[]={0xa3,0xb8};unsigned char code num9[]={0xa3,0xb9};//-------模块延时程序---------------------------- 1msvoid delay1ms(uint delay1ms) //STC11F60XE,22.1184M,延时1ms{uint i,j; for(;delay1ms&0;delay1ms--)
for(i=0;i&7;i++)
for(j=0;j&210;j++);}void delay(uint delay) //STC11F60XE,22.1184M,延时170us{uint i,j;for(;delay&0;delay--)
for(i=0;i&124;i++);
for(j=0;j&124;j++);}/*******************************************************
AD转换程序*******************************************************/void AD_initiate() //初始化函数{ ES=0;TMOD=0x21; //定时计数器方式控制寄存器,&自动重装,16位计数器&.SCON=0x50; //串行控制寄存器,方便在串口助手那观察TH1=0TL1=0TR1=1;}void ADC_Power_On()
//AD转换电{ADC_CONTR|=0x80;delay(5);
//必要的延时}void get_ad_result() //取AD结果函数,它是十位AD转换,每十次平均,最后取低八位作为AD采样数据{ uint i,q=0;for(i=0;i&10;i++)
ADC_RES=0;
//高八位数据清零,STC12C5A60S2 AD数据寄存名与STC12C54××系列不同
ADC_RESL=0;
//低两位清零
ADC_CONTR|=0x08; //启动AD转换
while(!tp)
//判断AD转换是否完成
tp&=ADC_CONTR;
ADC_CONTR&=0xe7;
ad_average_result=ADC_RES;
q=q+ad_average_
ad_average_result=q/10;
//ad_average_result=ad_average_result*4*;}/************************AD转换结束***********************/void send_ad_result() //取AD结果函数发送到串口,方便调试{
while(TI==0) ;
delay1ms(100);
//SBUF=R&&4;}//---------------------电压采样程序-------------------------void caiyangP10()
//测输入电压{P1M0|=0x01;
//设P1_0为开漏模式 如: P1_0= #BP1M1|=0x01;ADC_CONTR=0xe0;
//设置P1.0为输入AD转换口delay(2);get_ad_result();
//取转换数据Vin=ad_average_R=V}void caiyangP12()
//输出电压{P1M0|=0x04;
//设P1_2为开漏模式 如: P1_2= #BP1M1|=0x01;ADC_CONTR=0xe0;
//设置P1.1为输入AD转换口delay(2);get_ad_result();
//取转换数据Vout=ad_average_K=V}/*-----------写控制字到LCD12864------------*/void write_cmd(uchar cmd){uchar i_i_data=0xf8;
//命令控制字:写指令 写数据 读状态 读数据CS=1;
//片选置高,才能进行读写操作SCLK=0;/*----------写命令控制字-----------------*/for(i=0;i&8;i++)
//循环八次,每次读取一位数据{
SID=(bit)(i_data&0x80);
//bit表示取其最高位
//正跳变写入指令
i_data=i_data&&1;
//左移一位}
/*---------------------------------------*//*----------写指令高四位-----------------*/i_data=i_data=i_data&0xf0;
//把低四位置0for(i=0;i&8;i++)
//循环八次,每次读取一位数据{
SID=(bit)(i_data&0x80);
//bit表示取其最高位
//正跳变写入指令
i_data=i_data&&1;
//左移一位}
/*---------------------------------------*//*----------写指令低四位-----------------*/i_data=i_data=i_data&&4;
//左移四位,把低四位的数据移到高四位,再把低四位置0for(i=0;i&8;i++)
//循环八次,每次读取一位数据{
SID=(bit)(i_data&0x80);
//bit表示取其最高位
//正跳变写入指令
i_data=i_data&&1;
//左移一位} /*-----------------------------------------*/
//把片选置低delay1ms(5);
//延时是因为没有进行忙检测,适当的延时可以不进行忙检测}/*-----------------------------------------*//*------------写数据到LCD12864-------------*/void write_dat(uchar dat){uchar i_i_data=0CS=1;for(i=0;i&8;i++){
SID=(bit)(i_data&0x80);
i_data=i_data&&1;}i_data=i_data=i_data&0xf0;for(i=0;i&8;i++){
SID=(bit)(i_data&0x80);
i_data=i_data&&1;}i_data=i_data=i_data&&4;for(i=0;i&8;i++){
SID=(bit)(i_data&0x80);
i_data=i_data&&1;}CS=0;delay1ms(5);}/*-----------------------------------------*/
/*--------------显示坐标-------------------*/void lcd_pos(uchar x,uchar y)
//汉字显示坐标,x为哪一行,y为哪一列{if(x==0)
//第一行else if(x==1)
//第二行else if(x==2)
//第三行else if(x==3)
//第四行pos=x+y;
//显示哪一行(总共有4行)哪一竖(总共有8竖,每16列为1竖)write_cmd(pos);}/*-----------------------------------------*//*--------------显示8个汉字-------------------*/void disp_hanzi(uchar code *chn){
write_cmd(0x30);
//基本指令操作方式
for(i=0;i&16;i++)
//16列*8个汉字=128(刚好)
write_dat(chn[i]);}/*-----------------------------------------*//*--------------显示数字-------------------*/void disp_num(uchar code *chn){
write_cmd(0x30);
//基本指令操作方式
for(i=0;i&2;i++)
write_dat(chn[i]);}void disp_number(uchar num){
switch(num)
{case 0: disp_num(num0);case 1: disp_num(num1);case 2: disp_num(num2);case 3: disp_num(num3);case 4: disp_num(num4);case 5: disp_num(num5);case 6: disp_num(num6);case 7: disp_num(num7);case 8: disp_num(num8);case 9: disp_num(num9);default:
}}/*----------- --LCD初始化------------------*/void lcd_init(){PSB=0;write_cmd(0x30);
//基本指令write_cmd(0x02);
//地址归位write_cmd(0x06);
//游标右移write_cmd(0x0c);
//整体显示write_cmd(0x01);
//清屏}/*-----------------------------------------*/void displayP10(){float ad1;//ad1=x*7.8125;
//电压修正ad1=Vin/2*3.9608;
//具体线性参数由输入电压值调整,该值的测量范围为0-10.00V,5V左右的测量比较准确,
//两端的最大误差为70mv,其他一般在40mv以内temp1=(int)ad1;shi1=temp1/1000;
//十位ge1=(temp1%;
//个位n1=((temp1%)/10; //小数点后一位m1=((temp1%)%10; //小数点后二位//write_cmd(0x01);write_cmd(0x30);
//基本指令操作方式lcd_pos(0,0);i=0;while(disp3[i]!=*\0*){ write_dat(disp3[i]); i++;}lcd_pos(0,1);disp_number(shi1);lcd_pos(0,2);disp_number(ge1);lcd_pos(0,3);for(i=0;i&2;i++)
write_dat(ma2[i]);lcd_pos(0,4);disp_number(n1);lcd_pos(0,5);disp_number(m1);/*lcd_pos(2,0);disp_hanzi(disp1);lcd_pos(3,0);disp_hanzi(disp2);*/}void displayP12(){float ad2;//ad1=x*7.8125;
//电压修正ad2=Vout/2*3.9608;
//具体线性参数由输入电压值调整,该值的测量范围为0-10.00V,5V左右的测量比较准确,
//两端的最大误差为70mv,其他一般在40mv以内temp2=(int)ad2;shi2=temp2/1000;
//十位ge2=(temp2%;
//个位n2=((temp2%)/10; //小数点后一位m2=((temp2%)%10; //小数点后二位write_cmd(0x30);
//基本指令操作方式lcd_pos(1,0);i=0;while(disp3[i]!=*\0*){ write_dat(disp3[i]); i++;}
lcd_pos(1,1);disp_number(shi2);lcd_pos(1,2);disp_number(ge2);lcd_pos(1,3);for(i=0;i&2;i++)
write_dat(ma2[i]);lcd_pos(1,4);disp_number(n2);lcd_pos(1,5);disp_number(m2);/*lcd_pos(2,0);disp_hanzi(disp1);lcd_pos(3,0);disp_hanzi(disp2);*/}void main(){
EA=1;AD_initiate();
//初始化 ADC_Power_On();
//开AD电源//init();lcd_init();delay(10); while(1){
caiyangP10();
send_ad_result();
displayP10();
delay(10);
caiyangP12();
send_ad_result();
displayP12();
delay(10);}}
帮谷歌顶起✎﹏﹏₯㎕﹍﹍   透支了眼泪,我们便会没心没肺的笑   ----来自助手版贴吧客户端
我也想知道
谢谢各位了
楼主,我也需要这个程序。能发一分给我吗。大神,求救了
楼主,刚好也遇到了这个问题。。。。能说一下怎么做的吗?谢谢楼主了
12864数据口连单片机的p1口吗?显示不出来
超低功耗,256KB-512KB闪存,可扩展存储器,备有开发板
楼主求助啊,编程白菜妹子一枚,请问楼主如编写STC12C5A60S2单片机程序从P1.0口采集信号后进行AD转换然后与一个无线模块在P3.0,P3.1口进行通信??楼主求有帮忙啊,求楼主留下qq帮忙有感谢
楼主 还在吗 程序怎么解决的 我看你又设置p1.2 又设置p1.1的有点混乱啊
登录百度帐号基于STC12C5A60S2单片机数字电压表的设计-博泰典藏网
典藏文档 篇篇精品
基于STC12C5A60S2单片机数字电压表的设计
导读:数字电压表的设计,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器,数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表,由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用,传统的指针式刻度电压表功能单一,因而不能满足数字化时代的
数字电压表的设计
在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用。
传统的指针式刻度电压表功能单一,精度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC实时通信。数字电压表是诸多数字化仪表的核心与基础。以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。目前,由各种单片机和A/D转换器构成的数字电压表作全面深入的了解是很有必要的。 目前,数字电压表的内部核心部件是A/D转换器,转换的精度很大程度上影响着数字电压表的准确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面。 本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:转换模块、数据处理模块及显示模块。
第2章 系统总体方案设计选择与说明
1、增强型MCS-51系列单片机STC12C5A60S2为核心器件,组成一个简单的直流数字电压表。 2、采用1路模拟量输入,能够测量0-10V之间的直流电压值。 3、电压显示采用LCD1602显示。
4、尽量使用较少的元器件。
2.2 设计思路 1、根据设计要求,选择STC12C5A60S2单片机为核心控制器件。 2、A/D转换采用STC12C5A60S2内部自带A/D实现。 3、电压显示采用LCD1602显示。
2.3 设计方案 硬件电路设计由7个部分组成:STC12C5A60S2单片机系统,数码管显示系统、时钟电路、复位电路档位调节电路以及测量电压输入电路。硬件电路设计框图如图1所示。
STC12C5A60S2
测量电压输入 入 LCD1602显示
图2.1 数字电压表系统硬件设计框图
第3章 硬件电路设计
3.1 STC12C5A60S2单片机
图3.1 STC12C5A60S2单片机引脚图及实物图
3.2 STC12C5A60S2系列单片机主要性能 1)高速:1个时钟/机器周期,增强型8051内核,速度比普通倍。 2)宽电压:5.5~3.3V,2.2~3.6V(STC12LE5A60S2系列)。 3)增加第二复位功能脚/P4.6(高可靠复位,可调整复位门槛电压,频率<12MHz时,无需此功能)。 4)增加外部掉电检测电路/P4.6,可在掉电时,及时将数据保存进EEPROM,正常工作时无需操作EEPROM。 5)低功耗设计:空闲模式(可由任意一个中断唤醒)。 6)低功耗设计:掉电模式(可由外部中断唤醒),可支持下降沿/上升沿和远程唤醒。 7)支持掉电唤醒的管脚: INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0, CCP0/P1.3(或P4.2),CCP1/P1.4(或P4.3),EX_LVD/P4.6。 8) 工作频率:0~35MHz,相当于普通MHz。 9) 时钟:外部晶体或内部RC振荡器可选,在ISP下载编程用户程序时设置。 10) 8/16/20/32/40/48/52/56/60/62K字节片内Flash程序存储器,擦写次数10万次以上。 11) 1280字节片内RAM数据存储器。 12) 芯片内EEPROM功能,擦写次数10万次以上。 13) ISP / IAP,在系统可编程/在应用可编程,无需编程器/仿真器。 14) 8通道,10位高速ADC,速度可达25万次/秒,2路PWM还可当2路D/A使用。 15) 2通道捕获/比较单元(PWM/PCA/CCP),也可用来再实现2个定时器或2个外部中断(支持上升沿/下降沿中断)。 16) 4个16位定时器,兼容普通8051的定时器T0/T1,2路PCA实现2个定时器。 17) 可编程时钟输出功能,T0在P3.4输出时钟,T1在P3.5输出时钟,BRT在P1.0输出时钟。 18) 硬件看门狗(WDT)。 19) 高速SPI串行通信端口。 20) 全双工异步串行口(UART),兼容普通8051的串口。 21) 通用I/O口(36/40/44个),复位后为: 准双向口/弱上拉(普通8051传统I/O口)。可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏。每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过120mA。
3.3 STC12C5A60S2系列单片机的A/D转换器的结构 STC12C5A60S2系列单片机的A/D转换口在P1口(P1.7-P1.0),有8路10位高速A/D转换器,速度可达到250KHz(25万次/秒)。8路电压输入型A/D,可做温度检测、电源电压检测、按键扫描、频谱检测等。上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D使用的I/O口可以继续作为I/O口使用。 STC12C5A60S2系列单片机ADC的结构如下图所示 包含总结汇报、外语学习、农林牧渔、高中教育、教学研究、经管营销、自然科学、出国留学、高等教育、表格模板以及基于STC12C5A60S2单片机数字电压表的设计等内容。本文共4页
相关内容搜索《好看》依托百度技术,精准推荐优质短视频内容,懂你所好,量身打造最适合你的短视频客户端!stc12c5a60s2的单片机与at89c51单片机有什么区别论文上面要用_百度知道
stc12c5a60s2的单片机与at89c51单片机有什么区别论文上面要用
我有更好的答案
在众多的51系列单片机中,要算国内STC 公司的1T增强系列更具有竞争力,因他不但和8051指令、管脚完全兼容,而且其片内的具有大容量程序存储器且是FLASH工艺的,如STC12C5A60S2单片机内部就自带高达60K FLASH ROM,这种工艺的存储器用户可以用电的方式瞬间擦除、改写。而且STC系列单片机支持串口程序烧写。显而易见,这种单片机对开发设备的要求很低,开发时间也大大缩短。写入单片机内的程序还可以进行加密,这又很好地保护了你的劳动成果。重要的一点STC12C5A60S2目前的售价与传统51差不多,市场供应也很充足。是一款高性价比的单片机STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。1.增强型8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;2.工作电压:STC12C5A60S2系列工作电压:5.5V-3.3V(5V单片机)STC12LE5A60S2系列工作电压:3.6V-2.2V(3V单片机);3.工作频率范围:0 - 35MHz,相当于普通8051的 0~420MHz;4.用户应用程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K字节;5.片上集成1280字节RAM;6.通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口),可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55Ma;7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器 可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片;8.有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM);9. 看门狗;10.内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地);11.外部掉电检测电路:在P4.6口有一个低压门槛比较器,5V单片机为1.32V,误差为+/-5%,3.3V单片机为1.30V,误差为+/-3%;12.时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为+/-5%到+/-10%以内) 1用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟,常温下内部R/C振荡器频率为:5.0V单片机为:11MHz~15.5MHz,3.3V单片机为:8MHz~12MHz,精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准;13.共4个16位定时器 两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器 做串行通讯的波特率发生器 再加上2路PCA模块可再实现2个16位定时器;14. 2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟;15.外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块, Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4, T1/P3.5, RxD/P3.0,CCP0/P1.3(也可通过寄存器设置到P4.2 ), CCP1/P1.4 (也可通过寄存器设置到P4.3);16. PWM(2路)/PCA(可编程计数器阵列,2路):——也可用来当2路D/A使用——也可用来再实现2个定时器——也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持);17.A/D转换, 10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口;19. STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3);20.工作温度范围:-40 - +85℃(工业级) / 0 - 75℃(商业级)21.封装:PDIP-40,LQFP-44,LQFP-48 I/O口不够时,可用2到3根普通I/O口线外接 74HC164/165/595(均可级联)来扩展I/O口, 还可用A/D做按键扫描来节省I/O口,或用双CPU,三线通信,还多了串口。图3-1 STC12C5A60S2管脚图各引脚功能简单介绍如下:VCC:供电电压;GND:接地;P0口:P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。当P1口的管脚写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高;P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入“1”后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收;P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚电位被内部上拉电阻拉高,且作为输入。作为输入时,P2口的管脚电位被外部拉低,将输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号;P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INT0(外部中断0)P3.3 INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 WR (外部数据存储器写选通)P3.7 RD (外部数据存储器读选通)同时P3口同时为闪烁编程和编程校验接收一些控制信号;RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高平时间;ALE / PROG :当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效;PSEN:外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器周期PSEN两次有效。但在访问内部部数据存储器时,这两次有效的PSEN信号将不出现;EA/VPP:当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,访问内部ROM。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP);XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入;XTAL2:来自反向振荡器的输出;好好对比一下就能发现,stc12c5a60s2的功能更多,速度更快,存储容量更大。
采纳率:64%
为您推荐:
其他类似问题
stc12c5a60s2的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。STC12C5A60S2单片机在光立方体的运用-电子发烧友网触屏版
  8*8*8光立方体是利用二极管焊接成八行八列的八个工作面而构成的一个立方体,利用单片机、行列控制芯片构成相关硬件,利用软件C语言编程,点阵显示原理显示出各种立体的不同形状和字体,从而给人以视觉上的冲击,美的效果。该立方体可以运用到很多场合,作为装饰作品出现在人们眼前。
  STC12C5A60S2
  目前学生运用最多的单片机是89C51\52、STC90系列、利用这些芯片可以构成最小系统,做成学习开发板供学生使用也是一种学习途径。学生可以通过焊接调试、编译程序实现功能,让学生在学中做、做中学、从而提高学生动手能力和创新思维以及研发能力,只一综合性的实训科目
  STC12C5A60S2单片机是单时钟机器周期(1T),是具有高速、低功耗、超强抗干扰的新一代增强型8051单片机,指令代码完全兼容传统8051,但速度却快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换250K S),针对电机控制,强干扰场合。
  传统的龙片只会识别和处理数字信号,而在实验中、实际运用中却常有模拟量的信息,因此该芯片自带A D转换器,增强了该芯片处理信息的能力。该芯片的A/D转换功能是具有10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)
  74HC573
  该芯片是八进制三态非反转D型锁存器,共20个引脚,其中OE引脚为三态输出使能输入,低电平有效,DO到D7为数据输入,Q0到Q7为E态锁存数据输出,LE为锁存使能输入,如果是多片连用,可以作为片选信号使用端,高电平有效。
  ULN2803
  ULN2803是一块高电压、大电流的八达林顿晶体管,且是低逻辑电平数字电路,即电路为反相输出型,输入低电平电压,输出端才有低电平输出信号。
  该芯片共有18个引脚。9脚接地,10脚接电源,芯片第1引脚至8引脚为信号输入,11至18为信号输出。
  ULN2803的驱动负载电流为500mA,驱动电压.50V。
   硬件电路设计与工作原理
  电路原理图
  该电路图主要由单片机、74HC573、ULN2803三种芯片构成,利用Protel软件以及时标网络符号绘制该原理图。下图显示了部分原理图,其中PI、P9分别代表了二极管行、列端口。
  工作原理介绍
  该立方体的制作采用STC12C5A60S2单片机,8*8*8 立方体,有8个8*8 二极管工作面,因此采用8块74HC573 (在原理图中分别用U2-U9表示) 作为二极管面的选择。在电路图中用P1-P8显示接[ 1的连接。每块74HC573芯片11引脚作为二极管的八个工作面的片选信号,信号输入端D1-D8连接单片机的P1口,01-08信号输出端连接已片选二极管工作面的行的选择,也即八行二极管的阳极。由于每个工作面采用共阴连接,UL.N2803芯片只需采用一块,引脚B1-B8接到单片机P1口,信号输出端C1-C8连接八面二极管工作面的阴极。具体硬件连接图如下所示
  软件设计
  利用Keil软件通过C语言编程实现功能,还可以利用按键开关扩展功能,使之为音乐频谱
  通过学生亲自设计画图、焊接与调试、编译程序实现功能,学生的理论知识和实践技能会大幅提高,增强了他们的自信心、同时也提高了他们实际动手能力。
  基于STC12C5A60S2单片机的光立方设计
  本次作品是要做出由512个LED灯组成的8*8*8正方体的LED光立方。通过烧入已经编写好的程序来控制LED灯的亮灭,以此显示我们想要的图案。主要也是为了把在学校学到的理论知识运用起来,为了增加眼球,有多重的显示方式:动静态结合。这次光立方的设计用的不是传统的74HC154芯片而是stc12c5a60s2芯片,因为它有一个最小的单片机系统,也具有使系统的强大功能和驱动效果,再者,从静态到动态,从2D到3D的转变,更具震撼力。本次作品主要有512个发光二级管组成,在制作过程中锻炼自己的焊接能力。采用商家做好的PCB板。使设计的线路更加明显。
  所需工具与材料:
  光立方印制电路板
  3mm蓝色长脚雾面LED灯
  圆孔插座
  180欧姆1/4w电阻
  贴片74HC573
  贴片ULN2803
  stc12c5a60s2单片机用的插排
  微动开关
  自锁开关
  音频输入口
  5mm蓝色雾状LED
  电烙铁、松香、镊子、尖嘴钳、吸管、焊锡等。
  方法与步骤:
  1、首先要把光立方的正文体的架构焊接好。
  2、把元件和电路板通过导线接在一起。
  3、焊接好的基础上测试一下,保证每一个LED灯都能亮。
  4、把接好的电路图与LED正方体进行焊接测试亮不亮。
  5、把想要LED表现效果分别通过烧写做好的程序给烧写进去。
  6、把之前调试好了的程序组合在一起,再进行调试。
  焊灯是个大工程,8*8*8的正文体要焊好久呢,首先我们要把灯准备好。一共需要512个发光二级管,为了减少麻烦,准备了550个发光二级管。
  光立方的这些材料都是在淘宝上买的,因为为了以防万一,他们总是喜欢把LED灯多给一些给买家,所以在焊接前一定要测试一下LED灯。如果坏掉的,就把它和好的分开放,以免焊接的时候接错了(焊接到不亮的灯会很麻烦),测试时用电池简单测一下就可以分辨好坏了,然后再进行下一步的焊接。焊接的时候要注意是否虚焊。
  下一步就是把测试好的灯的触角折成如图所示的样子
  当然触角也不是随便就可以折的,我所采用的方法是&层共阴,束共阳&,是要把LED灯的负极(短的一角)朝一个方向弯曲,弯曲是注意与正极垂直才可,不然容易造成短路。
  然后找来一块木板,打好64个洞,测好距离将灯放在上面进行焊接,一次爆8个灯(为一排),这样来回焊48排,最后进行整体焊接成正文体。
  面是LED灯的制作下面我们来说说PC板板部分。PC板上有核心的主控电路、驱动电路和部分的显示电路,分布比较复杂。在焊接的时候要事先在PC板上把各个部分电路的原件放在上面,并做出标明,合理布局。核心部分要与驱动部分有点距离,方便导线的焊接,不能距离太近,要不然会没有焊接的空间。
  下面是完成全部焊接任务的成品图
  方法2:
  通过硬件测试和软件测试,先来看看硬件测试:实现所用到的工具有万用表、稳压电源、示波器、逻辑分析仪等。
  在检测光立方时记得接通电源,有用万能表检测一下外部电路,看看有没有漏电短路的地方,然后再开始测试。
  静态检测与测试:断开输入信号,把电源接入电路上,再用万用表的电压档监测看是否有异常。
  动态检测与测试:前面有讲到静态检测,只有静态检测通过了才可以进行这一步的动态检测,而它的测试方法和静态检测的方法是相反的,静态是断开信号源,动态是接入信号源的,通过查看波形、参数和稳定性能否满足制作者的需求的。
  光立方如何显示都是通过主程序的,而主程序又得通过按键的操作来运行的。前面也说过主程序,所以现在讲讲显示是怎么执行的,这里的光立方是8*8*8的所以每一次的动态动画或是静态效果都是要一层一层的显示的,直到所有层都显示完了,这才是一幅完整的画面。
  最后附上效果图
文章来源栏目
加载更多评论
后参与评论}

我要回帖

更多关于 stc12c5a60s2中文资料 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信