51单片机intrinsic.h怎么用

网上有关“51单片机intrinsic.h怎么用”话题很是火热,小编也是针对51单片机intrinsic.h怎么用寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临...

网上有关“51单片机intrinsic.h怎么用”话题很是火热,小编也是针对51单片机intrinsic.h怎么用寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

头文件就相当于一组自定义函数或者一些声明。其实没什么使用方法。你在使用include<aaa.h>时,就如同你把aaa.h中的内容全部复制到添加路径include<aaa.h>的地方。

具体我们看下面:

/*--------------------------------------------------------------------------

INTRINS.H

Intrinsic?functions?for?C51.

--------------------------------------------------------------------------*/

#ifndef?__INTRINS_H__

#define?__INTRINS_H__

#pragma?SAVE

#if?defined?(__CX2__)

#pragma?FUNCTIONS(STATIC)

/*?intrinsic?functions?are?reentrant,?butneed?static?attribute?*/

#endif

extern?void_nop_?(void);

extern?bit?_testbit_?(bit);

extern?unsigned?char?_cror_(unsigned?char,?unsigned?char);

extern?unsigned?int_iror_?(unsigned?int,unsigned?char);

extern?unsigned?long?_lror_(unsigned?long,?unsigned?char);

extern?unsigned?char?_crol_(unsigned?char,?unsigned?char);

extern?unsigned?int_irol_?(unsigned?int,unsigned?char);

extern?unsigned?long?_lrol_(unsigned?long,?unsigned?char);

extern?unsigned?char?_chkfloat_(float);

#if?defined?(__CX2__)

extern?int?abs?(int);

extern?void_illop_?(void);

#endif

#if?!defined?(__CX2__)

extern?void_push_(unsigned?char?_sfr);

extern?void_pop_?(unsigned?char?_sfr);

#endif

#pragma?RESTORE

#endif

以上是intrins.h的具体内容。

逐一分析。

1.#ifndef,#define,#endif

#ifndef __INTRINS_H__

#define __INTRINS_H__

#define qwerty

...

#define tyuio

#endif

这是一组。功能是条件编译。ifndef是if not defined,如果没有定义__INTRINS_H__,那咱们就定义吧,下一条就是#define __INTRINS_H__。一直到最后终止endif。

使用目的:如果编译时,系统已有intrins.h的定义,则不编译以下内容,若系统没有定义标识则编译内容。

例如,我们有一个数据类型,在Windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这样往往需要对源程序作必要的修改,这就降低了程序的通用性。可以用以下的条件编译:

#ifdef?WINDOWS?

#define?MYTYPE?long?

#else?

#define?MYTYPE?float?

#endif

如果在Windows上编译程序,则可以在程序的开始加上?#define WINDOWS

这样则编译命令行:?#define MYTYPE long。

如果在这组条件编译命令之前曾出现以下命令行:?#define WINDOWS 0?

则预编译后程序中的MYTYPE都用float代替。这样,源程序可以不必作任何修改就可以用于不同类型的计算机系统。

(#pragma先略过)

2.extern

Extern用在变量/函数声明前,表明该变量/函数是在别处定义的。Extern void nop (void)表示其他地方有定义过函数nop(void),此处引用。

首先强调一点。头文件中的定义都不是全局变量,但是因为一直写在开头所以总是被最先编译。如果在xxx.h中定义int key,想在多个文件中使用A.c,B.h,…,编译不会通过。因为头文件中的内容如同照抄在include<xxx.h>处。即:在A和B中都定义了一次这个全局变量key(重复定义)。正确做法是在A.c中定义,在B.h中用extern+A.c中的定义,相反也行。

extern unsigned char _cror_? (unsigned char, unsigned char);表示声明一个叫_cror_ 的函数,两个参变量,返回unsigned char型的函数。等等。

_crol_?字符循环左移

_cror_?字符循环右移

_irol_?整数循环左移

_iror_?整数循环右移

_lrol_?长整数循环左移

_lror_?长整数循环右移

_nop_?空操作8051?NOP?指令

说明一下,上面的这些函数虽然是外部定义的。但是很难找到定义的地点。可能在某个系统的dll文件中。使用时不必拘泥过多,直接使用就行。具体函数干些什么你也可以自己百度。这里不展开了。

3.#pragma

这是预编译指令,也可以叫编译器指令。初学者不必深究。换句话说,即使完全不理解也不影响你单片机的学习。

#pragma SAVE表示把当前设定放入保存堆栈。

#pragma RESTORE一直和SAVE组合使用,吧保存堆栈中的内容存储起来。他们是一组,一般共同使用。

还有剩余的一些其实就和上面讲的是一个类型。无非就是条件编译和预编译指令,和你关系不大这里就不展开了。

综合一下。看一个例子:

void?hahaha(int?a,?char?b);//实际上你打开一个单片机的project,里面有reg51.h和intrins.h。这句话就如同intrins.h的功能,仅仅是声明。

main()

{

hahaha(qwe,rty);

}

void?hahaha(int?a,?char?b);//这句话就如同reg51.h的功能,定义了一些函数。

{

a=a++;

b=b--;

}

当你include<reg51.h>include<intrins.h>后,就如同头文件的内容全部抄到你自己写的函数的最上面。

写出一个你感兴趣的电路:1,写出电路的用途2,画出电路图或原理方框图3,简述电路的基本工作原理或调试方

#include <reg51.h>

#include <intrins.h> //Keil library (is used for _nop()_ operation)

#include <math.h> //Keil library

#include <stdio.h> //Keil library

unsigned char Tem,Hum;

unsigned char Set_Tem,Set_Hum;

sbit SS = P1^0; //片选

sbit SCLK = P1^1; //ISD4003 时钟

sbit MOSI = P1^2; //数据输入

sbit MISO = P1^3; //数据输出

sbit LED = P1^7; //指示灯

sbit ISD_INT = P3^2; //中断

sbit AN = P1^6; //执行

sbit STOP = P1^5; //复位

sbit PR = P1^4; //PR=1 录音 PR=0 放音

sbit DATA=P2^0;

sbit SCK=P2^1;

sbit SCL=P1^1;

sbit SDA=P1^0;

#define TEMP 0

#define HUMI 1

typedef union

{ unsigned int i;

float f;

} value;

//enum {,EMP,HUMI};

//以上所示为系统的主程序结构,其中子程序可根据系统整个具体的要求进行添加代码,

//刷新LED显示子程序write_led();硬件采用译码器;按键检测子程序check_key();的执行通过读单片机I/O口高低电平识别按键。

//以下所示代码为读温湿度传感器子程序read_ sensor()的程序内容:

/********************************************************************

工程名 SHTxx demo program (V2.1)

文件名: SHTxx_Sample_Code.c

MCU: 80C51 family

编译器: Keil Version 6.14

*******************************************************************/

//-------------------------------------------------------------------

// modul-var

//-------------------------------------------------------------------

void warning(void);

void Delay(unsigned int time);

#define noACK 0

#define ACK 1

unsigned int *p_value;

#define STATUS_REG_W 0x06 //000 0011 0

#define STATUS_REG_R 0x07 //000 0011 1

#define MEASURE_TEMP 0x03 //000 0001 1

#define MEASURE_HUMI 0x05 //000 0010 1

#define RESET 0x1e //000 1111 0

//-------------------------------------------------------------------

char s_write_byte(unsigned char value)

//-------------------------------------------------------------------

// 写一个字节,检查应答信号

{

unsigned char idata i,error=0;

for (i=0x80;i>0;i/=2)

{ if (i & value) DATA=1;

else DATA=0;

SCK=1;

_nop_();_nop_();_nop_(); //时钟脉冲宽度 5 us

SCK=0;

}

DATA=1; //释放DATA

SCK=1; //9个CLK后应答

error=DATA; //检查应答信号 (DATA 被拉低)

SCK=0;

return error; // 如果没有应答则error=1

}//

//-------------------------------------------------------------------

char s_read_byte(unsigned char ack)

//-------------------------------------------------------------------

// 读一个字节,检查应答信号

{

unsigned char i,val=0;

DATA=1; //释放DATA信号

for (i=0x80;i>0;i/=2)

{ SCK=1;

if (DATA) val=(val | i);

SCK=0;

}

DATA=!ack; //如果 "ack==1" ,拉低DATA

SCK=1; //clk #9 for ack

_nop_();_nop_();_nop_(); //延时5微秒

SCK=0;

DATA=1; //释放DATA

return val;

}

//-------------------------------------------------------------------

void s_transstart(void)

//-------------------------------------------------------------------

// generates a transmission start

// _____ ________

// DATA: |_______|

// ___ ___

// SCK : ___| |___| |______

{

DATA=1; SCK=0; //初始状态

_nop_();

SCK=1;

_nop_();

DATA=0;

_nop_();

SCK=0;

_nop_();_nop_();_nop_();

SCK=1;

_nop_();

DATA=1;

_nop_();

SCK=0;

}

//-------------------------------------------------------------------

void s_connectionreset(void)

//-------------------------------------------------------------------

//通讯复位: 至少在9 SCK 周期后,DATA=1 传输开始

// _____________________________________________________

// DATA: //|_______|

// _ _ _ _ _ _ _ _ _ ___ ___

// SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______| |___|

{

unsigned char i;

DATA=1; SCK=0; //初始状态

for(i=0;i<9;i++) //9 SCK周期

{ SCK=1;

SCK=0;

}

s_transstart(); //通讯开始

}

//-------------------------------------------------------------------

char s_softreset(void)

// resets the sensor by a softreset

{

unsigned char error=0;

s_connectionreset(); //复位通讯

error+=s_write_byte(RESET); //发送复位命令

return error; //如果传感器没有响应则error=1

}

//-------------------------------------------------------------------

char s_read_statusreg(unsigned char *p_value,unsigned *p_checksum)

//-------------------------------------------------------------------

//读效验寄存器状态 (8-bit)

{

unsigned char error=0;

s_transstart(); //通讯开始

error=s_write_byte(STATUS_REG_R); //发送命令

*p_value=s_read_byte(ACK); //读状态寄存器(8-bit)

*p_checksum=s_read_byte(noACK); //读效验和

return error; //如果传感器没有响应则error=1

}

//-------------------------------------------------------------------

char s_write_statusreg(unsigned char *p_value)

//-------------------------------------------------------------------

// writes the status register with checksum (8-bit)

{

unsigned char error=0;

s_transstart(); //通讯开始

error+=s_write_byte(STATUS_REG_W);// 发送命令

error+=s_write_byte(*p_value); //发送状态寄存器的值

return error; //如果传感器没有响应则error=1

}

//-------------------------------------------------------------------

char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)

//-------------------------------------------------------------------

// makes a measurement (humidity/temperature) with checksum

{

unsigned char idata error=0;

unsigned int i;

s_transstart(); //通讯开始

switch(mode)

{ //发送名令

case TEMP : error+=s_write_byte(MEASURE_TEMP); break;

case HUMI : error+=s_write_byte(MEASURE_HUMI); break;

default : break;

}

for (i=0;i<65535;i++) if(DATA==0) break; //等待传感器完成测量

if(DATA) error+=1;

*(p_value) =s_read_byte(ACK); //读取第一个字节

*(p_value+1)=s_read_byte(ACK); //读取第二个字节

*p_checksum =s_read_byte(noACK); //读取效验和

return error;

}

//-------------------------------------------------------------------

//-------------------------------------------------------------------

void calc_sth11(float *p_humidity ,float *p_temperature)

//-------------------------------------------------------------------

// 计算温度和湿度

// input : humi [Ticks] (12 bit)

// temp [Ticks] (14 bit)

// output: humi [%RH]

// temp

{ const float xdata C1=-4.0;

const float xdata C2=+0.0405;

const float xdata C3=-0.0000028;

const float xdata T1=+0.01;

const float xdata T2=+0.00008;

float rh=*p_humidity; //计算湿度值

float t=*p_temperature; // 计算温度值

float rh_lin;

float rh_true;

float t_C;

t_C=t*0.01 - 40;

rh_lin=C3*rh*rh + C2*rh + C1;

rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;

if(rh_true>100)rh_true=100; //如果结果超出了可能的范围就取消

if(rh_true<0.1)rh_true=0.1;

*p_temperature=t_C;

*p_humidity=rh_true;

}

//-------------------------------------------------------------------

float calc_dewpoint(float h,float t)

//-------------------------------------------------------------------

// calculates dew point

// input: humid,ty , temperature

// output: dew point

{ float dew_point,logEx;

logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2);

dew_point = (logEx - 0.66077)*237.3/(0.66077+7.5-logEx);

return dew_point;

}

//-------------------------------------------------------------------

void main_measure()

//-------------------------------------------------------------------

// 使用SHT10功能步骤:

// 1.通讯复位

// 2. 测量温度,湿度

// 3. 计算温度,湿度

// 45. 显示温度,湿度

{ value humi_val,temp_val;

float dew_point,error;

unsigned char checksum;

unsigned int idata i;

s_connectionreset();

while(1)

{ error=0;

error+=s_measure((unsigned char*) &humi_val.i,&checksum,HUMI); //测量湿度

error+=s_measure((unsigned char*) &temp_val.i,&checksum,TEMP); //测量温度

if(error!=0) s_connectionreset();

//如果有错误就复位

else

{ humi_val.f=(float)humi_val.i; //将整数转换成浮点数

temp_val.f=(float)temp_val.i;

calc_sth11(&humi_val.f,&temp_val.f);

//计算温度,湿度

dew_point=calc_dewpoint(humi_val.f,temp_val.f);

//计算dew

//printf("temp:%5.1fC humi:%5.1f%% dew point:%5.1f,\n",temp_v,l.f,humi_v,l.f,dew_point);

}

for (i=0;i<40000;i++);//----------延时0.8s

}

}

//语音功能子程序

//下面代码为语音芯片使用范例,该功能放在主程序中的warning()子程序中执行。

void delay(unsigned int time) //延迟 n 微秒

{

while(time!=0)

{

time-- ;

}

}

void delayms(unsigned int time) //延迟 n 毫秒

{

TMOD=0x01;

for(time;time>0;time--)

{

TH0 = 0xfc;

TL0 = 0x18;

TR0 = 1;

while(TF0!=1)

{;}

TF0=0;

TR0=0;

}

}

//************************************

//ISD4002 spi 串行发送子程序,8 位数据

//************************************

void spi_send(unsigned char isdx)

{

unsigned char idata k;

SS=0;//SS=0; //,s=0,打开 spi 通信端

SCLK=0;

for(k=0;k<8;k++) //先发低位再发高位,依发送。 { i

{

if((isdx&0x01)==1)

MOSI=1;

else

MOSI=0;

isdx=isdx>>1;

SCLK=1;

delay(2);

SCLK=0;

delay(2);

}

}

//*******************************

//发送 stop 指令

//*******************************

void isd_stop(void)

{

delay(10);

spi_send(0x30);

SS=1;

delayms(50);

}

//*******************************

//发送上电指令,并延迟 50ms

//*******************************

void isd_pu(void)

{ delay(10);

SS=0;

spi_send(0x20);

SS=1;

delayms(50);

}

//发送掉电指令,并延迟 50ms

//*******************************

void isd_pd(void)

{

delay(10);

spi_send(0x10);

SS=1;

delayms(50);

}

//*******************************

//发送 play 指令

//*******************************

void isd_play(void)

{

LED=0;

spi_send(0xf0);

SS=1;

}

//*******************************

//发送 rec 指令

//*******************************

void isd_rec(void)

{

LED=0;

spi_send(0xb0);

SS=1;

}

//*******************************

//发送 setplay 指令

//*******************************

void isd_setplay(unsigned char adl,unsigned char adh)

{

spi_send(adl); //发送放音起始地址低位

adh=adh||0xe0;

spi_send(adh); //发送放音起始地址高位

SS=1;

}

//*******************************

//发送 setrec 指令

//*******************************

void isd_setrec(unsigned char adl,unsigned char adh)

{

spi_send(adl); //发送放音起始地址低位

adh=adh||0xa0;

spi_send(adh); //发送放音起始地址高位

SS=1;

}

//************************************

//芯片溢出,LED 闪烁提醒停止录音

//************************************

void isd_overflow(void)

{

while(AN==0)

{

LED=1;

delayms(300);

LED=0;

delayms(300);

}

}

//************************************

//检查芯片是否溢出(读,OVF,并返回 OVF 值)

//************************************

unsigned char chk_isdovf(void)

{

SS=0;

delay(2);

SCLK=0;

delay(2);

SCLK=1;

SCLK=0;

delay(2);

if (MISO==1)

{

SCLK=0;

SS =1; //关闭 spi 通信端

isd_stop(); //发送 stop 指令

return 1; //OVF 为 1,返回 1

}

else

{

SCLK=0;

SS =1; //关闭 spi 通信端

isd_stop(); //发送 stop 指令

return 0; //OVF 为 0,返回 0

}

}

//**********************************************************************

//主程序

//功能:1.录音时,按住 AN 键,LED 点亮开始录音,松开 AN 即可停止录音

// 再次按下 AN 键,LED 点亮开始录第二段音,依次类推,直到芯片溢出。

// 按 stop 键芯片复位

// 2.放音时,按一下 AN 键,即播放一段语音。按 stop 键芯片复位。

//************************************************************************

void voice(void)

{

unsigned char ovflog;

while(1)

{

P0=P1=P2=P3=0xff; //初始化

while (AN==1) //等待 AN 键按下

{

if (AN==0) //按键防抖动

{delayms(20);}

}

isd_pu(); // AN 键按下,ISD 上电并延迟 50ms

isd_pd();

isd_pu();

if (PR==1) //如果 PR=1 则转入录音部分

{

delayms(500); //延迟录音

isd_setrec(0x00,0x00); //发送 0x0000h 地址的 setplay 指令

do

{

isd_rec(); //发送 rec 指令

while(AN==0) //等待录音完毕

{

if (ISD_INT==0)//如果芯片溢出,进行 LED 闪烁提示,

isd_overflow(); //如果取消录音(松开AN键)则停止录音,芯片复位

}

if (ISD_INT==0)

break;

LED=1; //录音完毕,LED 熄灭

isd_stop(); //发送停止命令

while(AN==1) //如果 AN 再次按下,开始录制下一段语音

{

if(STOP==0) //如果按下 STOP 按键,则芯片复位

break;

if (AN==0)

delayms(500);

}

}while(AN==0);

}

else //如果 PR==0 则转入放音部分

{

while(AN==0){;}

isd_setplay(0x00,0x00); //发送 setplay 指令,从 0x0000 地址开始放音

do

{

isd_play(); //发送放音指令

delay(20);

while(ISD_INT==1) //等待放音完毕的 EOM 中断信号

{;}

LED=1;

isd_stop(); //放音完毕,发送 stop 指令

if (ovflog=chk_isdovf())//检查芯片是否溢出,如溢出则停止放音,芯片复位

break;

while(AN==1) //等待 AN 键再次按下

{

if (STOP==0)

break;

if(AN==0)

delayms(20);

}

}while(AN==0); // AN 键再次按下,播放下一段语音

}

isd_stop();

isd_pd();

}

}

#define ZLG7290 0x70

#define RADR 0x01

#define uchar unsigned char

#define uint unsigned int

/************************************/

void I2cStart(void)

{

SDA=1;

SCL=1;

Delay(10);

SDA=0;

Delay(10);

SCL=0;

}

/************************************/

void I2cStop(void)

{

SDA=0;

SCL=1;

Delay(10);

SDA=1;

Delay(10);

SCL=0;

}

/************************************/

void WriteI2cByte(uchar dat)

{

uchar k;

SCL=0;

for (k=0;k<8;k++)

{

SDA=(bit)(dat&0x80);

SCL=1;

Delay(10);

SCL=0;

dat<<=1;

}

SCL=0;

}

/*************************************/

uchar ReadI2cByte(void)

{

uchar dat,k;

for (k=0;k<8;k++)

{

SCL=0;

SDA=1; //一定要将SDA置为高电平,否则不能正常连续取数据

Delay(10);

SCL=1;

dat<<=1;

if (SDA)

dat|=0x01;

SCL=0;

Delay(10);

}

SCL=0;

return dat;

}

/*************************************/

void SendAck(void)

{

SDA=0;

Delay(10);

SCL=1;

Delay(10);

SCL=0;

}

/*************************************/

void SendNoAck(void)

{

SDA=1;

SCL=1;

Delay(10);

SCL=0;

}

/************************************/

void I2cWaitAck(void)

{

uchar ack;

SDA=1;

SCL=1;

Delay(10);

ack=SDA;

SCL=0;

}

/***********************************************************/

void I2cReadSequence(uchar sla,uchar sbua,uchar *s,uchar len)

{

uchar l;

I2cStart();

WriteI2cByte(sla);

I2cWaitAck();

WriteI2cByte(sbua);

I2cWaitAck();

I2cStart();

WriteI2cByte(sla+1);

I2cWaitAck();

for (l=0;l<len-1;l++)

{

*s=ReadI2cByte();

SendAck();

s++;

}

*s=ReadI2cByte();

SendNoAck();

I2cStop();

}

/************************************************************/

void I2cWriteSequence(uchar sla,uchar sbua,uchar *s,uchar len) //wr

{

uchar k;

I2cStart();

WriteI2cByte(sla);

I2cWaitAck();

WriteI2cByte(sbua);

I2cWaitAck();

for (k=0;k<len;k++)

{

WriteI2cByte(*s);

I2cWaitAck();

s++;

}

I2cStop();

}

/**************************************************************/

void I2cWriteByteToSlaver(uchar sla,uchar sbua,uchar dat)

{

I2cStart();

WriteI2cByte(sla);

I2cWaitAck();

WriteI2cByte(sbua);

I2cWaitAck();

WriteI2cByte(dat);

I2cWaitAck();

I2cStop();

Delay(10);

}

/**************************************************************/

uchar I2cReadByteFromSlaver(uchar sla,uchar sbua)

{

uchar dat;

I2cStart();

WriteI2cByte(sla);

I2cWaitAck();

WriteI2cByte(sbua);

I2cWaitAck();

I2cStart();

WriteI2cByte(sla+1);

I2cWaitAck();

dat=ReadI2cByte();

SendAck();

SendNoAck();

I2cStop();

return dat;

}

/**************************************************/

void main()

{

voice();//完成语音芯片的初始化 置入工作状态

s_softreset();

while(1)//进入程序主循环

{

main_measure();//读温湿度传感器 得到温度值Tem 湿度值Hum

/* if(Tem>Set_Tem && Hum >Set_Hum)//设置报警区间

{

warning();//执行警告 启动报警

} */

}

}

电子时钟

一?摘要

单片计算机即单片微型计算机。(Single-Chip?Microcomputer?),是?集CPU?,RAM?,ROM?,

定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于智能产

品和工业自动化上。而51?单片机是各单片机中最为典型和最有代表性的一种。这次毕业设

计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。

二?说明

系统由AT89C51、LED?数码管、按键、发光二极管等部分构成,能实现时间的调整、定

时时间的设定,输出等功能。系统的功能选择由SB0、SB1、SB2、SB3、SB4?完成。其中SB0

为时间校对,定时器调整功能键,按SB?0?进入调整状态。SB1?为功能切换键。第一轮按动

SB1?依次进入一路、二路、三路定时时间设置提示程序,按SB3?进入各路定时调整状态。定

时时间到,二极管发亮。到了关断时间后灭掉。如果不进入继续按SB1?键,依次进入时间

年?位校对、?月?位校对、日?位校对、?时?位校对、?分?位校对、?秒?位

校对状态。不管是进入那种状态,按动SB2?皆可以使被调整位进行不进位增量加1?变化。各

预置量设置完成后,系统将所有的设置存入RAM?中,按SB1?退出调整状态。上电后,系统自

动进入计时状态,起始于?00?时?00?分。SB4?为年月日显示转换键,可使原来显示时分

秒转换显示年月日。

三、电路原理分析

1.?显示原理

电原理图见附图1。由6?个共阴极的数码管组成时、分、秒的显示。P0?口的8?条数据线

P0.0?至P0.7?分别与两个CD4511?译码的ABCD?口相接,P2?口的?P2.0?至P2.2?分别通过电阻

R10?至R13?与VT1?至VT3?的基极相连接。这样通过P0?口送出一个存储单元的高位、低位BCD

显示代码,通过P2?口送出扫描选通代码轮流点亮LED1?至LED6,就会将要显示的数据在数

码管中显示出来。从P0?口输出的代码是BCD?码,从P2?口输出的就是位选码。这是扫描显示

原理。

2?键盘及读数原理

键盘是人与微机打交道的主要设备,按键的读取容易引起误动作。可采用软件去

抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电

平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里

采用软件延时的方法来避开抖动,延时时间20ms.

3?连击功能的实现

按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应

的功能会反复执行,好象连续执行,在这里我们采用软件延时250ms,当按键没释放则

执行下一条对应程序。利用连击功能,能实现快速调时操作。

四、程序设计思想和相关指令介绍

本系统的主程序主要完成时间显示和定时输出判断功能。而年月日显示和各时间单元进

位,时间设定时,调定时间设定时等功能全部在中断服务程序中完成。

1.数据与代码转换。

由前述可知,从P2?口输出位选码,从P0?口输出段选码,LED?就会显示出数字来。但P0

口的输出的数据是要BCD?码,各存储单元存储的是二进制数,也就是和要显示出的字符表达

的含义是不一致的。可见,将要显示的存储单元的数据直接送到P0?口去驱动LED?数码管显

示是不能正确表达的,必须在系统内部将要显示的数据经过BCD?码行转换后,将各个单元数

据的段选代码送入P0?口,给CD4511?译码后去驱动数码管显示。

具体转换过程如下:

我们先将要显示的数据装入累加器A?中,再将A?中的数据转换成高低两位的BCD?码,

再放回A?中,然后将A?中的值输出。如:有一个单元存储了45?这样一位数,则需转换成四

位的BCD?码:(0100)(0101)然后放入A?中。?A?中BCD?码,高位四位代表?4?低四位代

表?5?同时送给两个译码器中,译码后?45?字就在两个LED?中显示出来。

2.计时功能的实现与中断服务程序

时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器T0?打开后,

进入计时,满100?毫秒后,重装定时。中断一次,满一秒后秒进位,满60?秒后即为1?分钟,

分钟单元进位,60?分到了后,时单元进位,24?小时满后,天单元进位。这样然后根据进率,

得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED?中显示出来,

实现时钟计时功能。累加是用指令INC?来实现的。

进入中断服务程序以后,执行PUSH?PSW?和PUSH?A?将程序状态寄存器PSW?的内容和累

加器A?中的数据保存起来,这便是所谓的?保护现场?.?以保护现场和恢复现场时存取关键

数据的存储区叫做堆栈。在软件的控制之下,堆栈可在片内RAM?中的任一区间设定,而堆栈

的数据存取与一般的RAM?存取又有区别,对它的操作,要遵循?后进先出?的原则。

3?时间控制功能与比较指令

系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:先

将执行设备开启的时间和关闭时间置入RAM?某一单元,在计时主程序当中执行几条比较指

令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条?CLR?指令,将对应的

那路P3?置为高电位,开启;如果当前计时时间与执行设备设定的关闭时间相等,就执行SETB

对应的P3?置低电位,二极管截止,。实现此控制功能用到的比较指令为CJNE?A,#direct,

rel,其转移条件是累加器A?中的值与立即数不等则转移。

参考文献

1、?谢自美,《电子线路设计、实验、测试?》武汉:华中理工大学出版社,2000

2、?何书森、何华斌《实用数字电路原理与设计速成》福州:福建科学技术出版社,2000.6

3、?白驹衍,?《单片计算机及应用》北京:电子工业出版社,?1999.2

五:程序

SEC?EQU?32H?;秒?即时时间?\伪指令

MIN?EQU?31H?;分

HOUR?EQU?30H?;时

DAY?EQU?35H?;日

MON?EQU?34H?;月

YEAR?EQU?33H?;年

MIN_1?EQU?41H?;分?定时器1?路、开存储单元

HOUR_1?EQU?42H?;时

DAY_1?EQU?43H?;

MON_1?EQU?44H?;

YEAR_1?EQU?45H?;

MIN_11?EQU?40H?;分?定时器1?路、关存储单元

HOUR_11?EQU?46H?;时

DAY_11?EQU?47H?;日

MON_11?EQU?48H?;月

YEAR_11?EQU?49H?;年

;***********************

ORG?0000H

ljmp?MAIN

ORG?0003H?;中断转换显示年月日、INT0(SB4?键)

LJMP?SHOW

ORG?000BH?;计数中断?T0、方式1

LJMP?TIME

ORG?0013H

LJMP?CHANGE;?调整时间、定时、INT1(SB0?键)

;------主程序

ORG?0030H

MAIN:

;--------初始化付值

MOV?YEAR?,?#02

MOV?MON?,?#05

MOV?DAY?,?#01

MOV?HOUR?,?#00

MOV?MIN?,?#00

MOV?SEC?,?#00

CLR?40H?;定时单元1?路清零

CLR?41H

CLR?42H

CLR?43H

CLR?44H

CLR?45H

CLR?46H

CLR?47H

CLR?48H

CLR?49H

;-------开中断

MOV?TMOD?,?#01H?;计数、模式1、T0

MOV?TL0,?#0B0H?;100SM?计数定时

MOV?TH0,?#3CH?;

clr?p3.0

MOV?20H,?#0AH?;10?次*100SM

SETB?PT0?;T0?为最高级

SETB?TR0?;允许计数

SETB?ET0?;允许T0?中断

SETB?EX0?;允许INT0?中断

SETB?EX1?;允许INT1?中断

SETB?EA?;开总中断

;------显示、定时器启动判断

LOOP:

MOV?R1,?#30H;?存储单元

MOV?R4,?#01H;?位选通

MOV?R3,?#03H;?三组显示

NEXT:

MOV?A?,?@R1?;

MOV?B?,?#10?;将存储单元转换成两高低两组的BCD?码

DIV?AB

SWAP?A

ORL?A,?B

MOV?P0,?A;输出

MOV?P2,?R4

INC?R1?;下一单元

MOV?A,?R4?;

RL?A?;位移

MOV?R4,?A

LCALL?DE5SM?;延时0.5SM

DJNZ?R3,?NEXT?;全扫描显示一偏

;------判断定时输出(只编写了一路)

CJNE?R7,?#88H,LOOP?;是8?则开,否则、定时已关、转

;---------开

MOV?A,?YEAR

CJNE?A,?YEAR_1,?LOOP_1;年比较,不等转关

MOV?A,?MON

CJNE?A,?MON_1,?LOOP_1

MOV?A,?DAY

CJNE?A?,?DAY_1,LOOP_1

MOV?A,?HOUR

CJNE?A,?HOUR_1,LOOP_1

MOV?A,?MIN

CJNE?A,?MIN_1,?LOOP_1

CPL?P3.0

;---------关

LOOP_1:

MOV?A,?YEAR

CJNE?A,?YEAR_11,?LOOP;年比较

MOV?A,?MON

CJNE?A,?MON_11,?LOOP

MOV?A,?DAY

CJNE?A?,?DAY_11,LOOP

MOV?A,?HOUR

CJNE?A,?HOUR_11,LOOP

MOV?A,?MIN

CJNE?A,?MIN_11,?LOOP

CPL?P3.0

LJMP?LOOP

;-----年月日显示中断子程序

SHOW:

PUSH?PSW

push?ACC

PUSH?B

PUSH?01H

PUSH?02H

PUSH?03H

PUSH?04H

MOV?R2,?#0FFH?;中断扫描次数

TURN:?MOV?R1?,?#33H

MOV?R4?,?#01H

MOV?R3?,?#03H

NEXT_1:

MOV?A,?@R1

MOV?B?,?#10

DIV?AB

SWAP?A

ORL?A,?B

MOV?P0,?A

MOV?P2,?R4

INC?R1

RL?A

MOV?R4?,A

LCALL?DE5SM

DJNZ?R3,?NEXT_1

DJNZ?R2,?TURN?;反复显示一定时间后返回

POP?04H

POP?03H

POP?02H

POP?01H

POP?B

POP?ACC

POP?PSW

RETI

;-----计数中断服务子程序

TIME:

PUSH?PSW

PUSH?ACC

PUSH?B

PUSH?06H

MOV?TH0?,?#3CH;重装计数

MOV?TL0?,?#0BH;

DJNZ?20H,?OUT?;转到中断跳出pop?程序

MOV?20H,?#0AH?;?重装:100*10=1000

;-----进位程序

INC?SEC

MOV?R6,?SEC?;

CJNE?R6,?#60,?OUT;比较

MOV?SEC?,?#00?;

INC?MIN

MOV?R6,?MIN

CJNE?R6,?#60,?OUT

MOV?MIN?,?#00

INC?HOUR

MOV?R6?,?HOUR

CJNE?R6?,?#25?,?OUT

MOV?HOUR?,#00

INC?DAY

MOV?R5,?MON

CJNE?R5,?#1,?MON_22;是否1?月、不是转2?月

MOV?R5,?DAY

CJNE?R5,?#32,?OUT?;?本月是否益出

INC?MON

MOV?DAY,#1

LJMP?OUT

OUT:

POP?06H

POP?B

POP?ACC

POP?PSW

RETI

MON_22:

MOV?R5,?MON

CJNE?R5?,?#2?,?MON_33;是否2?月、不是转3?月

MOV?A,?YEAR?;判断是否瑞年

MOV?B,?#4

DIV?AB

MOV?A?,?B

JNZ?OUT_1;不是则转(A?不为零则转)

MOV?R5?,DAY

CJNE?R5,#30,?OUT;如是瑞年、判断是否到29?天

INC?MON

MOV?DAY?,#1

LJMP?OUT

OUT_1:

MOV?R5,?DAY

CJNE?R5,?#29,?OUT?;平年二月判断

INC?MON

MOV?DAY?,?#1

LJMP?OUT

MON_33:

MOV?R5,?MON

CJNE?R5,?#3?,?MON_44

MOV?R5,?DAY

CJNE?R5?,?#32,?OUT

INC?MON

MOV?DAY?,?#1

LJMP?OUT

MON_44:

MOV?R5,?MON

CJNE?R5,#4,?MON_55

MOV?R5,?DAY

CJNE?R5?,#31,OUT

INC?MON

MOV?DAY?,?#1

LJMP?OUT

MON_55:

MOV?R5,MON

CJNE?R5,#5,?MON_66

MOV?R5,DAY

CJNE?R5,#32,OUT

INC?MON

MOV?DAY,#1

LJMP?OUT

MON_66:

MOV?R5,?MON

CJNE?R5,#6,?MON_77

MOV?R5,?DAY

CJNE?R5?,#31,OUT

INC?MON

MOV?DAY?,?#1

LJMP?OUT

MON_77:

MOV?R5,?MON

CJNE?R5,#7,?MON_88

MOV?R5,?DAY

CJNE?R5,#32,L1

INC?MON

MOV?DAY?,?#1

L1:?LJMP?OUT

MON_88:

MOV?R5,?MON

CJNE?R5,#8,?MON_99

MOV?R5,?DAY

CJNE?R5?,#32,L2

INC?MON

MOV?DAY?,?#1

L2:?LJMP?OUT

MON_99:

MOV?R5,?MON

CJNE?R5,#9,?MON_00

MOV?R5,DAY

CJNE?R5?,#31,L3

INC?MON

MOV?DAY?,?#1

L3:?LJMP?OUT

MON_00:

MOV?R5,?MON

CJNE?R5,#10,?MON_AA

MOV?R5,?DAY

CJNE?R5?,#32,L4

INC?MON

MOV?DAY?,?#1

L4:?LJMP?OUT

MON_AA:

MOV?R5,?MON

CJNE?R5,#11,?MON_BB

MOV?R5,DAY

CJNE?R5,#31,L5

INC?MON

MOV?DAY?,?#1

L5:?LJMP?OUT

MON_BB:

MOV?R5,?DAY

CJNE?R5?,#32,L6

INC?YEAR

MOV?MON,?#1

MOV?DAY?,?#1

L6:LJMP?OUT

;-------按SB2\定时器年单元加1?子程序

SB3_2:?LJMP?SHOW_2?;二路没编返回

SB3_3:?LJMP?SHOW_3?;三路没编返回

SB3_1:

MOV?A?,?YEAR_1?;?调时年单元

MOV?B?,#10

DIV?AB

SWAP?A

ORL?A,B

MOV?P0,?A

MOV?P2,?#01H

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,?SB3_1

CJNE?A,?#0FBH,?KEY2_7?;按SB2?转年调整

LJMP?MON_111?;按SB1?往下调月单元

KEY2_7:CJNE?A,?#0FDH,?SB3_1

INC?YEAR_1?;?1?路年单元加1

MOV?R5,YEAR_1

CJNE?R5,#09,SB3_1?;益出

MOV?YEAR_1,?#00H

AJMP?SB3_1?;

;-------月单元加1?子程序

MON_111:

MOV?A?,?MON_1?;?调时月单元显示

MOV?B?,#10

DIV?AB

SWAP?A

ORL?A,B

MOV?P0,?A

MOV?P2,?#02H

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,?MON_111

CJNE?A,?#0FBH,?KEY2_8?;按SB2?转月调整

LJMP?DAY_111

KEY2_8:

CJNE?A,#0FDH,MON_111

INC?MON_1?;1?路月单元加1

MOV?R5,MON_1

CJNE?R5,#13,MON_111;益出

MOV?MON_1,?#01H

AJMP?MON_111?;?转到月显

;_------日单元加1?子程序

DAY_111:

MOV?A?,?DAY_1?;?调时日单元显示提示

MOV?B?,#10

DIV?AB

SWAP?A

ORL?A,B

MOV?P0,?A

MOV?P2,?#04H

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,DAY_111

CJNE?A,?#0FBH,?KEY2_9?;按SB2?转日调整

LJMP?HOUR_111

KEY2_9:?CJNE?A,#0FDH,DAY_111

INC?DAY_1?;1?组日单元加1

MOV?R5,?DAY_1

CJNE?R5,#32,DAY_111;益出

MOV?DAY_1,?#01H

AJMP?DAY_111?;?转到日显

;-------按SB2?时单元加1?子程序

HOUR_111:

MOV?A?,?HOUR_1?;?调时时单元显示提示

MOV?B?,#10

DIV?AB

SWAP?A

ORL?A,B

MOV?P0,?A

MOV?P2,?#01H

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,HOUR_111

CJNE?A,?#0FBH,?KEY2_10?;?按SB2?转时调整

LJMP?MIN_111

KEY2_10:CJNE?A,#0FDH,HOUR_111

INC?HOUR_1

MOV?R5,HOUR_1

CJNE?R5,#24,HOUR_111;益出

MOV?HOUR_1,?#00H

AJMP?HOUR_111?;?转到时显

;-------分单元加1?子程序

MIN_111:

MOV?A?,?MIN_1?;?调时分单元、并显示提示

MOV?B?,#10

DIV?AB

SWAP?A

ORL?A,B

MOV?P0,?A

MOV?P2,?#02H

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,MIN_111

CJNE?A,?#0FBH,?KEY2_11?;按SB2?转分调整

AJMP?OFF_CH?;按SB3?往下调定时:关单元

KEY2_11:?CJNE?A,?#0FDH,?MIN_111

INC?MIN_1?;1?路分单元加1

MOV?R5,?MIN_1

CJNE?R5,#60,MIN_111;益处

MOV?MIN_1,?#00H

AJMP?MIN_111?;?转到分显

年单元调整

OFF_CH:?MOV?A?,?YEAR_11?;?调时年单元

MOV?B?,#10

DIV?AB

SWAP?A

ORL?A,B

MOV?P0,?A

MOV?P2,?#01H

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,?OFF_CH

CJNE?A,?#0FBH,?KEY2_F7?;按SB2?转年调整

LJMP?MON_OFF?;按SB1?往下调月单元

KEY2_F7:CJNE?A,?#0FDH,?OFF_CH

INC?YEAR_11?;?1?路年单元加1

MOV?R5,YEAR_11

CJNE?R5,#09,OFF_CH?;益出

MOV?YEAR_11,?#00H

AJMP?OFF_CH?;

;-------月单元加1?子程序

MON_OFF:

MOV?A?,?MON_11?;?调时月单元显示

MOV?B?,#10

DIV?AB

SWAP?A

ORL?A,B

MOV?P0,?A

MOV?P2,?#02H

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,?MON_OFF

CJNE?A,?#0FBH,?KEY2_F8?;按SB2?转月调整

LJMP?DAY_OFF

KEY2_F8:

CJNE?A,#0FDH,MON_OFF

INC?MON_11?;1?路月单元加1

MOV?R5,MON_11

CJNE?R5,#13,MON_OFF;益出

MOV?MON_11,?#01H

AJMP?MON_OFF?;?转到月显

;_------日单元加1?子程序

DAY_OFF:

MOV?A?,?DAY_11?;?调时日单元显示提示

MOV?B?,#10

DIV?AB

SWAP?A

ORL?A,B

MOV?P0,?A

MOV?P2,?#04H

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,DAY_OFF

CJNE?A,?#0FBH,?KEY2_F9?;按SB2?转日调整

LJMP?HOUR_OFF

KEY2_F9:?CJNE?A,#0FDH,DAY_OFF

INC?DAY_11?;1?组日单元加1

MOV?R5,?DAY_11

CJNE?R5,#32,DAY_OFF;益出

MOV?DAY_11,?#01H

AJMP?DAY_OFF?;?转到日显

;-------按SB2?时单元加1?子程序

HOUR_OFF:

MOV?A?,?HOUR_11?;?调时时单元显示提示

MOV?B?,#10

DIV?AB

SWAP?A

ORL?A,B

MOV?P0,?A

MOV?P2,?#01H

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,HOUR_OFF

CJNE?A,?#0FBH,?KEY2_F10?;?按SB2?转时调整

LJMP?MIN_OFF

KEY2_F10:CJNE?A,#0FDH,HOUR_OFF

INC?HOUR_11

MOV?R5,HOUR_11

CJNE?R5,#24,HOUR_OFF;益出

MOV?HOUR_11,?#00H

AJMP?HOUR_OFF?;?转到时显

;-------分单元加1?子程序

MIN_OFF:

MOV?A?,?MIN_11?;?调时分单元、并显示提示

MOV?B?,#10

DIV?AB

SWAP?A

ORL?A,B

MOV?P0,?A

MOV?P2,?#02H

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,MIN_OFF

CJNE?A,?#0FBH,?KEY2_F11?;按SB2?转分调整

LJMP?ON_1?;按SB3?往下调定时:开与关

KEY2_F11:?CJNE?A,?#0FDH,?MIN_OFF

INC?MIN_11?;1?路分单元加1

MOV?R5,?MIN_11

CJNE?R5,#60,MIN_OFF;益处

MOV?MIN_11,?#00H

LJMP?MIN_OFF?;?转到分显

;-------开、关定时

ON_1:CJNE?A,?#0FBH,?MIN_OFF

K1:?MOV?A,?#88H

MOV?R7,?A

MOV?P0,?A

MOV?P2,?#0FFH;三组都显示开

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,?ON_1;去抖后比较

CJNE?A,?#0FBH,KEY2_12?;按SB2?转关

LJMP?OUT_A?;按SB3?调出、处于开状态

KEY2_12:?CJNE?A,?#0FDH,?K1

k2:?MOV?A,?#00H;?显示0?关

MOV?R7,?A

MOV?P0,?A

MOV?P2,?#0FFH;

LCALL?READ

LCALL?DE250SM

CJNE?A,?01H,?K2;去抖后比较

CJNE?A,?#0FBH,KEY2_13?;按SB2?转开

LJMP?OUT_A?;SB3?调出、处关状态

KEY2_13:

CJNE?A,?#0FDH,?K2?;?比较按了没

LJMP?K1?;?按了SB2、转开

OUT_A:

POP?00H

POP?B

POP?ACC

POP?PSW

RETI

;_------读取按键程序

READ:MOV?A?,?P1;读取按键

MOV?R1,?A

LCALL?DE10MS

MOV?A,?P1

RET

;_----延时程序

DE5SM:

PUSH?01H

MOV?R1,?#0FFH

DJNZ?R1,$

POP?01H

RET

DE10MS:?PUSH?04H

PUSH?05H

MOV?R4,?#0AH

Dl1:?MOV?R5,?#0FFH

dl2:?DJNZ?R5,$

DJNZ?R4,dl1

POP?05H

POP?04H

RET

DE250SM:PUSH?02H

PUSH?00H

MOV?R0,?#0FFH

DEL:MOV?R2,?#0FFH

DJNZ?R2,$

DJNZ?R0,?DEL

POP?00H

POP?02H

RET

;_---调整时间进位程序

MIN_AD:

INC?MIN

MOV?R6,?MIN

CJNE?R6,?#60,?OU1

MOV?MIN?,?#00

OU1:?RET

HOUR_AD:

INC?HOUR

MOV?R6?,?HOUR

CJNE?R6?,?#25?,?OU2

MOV?HOUR?,#00

OU2:?RET

DAY_AD:

INC?DAY

MOV?R6,?DAY

CJNE?R6?,?#32,?OU3?;?是否益出

MOV?DAY?,#01H

OU3:?RET

MON_AD:

INC?MON

MOV?R6,?MON

CJNE?R6,?#13,?OU4?;?是否益出

MOV?MON?,#01H

OU4:?RET

YEAR_AD:

INC?YEAR

MOV?R6,?YEAR

CJNE?R6,?#09,?OU5;是否益出

MOV?YEAR?,#00H

OU5:?RET

END

六:附录

实验设计电路图1

流程图1:实验主程序流程图

流程图2:定时中断程序流程图

流程图3:调时功能流程图?

关于“51单片机intrinsic.h怎么用”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

本文来自作者[admin]投稿,不代表百科号立场,如若转载,请注明出处:https://bkvjgel.cn/cshi/202501-4359.html

(182)

文章推荐

  • 交易性金融资产—债券和其他债权投资—债券有什么区别-

    网上有关“交易性金融资产—债券和其他债权投资—债券有什么区别?”话题很是火热,小编也是针对交易性金融资产—债券和其他债权投资—债券有什么区别?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。交易性金融资产—债券和其他债权投资—债券的明显区别是短期持有或长期

    2024年12月22日
    170
  • 可转债为什么强赎触发后还没有退市-

    网上有关“可转债为什么强赎触发后还没有退市?”话题很是火热,小编也是针对可转债为什么强赎触发后还没有退市?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。可转债强赎规则是发行人有权在债券达到一定条件限度时,对投资人未转股的可转债按照一定价格强制赎回。可转债

    2024年12月24日
    197
  • 大宗交易规则

    网上有关“大宗交易规则”话题很是火热,小编也是针对大宗交易规则寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。上海证券交易所大宗交易规则:1.大宗交易条件:A股单笔交易申报数量不少于30万股,或交易金额不少于200万元;单笔交易申报的B股数量不少于30万股

    2024年12月25日
    190
  • 小麦玉米涨价利好什么股票

    网上有关“小麦玉米涨价利好什么股票”话题很是火热,小编也是针对小麦玉米涨价利好什么股票寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。*ST乐材(300446)、淮河能源等22只个股拟筹划重大资产重组,重组形式包括发行股份购买资产、协议收购、吸收合并等。此外,

    2024年12月26日
    193
  • 盛势国际版区别

    网上有关“盛势国际版区别”话题很是火热,小编也是针对盛势国际版区别寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。所服务的客户群体和交易市场不同。查询盛势国际外汇交易平台可知,国内版主要服务于中国大陆地区的客户,提供的交易市场主要是国内的外汇、股票等金融市场,

    2024年12月29日
    106
  • 英国的股票流通市场由谁组成

    网上有关“英国的股票流通市场由谁组成”话题很是火热,小编也是针对英国的股票流通市场由谁组成寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。英国的金融市场主要是由三个部分组成,一个是全方位的组成,一个是国民一起的组成,还有文化的古城根据经营的业务性质,主要可分为

    2024年12月31日
    150
  • 证券交易所的几个时间-

    网上有关“证券交易所的几个时间?”话题很是火热,小编也是针对证券交易所的几个时间?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。证券交易所股市交易时间为每周一到周五1.上午时段9:30-11:30,2.下午时段13:00-15:00。3.周六

    2025年01月01日
    132
  • 10转4股派3元算利好还是利空

    网上有关“10转4股派3元算利好还是利空”话题很是火热,小编也是针对10转4股派3元算利好还是利空寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。利好。10转4股派3元的意思就是公司股东每持有10股该公司股票就能够获得转赠的4股该公司股票和3元的现金。一般

    2025年01月02日
    142
  • 123法则 是 谁提出的_1

    网上有关“123法则是谁提出的”话题很是火热,小编也是针对123法则是谁提出的寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。123法则相当于道氏理论对趋势发生转变的定义,包括1、趋势线被突破;2、上升趋势不再创新高,或下降趋势不再创新低;3、在上升

    2025年01月02日
    184
  • 3元以下的股票是什么意思

    网上有关“3元以下的股票是什么意思”话题很是火热,小编也是针对3元以下的股票是什么意思寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。3元以下的股票通常指股价低于3元的股票,是低价股中的一类。在A股市场中,许多公司的股票价格都高于3元,但也有一些公司的股票

    2025年01月03日
    175

发表回复

本站作者后才能评论

评论列表(4条)

  • admin
    admin 2025年01月10日

    我是百科号的签约作者“admin”!

  • admin
    admin 2025年01月10日

    希望本篇文章《51单片机intrinsic.h怎么用》能对你有所帮助!

  • admin
    admin 2025年01月10日

    本站[百科号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育

  • admin
    admin 2025年01月10日

    本文概览:网上有关“51单片机intrinsic.h怎么用”话题很是火热,小编也是针对51单片机intrinsic.h怎么用寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临...

    联系我们

    邮件:百科号@sina.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们