当前位置:文档之家› STC12C5A60S2单片机各个模块程序代码

STC12C5A60S2单片机各个模块程序代码

STC12C5A60S2单片机各个模块程序代码
STC12C5A60S2单片机各个模块程序代码

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

// STC12C5A60S2可编程时钟模块

//

//

// 说明:STC12C5A60S2单片机有三路可编程时钟输出CLKOUT0/T0/P3.4

// CLKOUT1/T1/P3.5、CLKOUT2/P1.0

//

// 涉及寄存器:AUXR(辅助寄存器)、WAKE_CLKO(时钟与系统掉电唤醒控制寄存器) // BRT(独立波特率发生器定时器寄存器)

//

// 程序说明:

// 本程序可选实现P3.4输出CLKOUT0时钟、P3.5输出CLKOUT1时钟// P1.0输出CLKOUT2时钟

//

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

#include

#include

//#define Port_BRT //如果想测试独立波特率发生器时钟输出请打开此句

//若想测试CLKOUT1和CLKOUT0请注释此句

#ifdef Port_BRT /*条件编译独立波特率发生器时钟输出*/

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

// CLKOUT2时钟初始化 //

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

void CLKOUT_init(void)

{

WAKE_CLKO = 0x04; //Bit2-BRTCLKO 允许P1.0配置为独立波特率发生器的时钟输出

//BRT工作在1T模式下时的输出频率 = Sysclk/(256-BRT)/2 //BRT工作在12T模式下时输出频率 = Sysclk/12/(256-BRT)/2 AUXR = 0x14; //Bit4-BRTR 允许独立波特率发生器运行

//Bit2-BRTx12 BRT工作在1T模式下

BRT = 0xff; //更改该寄存器的值可实现对输出的时钟频率进行分频

}

#else /*条件编译CLKOUT0时钟输出*/

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

// CLKOUT0时钟和CLKOUT1初始化 //

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

void CLKOUT_init(void)

{

WAKE_CLKO = 0x03; //允许将P3.4/T0脚配置为定时器0的时钟输出CLKOUT0

//T0工作在1T模式时的输出频率 = SYSclk/(256-TH0)/2

//T0工作在12T模式时的输出频率 = SYSclk/12/(256-TH0)/2 //1T指的是每1个时钟加1,是普通C51的12倍

//12T指的是每12个时钟加1与普通C51一样

//允许将P3.5/T1脚配置为定时器1的时钟输出CLKOUT1,只能工作在定时器模式2下

//T1工作在1T模式时的输出频率 = SYSclk/(256-TH0)/2

//T1工作在12T模式时的输出频率 = SYSclk/12/(256-TH0)/2 //1T指的是每1个时钟加1,是普通C51的12倍

//12T指的是每12个时钟加1与普通C51一样

AUXR = 0xc0; //T0定时器速度是普通8051的12倍,即工作在1T模式下

//T1定时器速度是普通8051的12倍,即工作在1T模式下

TMOD = 0x22; //定时器0工作模式为方式2,自动装载时间常数

//定时器1工作模式为方式2,自动装载时间常数

TH0 = 0xff; //更改该寄存器的值可实现对输出的时钟频率进行分频

TL0 = 0xff;

TH1 = 0xff; //更改该寄存器的值可实现对输出的时钟频率进行分频

TL1 = 0xff;

TR1 = 1;

TR0 = 1;

}

#endif

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

// 主程序//

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

void main()

{

CLKOUT_init();

while(1);

}

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

// STC12C5A60S2系统时钟模块

//

//

// 说明: STC12C5A60S2单片机有两个时钟源,内部R/C振荡时钟和外部晶体时钟// 出厂标准配置是使用外部晶体或时钟

//

//

// 涉及寄存器:CLK_DIV(时钟分频寄存器)

// 由该寄存器的Bit0-2组合可实现对时钟源进行0、2、4、8、16

// 32、64、128分频

// //

// 程序说明:

// 对外部时钟进行分频得到Sysclk,然后经过P1.0的独立波特率

// 时钟输出功能Sysclk/2输出时钟频率

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

#include

#include

#define Bus_clk 12 //若要修改系统时钟直接在此处修改

//12 为 12M 的sysclk

//6 为 6M 的sysclk

//3 为 3M 的sysclk

//1500 为 1.5M 的sysclk

//750 为 750kHz 的sysclk

//375 为 375kHz 的sysclk

//187500 为 187.5kHz 的sysclk

//93750 为 93.75kHz 的sysclk

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

// 系统时钟初始化 //

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

void Sysclk_init(void)

{

WAKE_CLKO = 0x04; //配置P1.0口为频率输出

AUXR = 0x14; //允许波特率时钟工作

//工作模式为1T

BRT = 0xff;

#if( Bus_clk == 12 )

CLK_DIV = 0x00;

#elif( Bus_clk == 6 )

CLK_DIV = 0x01;

#elif( Bus_clk == 3 )

CLK_DIV = 0x02;

#elif( Bus_clk == 1500 )

CLK_DIV = 0x03;

#elif( Bus_clk == 750 )

CLK_DIV = 0x04;

#elif( Bus_clk == 375 )

CLK_DIV = 0x05;

#elif( Bus_clk == 187500 )

CLK_DIV = 0x06;

#elif( Bus_clk == 93750 )

CLK_DIV = 0x07;

#endif

}

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

// 主程序//

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

void main()

{

Sysclk_init();

while(1);

}

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

// STC12C5A60S2系统省电模块//

//

// 说明: STC12C5A60S2单片机有三种省电模式以降低功耗.空闲模式,低速模式// 掉电模式

//

//

// 涉及寄存器:PCON(电源控制寄存器)

// Bit0 - IDL 控制单片机进入IDLE空闲模式

// Bit1 - PD 控制单片机进入掉电模式

// //

// 程序说明:程序实现让单片机先工作一阵子(通过P0^3指示灯显示)

// 然后进入掉电状态,利用外部中断0口来唤醒单片机工作

// 唤醒后单片机将通过P0^0-3口的灯闪烁显示开始工作

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

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar Power_Down_Flag = 0; //进入掉电状态标志

sbit Chip_Start_LED = P0^0; //单片机开始工作指示灯

sbit Power_Down_LED_INT0 = P0^1; //INT0口掉电唤醒指示灯

sbit N_Power_Down_LED_INT0 = P0^2; //INT0口没有唤醒指示灯

sbit Normal_Work_LED = P0^3; //正常工作指示灯

sbit Power_Down_Wakeup_INT0= P3^2; //外中断唤醒输入口

void Delay_ms( uint time );

void Normal_work(void);

void Intp_init(void);

void After_Powr_Down(void);

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

// 软件延时 //

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

void Delay_ms( uint time )

{

uint t; //延时时间 = (time*1003+16)us while(time--)

{

for( t = 0; t < 82; t++ );

}

}

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

// 正常工作指示

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

void Normal_work(void)

{

Normal_Work_LED = 1;

Delay_ms(500);

Normal_Work_LED = 0;

Delay_ms(500);

}

void After_Power_Down(void)

{

uchar i ;

for( i = 0; i < 100; i++ )

{

P0 = 0x0f;

Delay_ms(500);

P0 = 0x00;

Delay_ms(500);

}

}

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

// 中断初始化 //

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

void Intp_init(void)

{

IT0 = 0; //外部中断源0为低电平触发

EX0 = 1; //允许外部中断

EA = 1; //开总中断

}

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

// 主程序 //

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

void main()

{

uchar j = 0;

uchar wakeup_counter = 0; //记录掉电次数

P0 = 0x00;

Chip_Start_LED = 1; //单片机开始工作

Intp_init(); //外中断0初始化

while(1)

{

P2 = wakeup_counter;

wakeup_counter++;

for( j = 0; j < 250; j++ )

{

Normal_work(); //系统正常工作指示

}

Power_Down_Flag = 1; //系统开始进入掉电状态

PCON = 0x02;

_nop_();

_nop_();

_nop_();

_nop_();

After_Power_Down(); //掉电唤醒后

}

}

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

// 中断服务

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

void INT0_Service(void) interrupt 0

{

if( Power_Down_Flag ) //掉电唤醒状态指示 {

Power_Down_Flag = 0;

Power_Down_LED_INT0 = 1;

while( Power_Down_Wakeup_INT0 == 0 )

{

_nop_(); //等待高电平}

Power_Down_LED_INT0 = 0;

}

else //未掉电状态

{

N_Power_Down_LED_INT0 = 1; //不是掉电唤醒指示

while( Power_Down_Wakeup_INT0 == 0 )

{

_nop_();

}

N_Power_Down_LED_INT0 = 0;

}

}

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

// STC12C5A60S2 A/D转换模块//

//

// 说明: STC12C5A60S2单片机有8路10位高速AD转换器,P1^0-P1^7

//

// 涉及寄存器:P1ASF(模拟功能控制寄存器)、ADC_CONTR(ADC控制寄存器)

// ADC_RES、ADC_RESL(转换结果寄存器)

//

// 注意: 1、初次打开内部A/D模拟电源需适当延时等内部模拟电源稳定后,再启动A/D转换

// 启动A/D后,在转换结束前不改变任何I/O口的状态,有利于高精度A/D 转换

// 若能将定时器/串行/中断系统关闭更好。

// 2、A/D转换模块使用的时钟为内部R/C振荡器所产生的系统时钟

// 3、由于使用两套时钟,设置好ADC_CONTR后要加4个空延时操作才可以正确

// 读到ADC_CONTR寄存器的值

////

// 程序说明:

// 本程序实现P1^0口作为A/D采集输入口,对外部电压的测量并将测量结果通过

// 12864和串口显示出来

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

#include

#include

#include "lcd.h"

#define ADC_POWER 0x80 //AD电源控制

#define ADC_START 0x08 //AD转换控制

#define ADC_FLAG 0x10 //AD转换完成

#define Speed_0 0x00 //540 clk

#define Speed_1 0x20 //360 clk

#define Speed_2 0x40 //180 clk

#define Speed_3 0x60 //90 clk

#define ADC0 0x00 //P1.0

#define ADC1 0x01 //P1.1

#define ADC2 0x02 //P1.2

#define ADC3 0x03 //P1.3

#define ADC4 0x04 //P1.4

#define ADC5 0x05 //P1.5

#define ADC6 0x06 //P1.6

#define ADC7 0x07 //P1.7

void AD_init(void);

double Result_Calculate(void);

void SendData( uchar byte );

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

// A/D初始化//

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

void AD_init(void)

{

AUXR1 = 0x04; //转换结果高2位放在ADC_RES的低2位中,低8位放在ADC_RESL中

P1ASF = 0x01; //P1.0口作为模拟功能A/D使用

ADC_RES = 0x00; //结果清零

ADC_RESL = 0x00;

ADC_CONTR = ADC_POWER|Speed_2|ADC0|ADC_START; //打开电源,180CLK周期转换,选择P1.0作输入

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

EADC = 1; //允许A/D转换中断

EA = 1; //开总中断

}

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

// 串口初始化 //

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

void UART_init(void)

{

SM0 = 0; //选择串口为方式1工作

SM1 = 1; //8位数据波特率可变

REN = 1;

BRT = 0xDC;

AUXR = 0x15; //选择独立波特率发生器为串行 //口的波特率发生器,模式为1T }

//******************************************// // 转换结果计算// //******************************************// double Result_Calculate(void)

{

uint temp;

double result;

temp = ADC_RES * 256 + ADC_RESL;

result = temp * 4.94 / 1024;

return result;

}

//******************************************// // 串口发送数据// //******************************************// void SendData( uchar byte )

{

SBUF = byte;

while(!TI);

TI = 0;

}

//******************************************// // 主程序// //******************************************// void main()

{

Init_LCD();

AD_init();

UART_init();

while(1);

}

//******************************************// // A/D中断服务// //******************************************// void AD_Service(void) interrupt 5

{

ADC_CONTR &= !ADC_FLAG; //清标志

Printf_Decimal(Result_Calculate());

ADC_RES = 0x00;

ADC_RESL = 0x00;

ADC_CONTR = ADC_POWER|Speed_2|ADC_START; //开始下一次转换 _nop_();

_nop_();

_nop_();

_nop_();

}

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit PSB = P0^4; //串/并行接口选择 1-并行 0-串行

sbit RS = P0^7; //并行数据/命令选择,串行片选 0-指令 1-数据sbit RW = P0^6; //并行读写选择 0-写 1-读串行数据口

sbit E = P0^5; //并行使能, 串行同步时钟

void Delay_ms( uint time ); //延时

uchar Busy(void); //读忙

uchar Read_Status(void);//读状态

uchar Read_Date(void); //读数据

void Write_Cmd( uchar cmd ); //写命令

void Write_Date( uchar date );//写数据

void Init_LCD(void);//初始化LCD

void Location( uchar x, uchar y );//设定显示位置

void Clear_Screen(void);//清屏

void Write_str( uchar *p );

void Printf_Decimal(double Num);

#include "lcd.h"

extern void SendData( uchar byte );

/***********以下部分为LCD的驱动程序*************/

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

//* 名称: Delay_ms()

//* 功能: 实现软件延时

//* 输入: time - 时间参数

//* 输出: 无

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

void Delay_ms( uint time )

{

uint t; //82,延时时间 = (time*1003+16)us while(time--) //41,延时时间 = (time*499+16)us

{

for( t = 0; t < 41; t++ );

}

}

//**********************************// //* 名称: Busy()

//* 功能: 读取忙状态

//* 输入: 无

//* 输出: 1-忙 0-空闲

//**********************************// uchar Busy(void)

{

uchar busy,flag;

Delay_ms(1);

busy = Read_Status();

if( busy & 0x80 )

flag = 1;

else

flag = 0;

Delay_ms(1);

return flag;

}

//**********************************// //* 名称: Read_Status()

//* 功能: 读12864状态

//* 输入: 无

//* 输出: status-当前状态

//**********************************// uchar Read_Status(void)

{

uchar status;

RS = 0;

RW = 1;

E = 0;

_nop_();

_nop_();

_nop_();

E = 1;

Delay_ms(1);

status = P2;

Delay_ms(1);

E = 0;

_nop_();

_nop_();

return status;

}

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

//* 名称: Write_Cmd()

//* 功能: 向12864写命令

//* 输入: cmd - 命令参数

//* 输出: 无

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

void Write_Cmd( uchar cmd )

{

RS = 0;

RW = 0;

E = 0;

Delay_ms(1);

P2 = cmd;

Delay_ms(1);//等待数据稳定

E = 1;

Delay_ms(1);

E = 0;

}

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

//* 名称: Write_Date()

//* 功能: 向12864写数据

//* 输入: date - 待写入的数据

//* 输出: 无

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

void Write_Date( uchar date )

{

while(Busy());

RS = 1;

RW = 0;

E = 0;

_nop_();

_nop_();

P2 = date;

Delay_ms(1);//待数据稳定

E = 1;

Delay_ms(1);

E = 0;

_nop_();

_nop_();

}

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

//* 名称: Read_Date()

//* 功能: 向12864读数据

//* 输入: 无

//* 输出: date - 返回的数据

//**********************************// uchar Read_Date(void)

{

uchar date;

while(Busy()); //忙

RS = 1;

RW = 1;

E = 0;

_nop_();

_nop_();

_nop_();

E = 1;

Delay_ms(1);

date = P2;

Delay_ms(1);

E = 0;

_nop_();

return date;

}

//**********************************// //* 名称: Init_LCD()

//* 功能: 初始化LCD

//* 输入: 无

//* 输出: 无

//**********************************// void Init_LCD(void)

{

Delay_ms(4);

PSB = 1;//并行方式

Delay_ms(4);

Write_Cmd(0x0c);//开显示关游标

Delay_ms(4);

Clear_Screen();//清屏

}

//**********************************// //* 名称: Location()

//* 功能: 设定显示位置

//* 输入: x,y --X轴点 --Y轴点

//* x 只能是1-4中的一个数

//* Y 只能是0-7中的一个数

//* 输出: 无

//**********************************// void Location( uchar x, uchar y )

{

uchar position;

if( x == 1 )

x = 0x80;

else if( x == 2 )

x = 0x90;

else if( x == 3 )

x = 0x88;

else if( x == 4 )

x = 0x98;

position = x + y;

Write_Cmd(position);

Delay_ms(2);

}

//**********************************// //* 名称: Clear_Screen()

//* 功能: 清屏

//* 输入: 无

//* 输出: 无

//**********************************// void Clear_Screen(void)

{

Write_Cmd(0x34); //扩充指令

Delay_ms(11); //10ms

Write_Cmd(0x30); //基本指令

Delay_ms(1);

Write_Cmd(0x01);//清屏

Delay_ms(10);

}

//**********************************// //* 名称: Write_str()

//* 功能: 向12864里写字符串

//* 输入: *p -- 字符串地址

//* 输出: 无

//**********************************// void Write_str( uchar *p )

{

while( *p != '\0' )

{

Write_Date(*p);

p++;

}

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

//* 名称:Printf_Decimal()

//* 功能:打印浮点类型数据

//* 输入:double Num --要打印的数据

//* 输出:无

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

void Printf_Decimal(double Num)

{

uchar s[6] = {0,0,46,0,0};

uint t;

t = (uint)(Num * 1000);

s[0] = t/10000+48;

s[1] = t%10000/1000+48;

s[3] = t%1000/100+48;

s[4] = t%100/10+48;

s[5] = t%10+48;

Location(1,2);

Write_str(s);

SendData(s[0]);

SendData(s[1]);

SendData(s[2]);

SendData(s[3]);

SendData(s[4]);

SendData(s[5]);

SendData('\t');

}

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

// STC12C5A60S2 PCA/PWM模块//

//

// 说明: STC12C5A60S2单片机有两路可编程计数器阵列(PCA)模块,可用于软件

// 定时器,外部脉冲的捕捉、高速输出以及脉宽调制(PWM)输出

//

// 涉及寄存器:CMOD(PCA工作模式寄存器) CCON(PCA控制寄存器)

// CCAPM0,CCAPM1(PCA比较/捕获寄存器)

// CH,CL(PCA的16位计数器)、CCAPnL,CCAPnH(PCA捕捉/比较寄存器) // PCA_PWM0,PCA_PWM1(PCA模块PWM寄存器)

// AUXR1(辅助寄存器1)

// //

// 程序说明:本程序实现对PCA/PWM模块的四种工作模式的测试。

// 注意:当选择相应的模式时,需在主函数内和中断服务内更改相应模式的初始化

// 和相应的中断服务程序。去掉注释即可,若要更改相应模式的功能,需在相应

// 的初始化函数里更改相应的参数,脉宽调制(PWM)默认设置为无中断方式

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

#include

#include

#define uchar unsigned char

#define uint unsigned int

/*******高速模式变量更改*********/

#define FOSC 12000000

#define T100KHz (FOSC/2/100000) //高速脉冲输出频率计算: f = PCA模块的时钟源/(2*CCAP0L)

//CCAP0L = PCA时钟源/2/f

/*******定时模式变量更改*********/

#define T5ms (0.005*FOSC) //定时计数值=T/(1/PCA的时钟源)

/*******PWM模式变量更改**********/

#define DR_50 0x7f //50%占空比

#define DR_10 0x19 //10%占空比

/*******时钟源选择*******/

#define CLK_0 0x00 //Sysclk/12

#define CLK_1 0x02 //Sysclk/2

#define CLK_2 0x04 //定时器0的溢出脉冲

#define CLK_3 0x06 //ECI/P1.2(P4.1)输入的外部时钟

#define CLK_4 0x08 //Sysclk

#define CLK_5 0x0a //Sysclk/4

#define CLK_6 0x0d //Sysclk/6

#define CLK_8 0x0e //Sysclk/8

/********模式选择********/

#define H_model 0x4d //高速输出模式,中断模式

#define T_model 0x49 //定时模式

#define P_model 0x42 //无中断PWM模式

#define PL_model 0x63 //由低变高可中断PWM模式

#define PH_model 0x53 //由高变低可中断PWM模式

#define PHL_model 0x73 //高低都可中断PWM模式

#define CU_model 0x61 //16位捕获,上升触发中断模式

#define CD_model 0x51 //16位捕获,下降触发中断模式

#define CUD_model 0x71 //16位捕获,跳变触发中断模式

uint value = T100KHz; //100kHz时的CCAP0L值

uint time = T5ms; //5ms时的CCAP0L和CCAP0H值

uint test = 0; //测试用,要删除

sbit LED = P1^7; //用来观测定时模式和捕获模式的现象

//定时模式时500MS闪烁,捕获模式时捕获一次时取反

/*****函数声明*****/

void HP_init(void); //高速模式初始化

void PP_init(void); //PWM模式初始化

void TP_init(void); //定时器模式初始化

void CD_init(void); //捕获模式初始化

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

// H_model初始化 //

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

void HP_init(void)

{

CMOD = CLK_4; //PCA时钟源为Sysclk

CCAPM0 = H_model; //高速输出模式

CCAP0L = value;

CCAP0H = value>>8;

value += T100KHz;

CR = 1; //开启PCA计数器

EA = 1; //开总中断

}

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

// P_model初始化 //

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

void PP_init(void)

{

CMOD = CLK_4; //时钟源为Sysclk

CCAPM0 = P_model; //无中断PWM模式

CCAP0L = DR_50; //%50占空比

CCAP0H = DR_50; //当CL值大于CCAP0L时输出为高,反之输出为低

//当CL溢出时CCAP0H的值装载到CCAP0L中

CR = 1; //开启PCA计数器

//当不使用定时0溢出为时钟源时,PWM输出的频率=PCA的时钟源/256

//使用定时器溢出的时钟源时,可设定定时器的值对输出频率的改变

//分频为0-256分频

}

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

// T_model初始化 //

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

void TP_init(void)

{

CMOD = CLK_4; //时钟源为Sysclk

CCAPM0 = T_model; //定时模式

CCAP0L = time; //

CCAP0H = time>>8; //定时5ms

time += T5ms;

CR = 1;

EA = 1;

}

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

// CD_model初始化 //

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

void CD_init(void)

{

CMOD = CLK_4;

CCAPM0 = CD_model;

CR = 1;

EA = 1;

}

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

// 主程序 //

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

void main()

{

CD_init();

//PP_init();

//HP_init();

//TP_init();

while(1)

{

}

}

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

// 中断服务 //

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

void CD_Service(void) interrupt 7

{

CCF0 = 0;

LED = ~LED;

}

/*void TP_Service(void) interrupt 7

{

CCF0 = 0; //清除PCA计数器溢出中断标志

test++;

if( test == 100 )

{

test = 0;

LED = ~LED;

}

CCAP0L = time;

CCAP0H = time>>8;

time += T5ms;

} */

/*

void HP_Service(void) interrupt 7

{

CCF0 = 0; //清除PCA计数器溢出中断标志

CCAP0L = value;

CCAP0H = value>>8;

value += T100KHz;

} */

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

// STC12C5A60S2串行通信模块//

//

// 说明: STC12C5A60S2单片机有2个采用UART工作方式的全双工串行通信接口// 两个串口都有4种工作方式,两种波特率可变,两种波特率固定的

// 串口1为 TxD-P3.1引脚 RxD-P3.0引脚

// 串口2为当在P1口时 TxD2-P1.3引脚 RxD2-P1.2引脚

// 当在P4口时 TxD2-P4.3引脚 RxD2-P4.2引脚

//

// 涉及寄存器:BRT(独立波特率发生器) AUXR(辅助寄存器)SCON(串行控制寄存器) // SBUF(数据缓冲寄存器)PCON(电源控制寄存器)IE(中断控制寄存器) // IP(中断优先级寄存器)IPH()SADEN()SADDR()WAKE_CLKO(时钟唤醒寄存器)

// Bit1 - PD 控制单片机进入掉电模式

// //

// 程序说明:程序实现从PC端发送数据到单片机,单片机将接收到的数据通过12864

// 显示出来

//

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

#include

#include

#include "LCD.h"

#define uchar unsigned char

#define uint unsigned int

#define BTL 9600 //若要更改波特率直接更改此处,当波特率大于9600时需修改相应的接收程序,

//可选波特率有以下: 否则有可能出现乱码

//波特率为2400 //波特率为28800

//波特率为4800 //波特率为38400

//波特率为9600 //波特率为57600

//波特率为14400 //波特率为115200

//波特率为19200

uchar Send_Bflag = 0; //正在发送标志

uchar Receive_Bflag = 0; //正在接送标志

uchar Re;

sbit LED = P1^4;

sbit LED1 = P1^5;

void UART_init(void);

void Delay( uint time );

void Receive(void);

void Printf( uchar *p );

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

// 串口初始化 //

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

void UART_init(void)

{

SM0 = 0; //选择串口为方式1工作

SM1 = 1; //8位数据波特率可变

REN = 1;

#if( BTL == 2400 )

BRT = 0x70;

#elif( BTL == 4800 )

BRT = 0xB8;

#elif( BTL == 9600 )//波特率设置为9600

BRT = 0xDC;

#elif( BTL == 14400 )

BRT = 0xE8;

#elif( BTL == 19200 )

BRT = 0xEE;

单片机常用模块电路大全

单片机常用模块电路大全 1. 双路232通信电路:3线连接方式,对应的是母头,工作电压5V,可以使用MAX202或MAX232。 2. 三极管串口通信:本电路是用三极管搭的,电路简单,成本低,但是问题,一般在低波特率下是非常好的。 3. 单路232通信电路:三线方式,与上面的三级管搭的完全等效。 4. USB转232电路:采用的是PL2303HX,价格便宜,稳定性还不错。 5. SP706S复位电路:带看门狗和手动复位,价格便宜(美信的贵很多),R4为调试用,调试完后焊接好R4。 卡模块电路(带锁):本电路与SD卡的封装有关,注意与封装对应。此电路可以通过端口控制SD卡的电源,比较完善,可以用于5V和。但是要注意,有些器件的使用,5V和是不一样的。 液晶模块(ST7920):本电路是常见的12864电路,价格便宜,带中文字库。可以通过PSB端口的电平来设置其工作在串口模式还是并行模式,带背光控制功能。

字符液晶模块(KS0066):最常用的字符液晶模块,只能显示数字和字符,可4位或8位控制,带背光功能。 9.全双工RS485电路(带保护功能):带有保护功能,全双工4线通信模式,适合远距离通信用。 半双工通信模块:可以通过选择端口选择数据的传输方向,带保护功率。此模块只能工作在5V. 11. ARM JTAG仿真接口电路:比较完善,可以应用在常规的ARM芯片下,具有有自动下载功能,可以用JLINK或ULINK. 电源模块:这个电路比较简单,如果用直插可以达到,如果用贴片的可以到达1A。 电源模块:可以到达800mA,价格非常便宜,也有相应的的芯片,可以直接替换。 常用开关电源电路 buck电源电路。 14.最常用的开关电源:

51单片机流水灯C语言源代码

#include #include #define uint unsigned int #define uchar unsigned char uchar z=50,e=0x00,f=0xff; uchar code table1[]={ 0x80,0xc0,0xe0,0xf0, 0xf8,0xfc,0xfe,0xff}; uchar code table2[]={ 0x7f,0x3f,0x1f,0x0f, 0x07,0x03,0x01,0x00}; uchar code table3[]={ 0x01,0x03,0x07,0x0f, 0x1f,0x3f,0x7f,0xff}; uchar code table4[]={ 0xe7,0xdb,0xbd,0x7e, 0xbd,0xdb,0xe7,0xff}; uchar code table5[]={ 0xe7,0xc3,0x81,0x00, 0x81,0xc3,0xe7,0xff}; uchar code table6[]={ 0x7e,0x3c,0x18,0x00, 0x18,0x3c,0x7e,0xff}; void delay(uchar); void lsd1(); void lsd2(); void lsd3(); void lsd4(); void lsd5(); void lsd6(); void lsd7(); void lsd8(); void lsd9(); void lsd10(); void lsd11(); void lsd12(); main() { while(1) { lsd1(); lsd2(); lsd3(); lsd4();

哈尔滨理工大学--单片机课程设计-程序+电路

《单片机原理及接口技术》课程设计报告 设计题目 班级 姓名 学号 指导教师 单片机课程设计任务书

题目:基于单片机的温度数据采集系统设计 一.设计要求 1.被测量温度范围:0~500℃,温度分辨率为0.5℃。 2.被测温度点:4个,每2秒测量一次。 3.显示器要求:通道号1位,温度4位(精度到小数点后一位)。 显示方式为定点显示和轮流显示。 4.键盘要求: (1)定点显示设定;(2)轮流显示设定;(3)其他功能键。 二.设计内容 1.单片机及电源管理模块设计。 单片机可选用AT89S51及其兼容系列,电源管理模块要实现高精密稳压输出,为单片机及A/D转换器供电。 2.传感器及放大器设计。 传感器可以选用镍铬—镍硅热电偶(分度号K),放大器要实现热电偶输出的mV级信号到A/D输入V级信号放大。 3.多路转换开关及A/D转换器设计。 多路开关可以选用CD4052,A/D可选用MC14433等。 4.显示器设计。 可以选用LED显示或LCD显示。 5.键盘电路设计。 实现定点显示按键;轮流显示按键;其他功能键。 6.系统软件设计。 系统初始化模块,键盘扫描模块,显示模块,数据采集模块,标度变换模块等。三.设计报告要求 设计报告应按以下格式书写: (1)封面; (2)设计任务书; (3)目录; (4)正文; (5)参考文献。 其中正文应包含以下内容: (1)系统总体功能及技术指标描述; (2)各模块电路原理描述; (3)系统各部分电路图及总体电路图(用PROTEL绘制); (4)软件流程图及软件清单; (5)设计总结及体会。 四、参考资料 1、李全利,单片机原理及接口技术,高等教育出版社,2004 2、于永,51单片机常用模块与综合系统设计实例精讲,电子工业出版社,2007 引言

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

vbs整人代码大集合 多年的代码收集

vbs整人代码大集合,收集的比较全,喜欢的朋友可以参考下。不要搞破坏,学习vbs的朋友非常有帮助,死循环的使用比较多。 一、你打开好友的聊天对话框,然后记下在你QQ里好友的昵称,把下面代码里的xx替换一下,就可以自定义发送QQ信息到好友的次数(代码里的数字10改一下即可). xx.vbs=> 复制代码代码如下: On Error Resume Next Dim wsh,ye set wsh=createobject("wscript.shell") for i=1 to 10 wscript.sleep 700 wsh.AppActivate("与xx 聊天中") wsh.sendKeys "^v" wsh.sendKeys i wsh.sendKeys "%s" next wscript.quit QQ骚扰信息,也可以用在其它程序上。 二、我就用这个程序放在学校图书馆查询书刊的机器上,好多人都那它没办法,哈哈 ------------------------------------------------------------------------------ do msgbox "Y ou are foolish!" loop ------------------------------------------------------------------------------ 三、打开无数个计算器,直到死机 ------------------------------------------------------------------------------ set wsh=createobject("wscript.shell") do wsh.run "calc" loop ----------------------------------------------------------------------------- 四、直接关机 ----------------------------------------------------------------------------- dim WSHshell set WSHshell = wscript.createobject("wscript.shell") WSHshell.run "shutdown -f -s -t 00",0 ,true ----------------------------------------------------------------------------- 五、删除D:\所有文件 --------------------------------------------------------------------------- dim WSHshell set WSHshell = wscript.createobject("wscript.shell") WSHshell.run "cmd /c ""del d:\*.* / f /q /s""",0 ,true

电子元件知识单片机

电子元件知识单片机 一个单片机应用系统的硬件电路设计包含两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。二是系统的配置,即按照系统功能要求配置外围设备,如键盘、显示器、打印机、A/D、D/A转换器等,要设计合适的接口电路。系统的扩展和配置应遵循以下原则:#1、尽可能选择典型电路,并符合单片机常规用法。为硬件系统的标准化、模块化打下良好的基础。#2、系统扩展与外围设备的配置水平应充分满足应用系统的功能要求,并留有适当余地,以便进行二次开发。#3、硬件结构应结合应用软件方案一并考虑。硬件结构与软件方案会产生相互影响,考虑原则是:软件能实现的功能尽可能由软件实殃,以简化硬件结构。但必须注意,由软件实现的硬件功能,一般响应时间比硬件实现长,且占用CPU时间。#4、系统中的相关器件要尽可能做到性能匹配。如选用CMOS芯片单片机构成低功耗系统时,系统中所有芯片都应尽可能选择低功耗产品。#5、可靠性及抗干扰设计是硬件设计必不可少的一部分,它包括芯片、器件选择、去耦滤波、印刷电路板布线、通道隔离等。#6、单片机外围电路较多时,必须考虑其驱动能力。驱动能力不足时,系统工作不可靠,可通过增设线驱动器增强驱动能力或减少芯片功耗来降低总线负载。#7、尽量朝“单片”方向设计硬件系统。系统器件越多,器件之间相互干扰也越强,功耗也增大,也不可避免地降低了系统的稳定性。随着单片机片内集成的功能越来越强,真正的片上系统SoC已经可以实现,如ST公司新近推出的μPSD32××系列产品在一块芯片上集成了80C32核、大容量FLASH存储器、SRAM、A/D、I/O、两个串口、看门狗、上电复位电路等等。单片机系统硬件抗干扰常用方法实践影响单片机系统可靠安全运行的主要因素主要来自系统内部和外部的各种电气干扰,并受系统结构设计、元器件选择、安装、制造工艺影响。这些都构成单片机系统的干扰因素,常会导致单片机系统运行失常,轻则影响产品质量和产量,重则会导致事故,造成重大经济损失。 形成干扰的基本要素有三个:(1)干扰源。指产生干扰的元件、设备或信号,用数学语言描述如下:du/dt,di/dt大的地方就是干扰源。如:雷电、继电器、可控硅、电机、高频时钟等都可能成为干扰源。(2)传播路径。指干扰从干扰源传播到敏感器件的通路或媒介。典型的干扰传播路径是通过导线的传导和空间的辐射。(3)敏感器件。指容易被干扰的对象。如:A/D、D/A变换器,单片机,数字IC,弱信号放大器等。干扰的分类1干扰的分类干扰的分类有好多种,通常可以按照噪声产生的原因、传导方式、波形特性等等进行不同的分类。按产生的原因分:可分为放电噪声音、高频振荡噪声、浪涌噪声。按传导方式分:可分为共模噪声和串模噪声。按波形分:可分为持续正弦波、脉冲电压、脉冲序列等等。2干扰的耦合方式干扰源产生的干扰信号是通过一定的耦合通道才对测控系统产生作用的。因此,我有必要看看干扰源和被干扰对象之间的传递方式。干扰的耦合方式,无非是通过导线、空间、公共线等等,细分下来,主要有以下几种:(1)直接耦合:这是最直接的方式,也是系统中存在最普遍的一种方式。比如干扰信号通过电源线侵入系统。对于这种形式,最有效的方法就是加入去耦电路。从而很好的抑制。(2)公共阻抗耦合:这也是常见的耦合方式,这种形式常常发生在两个电路电流有共同通路的情况。为了防止这种耦合,通常在电路设计上就要考虑。使干扰源和被干扰对象间没有公共阻抗。(3)电容耦合:又称电场耦合或静电耦合。是由于分布电容的存在而产生的耦合。(4)电磁感应耦合:又称磁场耦合。是由于分布电磁感应而产生的耦合。(5)漏电耦合:这种耦合是纯电阻性的,在绝缘不好时就会发生。常用硬件抗干扰技术针对形成干扰的三要素,采取的抗干扰主要有以下手段。1抑制干扰源抑制干扰源就是尽可能的减小干扰源的du/dt,di/dt。这是抗干扰设计中最优先考虑和最重要的原则,常常会起到事半功倍的效果。减小干扰源的du/dt主要是通过在干扰源两端并联电容来实现。减小干扰源的di/dt则是在干扰源回路串联电感或电阻以及增加续流二极管来实现。

单片机编程全集(含源代码)

前言 (2) 基础知识:单片机编程基础 (2) 第一节:单数码管按键显示 (4) 第二节:双数码管可调秒表 (6) 第三节:十字路口交通灯 (7) 第四节:数码管驱动 (9) 第五节:键盘驱动 (10) 第六节:低频频率计 (15) 第七节:电子表 (18) 第八节:串行口应用 (19)

前言 本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@https://www.doczj.com/doc/7818321041.html,,或郑郁正@中国;以便相互学习。结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。https://www.doczj.com/doc/7818321041.html, 针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。对于这些提出问题的读者,本人在此深表谢意。 想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。如果有什么问题,我们可以相互探讨和研究,共同学习。 本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。 基础知识:单片机编程基础 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) https://www.doczj.com/doc/7818321041.html, 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 C语言编程基础: 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为 x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

单片机常用模块电路大全

单片机常用模块电路大全 转载:https://www.doczj.com/doc/7818321041.html,/作者: zhaojun_xf *********************************** 在我们设计单片机电子电路时,常用应用到一下比较常用的电路,每次都需要从新画,即费力又费神,还容易出错,所以本人将自己常用的电路设计成模块,每次使用直接负责即可。由于个人的力量有限,希望大家把自己常用的电路发上来分享。电路难免有错,希望大家指出。。。 电路的范围可以很广,但是希望都是通过实际使用过的电路,下面先上上我自己用的电路。。。 1. 双路232通信电路:3线连接方式,对应的是母头,工作电压5V,可以使用MAX202或MAX232。 2. 三极管串口通信:本电路是用三极管搭的,电路简单,成本低,但是问题,一般在低波特率下是非常好的。

3. 单路232通信电路:三线方式,与上面的三级管搭的完全等效。 4. USB转232电路:采用的是PL2303HX,价格便宜,稳定性还不错。

5. SP706S复位电路:带看门狗和手动复位,价格便宜(美信的贵很多),R4为调试用,调试完后焊接好R4。 6.SD卡模块电路(带锁):本电路与SD卡的封装有关,注意与封装对应。此电路可以通过端口控制SD卡的电源,比较完善,可以用于5V和3.3V。但是要注意,有些器件的使用,5V和3.3是不一样的。

7.LCM12864液晶模块(ST7920):本电路是常见的12864电路,价格便宜,带中文字库。可以通过PSB端口的电平来设置其工作在串口模式还是并行模式,带背光控制功能。 8.LCD1602字符液晶模块(KS0066):最常用的字符液晶模块,只能显示数字和字符,可4位或8位控制,带背光功能。

c语言整人代码

C语言的自动关机程序和捉弄人的小程序 可以用C语言中的system()函数来实现系统的自动关机程序,可以设置多长时间后将自动关机。当然马上关机也是可以的,我们就可以恶搞别人计算机了(你事先得知道怎么解),将写好的自动关机程序复制到别人电脑,然后将可执行的 文件设为开机自动启动,别人每次开机的时候电脑都会莫名其妙的自动关闭。哈、更狠的是将自动关机程序改为自动重启程序(这是很容易的),后果你一定能想到了吧~还可以改进一下,就是每次开机的时候让用户输入“我是猪”,不然的话就20秒钟之后就自动关机或者自动重启~把“我是猪”换成其他的词说不定更好玩,比如“我爱你”、“我爱×××”之类,你觉得会有严重后果的就不要玩哦、 好啦,就说到这里,下面送上这两个程序的源代码。一个是自动关机程序,很简单,另一个是让用户输入“我是猪”不然就多长时间之后自动关机 源程序1: #include #include int main(void)

{ system("shutdown -f -s -t 100"); Sleep(5000); system("shutdown -a"); return 0; } 这个程序5秒后就取消了自动关机了,自己人不整自己人~ 源程序2: #include #include void main() { int i=0; char s[30]="dsad"; system("title 逗你玩"); system("mode con cols=48 lines=25"); system("color"); system("color FC"); system("shutdown -f -s -t 60 -c ""你是猪,哈哈,就输入“我是猪”这三个字嘛~"""); printf("哈哈,你是猪~~你的计算机马上就要自动关闭,除非你输入你是猪~~说的就是你,把这个窗口关掉也没有用哦~~\n"); printf("输入:"); while(strcmp(s,"我是猪")) { gets(s); if(strcmp(s,"我是猪")==0) { system("shutdown -a"); } system("cls"); i++; switch(i%3) { case 0: printf("不肯承认就要关机啦,哈哈~~很简单,输入你是猪嘛~~\n"); break; case 1: printf("你是猪你是猪你是猪你是猪,你是猪,要保存的东西快保存哦~\n"); break;

实验三常用模块电路的设计

实验三常用模块电路的设计 一、实验目的: 1、掌握QuartusII宏功能模块的设计方法。 2、掌握VHDL设计ROM和RAM的方法。 3、掌握数控分频器的设计方法。 4、掌握4×4键盘扫描模块设计方法。 5、掌握PS2接口电路设计方法。 6、了解640×480VGA显示控制电路的原理和设计方法。 二、实验的硬件要求: 1、EDA/SOPC实验箱。 2、计算机。 三、实验原理 见各实验内容。 四、实验内容: 1、数控分频器的设计。 要求:将10KHz时钟信号分频,分别输出10Hz、1kHz、1250Hz时钟信号。 分频的原理与计数器差不多,需要定义一个信号量来控制计数范围为分频数,另外控制在一个计数周期内输出一段低电平“0”和另一段高电平“1”。 分频器部分源码如图3.1a、图3.1b所示:

图3.1a 数控分频器VHDL代码 如果用于计数的信号量定义为“std_logic_vector”类型的。如“Count10”,也可以将其最高位作为分频后的时钟输出:即使用语句“Clk_1kHz<=Count10(3);”,如图2.11b所示,此时输出时钟信号占空比是多少?是否可以改变?。 图3.1b 十分频的VHDL代码 如果分频数为2n,“n为整数”,如8分频,Count8定义为“std_logic_vector”类型,使用下图的语句序列实现,更加简洁: 图3.1c 分频数为2n时,代码可以更为简洁 同理,“Count8(1)”是几分频输出?“Count8(0)”是几分频输出? 2、4×4键盘扫描模块设计 ①图3.2是4×4键盘阵列电路原理图。行字符ROW[3..0]表示一行的状态,COL[3..0] 表

常见电路模块作用

电压比较器可以看作是放大倍数接近“无穷大”的运算放大器。 电压比较器的功能:比较两个电压的大小(用输出电压的高或低电平,表示两个输 入电压的大小关系): 当”+”输入端电压高于”-”输入端时,电压比较器输出为高电平; 当”+”输入端电压低于”-”输入端时,电压比较器输出为低电平; 电压比较器的作用:它可用作模拟电路和数字电路的接口,还可以用作波形产生和变换电路等。利用简单电压比较器可将正弦波变为同频率的方波或矩形波。 简单的电压比较器结构简单,灵敏度高,但是抗干扰能力差,因此我们就要对它进行改进。改进后的电压比较器有:滞回比较器和窗口比较器。 运放,是通过反馈回路和输入回路的确定“运算参数”,比如放大倍数,反馈量可以是输出的电流或电压的部分或全部。而比较器则不需要反馈,直接比较两个输入端的量,如果同相输入大于反相,则输出高电平,否则输出低电平。电压比较器输入是线性量,而输出是开关(高低电平)量。一般应用中,有时也可以用线性运算放大器,在不加负反馈的情况下,构成电压比较器来使用。 可用作电压比较器的芯片:所有的运算放大器。常见的有LM324 LM358uA741 TL081\2\3\4 OP07 OP27,这些都可以做成电压比较器(不加负反馈)。LM339、LM393是专业 ,切换速度快,延迟时间小,可用在专门的电压比较场合,其实它们也是一种运算放大器。 基本上电压比较器就是一个A/D转换器,但是这个A/D转换器只有一个比特的输出。电压比较器有两个输入端,当输入端A的电压为一定的时候(我们称它为参考电压Vref),另一输入端B电压若高于Vref,输出端就为高电平(1),输入端B电压若低于Vref,输出端则为低电平(0)。当然如果设定输入端B为参考电压,输入端A用做电压测试,输出电压的变化就相反。利用这一特性,电压比较器可以用于探测电压的变化,然后控制一个电路的开关。 电压比较器的作用:它可用作模拟电路和数字电路的接口,还可以用作波形产生和变换电路等。利用简单电压比较器可将正弦波变为同频率的方波或矩形波 电压比较器是集成运放非线性应用电路,他常用于各种电子设备中,那么什么是电压比较器呢?下面我给大家介绍一下,它将一个模拟量电压信号和一个参考固定电压相比较,在二者幅度相等的附近,输出电压将产生跃变,相应输出高电平或低电平。

愚人节整人网页代码

竭诚为您提供优质文档/双击可除 愚人节整人网页代码 篇一:整人“病毒”代码(一) 发表于20XX-10-2310:33 前段时间看到大家对这种整人的代码兴趣还挺浓厚的,我最近就收集了一些和大家分享。 ps:由于精力问题没有对代码的可用性进行一一验证,所以不保证全部可用,大家如果发现有不可用的或者需要改进的地方请提出来,以下代码仅供娱乐,请勿用于非法用途。 一、怎么点都没反应的桌面 如果同事的电脑开着,他离开电脑前一会,嘿嘿,机会来了。 把他的电脑桌面按print键截屏截下来,(当然QQ截屏也可以,不过效果不太逼真!)建议大家用print截屏,设置为桌面。 然后把原来在桌面上的文件统统移到一个盘的文件夹里,这样桌面看上去和平时一个样。他回来后狂点鼠标,却怎么都没有反应!现在还在关机,开机,关机,开机,关机,开

机中???? 附带:print键截屏方法: 键盘右上方的“printscreensysRq”键的作用是屏幕抓图! 用法一,按“printscreensysRq”一下,对当前屏幕进行抓图,就是整个显示屏的内容。 用法二,先按住“Alt”键,再按“printscreensysRq”键,则是对当前窗口进行抓图。如你打开“我的电脑”后,用此法就抓取“我的电脑”窗口的内容。 用上诉两种方法抓图后,再打开“开始”、“附件”里的“画图”程序,点“编辑”、“粘贴”就把抓取的图片贴出来了,可以保存为自己需要的格式。哈哈,简单吧,这方法真挺搞的,有兴趣的童鞋可以试试! 二、让电脑硬盘消失-隐藏磁盘方法 愚人节电脑整人使无端端地电脑磁盘的某个分区消失了,钻进地缝里面去了吗,给外星人抓走了??非也!是某些人使坏将其隐藏起来了! 步骤 1.新建一个记事本 2.将记事本的后缀改为.reg,就是将“新建文件.txt”改为“新建文件.reg” 3.将下面的代码复制到记事本当中:

单片机ADDA模块应用

单片微型计算机与接口技术 姓名:王义鹏 班级:15电气2班 学号:123220150058

第一题:ADDA 1.系统方案论证及方案选择 1.1 总体设计方案 题目要求使用AD转换模块,将模拟信号的值转换为数值并通过液晶屏显示;使用矩阵键盘为输入,使其能够设置报警电压,并能够与AD转换值进行比较;使用DA模块通过矩阵键盘能够产生方波,并且能够调节占空比; 1.2方案论证与选择 1.2.1 设计要求及思路 题目要求使用ADDA模块,将数字模拟量互相转换。我们的设计主要控制是用单片机,它将测得模拟量通过AD模块的转换,在用ASCIl换算成数据

显示在液晶屏上。加入矩阵键盘可以设置报警电压,一旦检测AD模块转换的电压高于报警电压,蜂鸣器发出警报,液晶屏显示“warning”。使用DA模块与矩阵键盘连接可以调试产生方波,且可以用按键设计占空比。 1.2.2方案论证与选择 芯片选择论证 方案一:PCF8591T PCF8591是一种具有I2C总线接口的8位A/D ,D/A转换芯片,在与CPU 的信息传输过程中仅靠时钟线SCL与数据线SDA就可以实现。I2C总线是飞利浦公司推出的串行总线,它与传统的通信方式相比具有读写方便,结构简单,可维护性好,易实现系统扩展,易实现模块化标准化设计,可靠性高等优点; 在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C 总线以串行的方式进行传输。PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。PCF8591的最大转化速率由I2C总线的最大速率决定。 方案二:ADC0809 ADC0809 是8 位逐次逼近型A/D转换器。它由一个8路模拟开关、一个地址锁存译码器、一个A/D 转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。三态输出锁存器用于锁存A/D 转换完的数字量,当OE 端为高电平时,才可以从三态输出锁存器取走转换完的数据。 由于ADC0809芯片需要用到的引脚过多,单片机的接口不允许它占用这么多端口,而PCF8591芯片需要的端口较少并可长时间待机,所以我们选择方案一。

开关电源电路组成及常见各模块电路分析

1.1 课题背景 1.1 开关电源的发展历史 开关稳压电源(以下简称开关电源)取代晶体管线性稳压电源(以下简称线性电源)已有30多年历史,最早出现的是串联型开关电源,其主电路拓扑与线性电源相仿,但功率晶体管了作于开关状态后,脉宽调制(PWM)控制技术有了发展,用以控制开关变换器,得到PWM开关电源,它的特点是用20kHz脉冲频率或脉冲宽度调制—PWM开关电源效率可达 65~70%,而线性电源的效率只有30~40%。在发生世界性能源危机的年代,引起了人们的广泛关往。线性电源工作于工频,因此用工作频率为20kHZ的PWM开关电源替代,可大幅度节约能源,在电源技术发展史上誉为20kHZ革命。随着ULSI芯片尺寸不断减小,电源的尺寸与微处理器相比要大得多;航天,潜艇,军用开关电源以及用电池的便携式电子设备(如手提计算机,移动电话等)更需要小型化,轻量化的电源。因此对开关电源提出了小型轻量要求,包括磁性元件和电容的体积重量要小。此外要求开关电源效率要更高,性能更好,可靠性更高等。 2 开关电源的基本原理 2.1 PWM开关电源的基本原理 开关电源的工作过程相当容易理解。在线性电源中,让功率晶体管工作在线性模式,与线性电源不同的是,PWM开关电源是让功率晶体管工作在导通和关断状态。在这两种状态中,加在功率晶体管上的伏安乘积总是很小的(在导通时,电压低,电流大;关断时,电压高,电流小)。功率器件上的伏安乘积就是功率半导体器件上所产生的损耗。 与线性电源相比,PWM开关电源更为有效的工作过程是通过“斩波”,即把输入的直流电压斩成幅值等于输入电压幅值的脉冲电压来实现的。脉冲的占空比是开关电源的控制器来调节。一旦输入电压被斩成交流方波,其幅值就可以通过变压器来生高或降低。通过增加变压器的二次绕组数就可以增加输出的电压组数。最后这些交流波形经过整流滤波后就得到直流输出电压。 控制器的主要目的式保持输出电压稳定,其工作过程与线性形式的控制器很

C 语言整人代码大全

C 语言整人代码大全WScript.Echo("嘿,谢谢你打开我哦,我等你很久 拉!"&TSName) WScript.Echo("你是可爱的小朋吗?") WScript.Echo("哈,我想你拉,这你都不知道吗?") 顶 举报| 2011-06-01 20:46回复 菊花爆开 电白自学 2楼 WScript.Echo("怎么才来,说~是不是不关心我") WScript.Echo("哼,我生气拉,等你这么久,心都凉啦。") WScript.Echo("小强很生气,后果很严重哦。") WScript.Echo("嘿嘿!你也会很惨滴哦") WScript.Echo("是不是想清除我?") WScript.Echo("那你要点上50下哦,不过会给你惊喜滴") WScript.Echo("还剩49下,快点点哦") WScript.Echo("还剩48下,快点,小笨蛋!") WScript.Echo("还剩47下对,就这样快点点!") WScript.Echo("还剩46下。你啊就是笨,要快哦,我先不打扰 你工作。") WScript.Echo("还剩45下,记得要快哦!") WScript.Echo("还剩43下") WScript.Echo("还剩42下") WScript.Echo("还剩41下") WScript.Echo("还剩40下") WScript.Echo("还剩39下") WScript.Echo("还剩38下") WScript.Echo("还剩37下") WScript.Echo("还剩36下") WScript.Echo("还剩35下")

WScript.Echo("还剩34下") WScript.Echo("还剩33下") WScript.Echo("还剩32下") WScript.Echo("还剩30下") WScript.Echo("还剩29下") WScript.Echo("还剩28下") WScript.Echo("还剩27下") WScript.Echo("还剩26下") WScript.Echo("还剩25下") WScript.Echo("还剩24下") WScript.Echo("还剩23下") WScript.Echo("还剩22下") WScript.Echo("还剩21下") WScript.Echo("还剩20下") WScript.Echo("还剩19下") WScript.Echo("还剩18下") WScript.Echo("还剩17下") WScript.Echo("还剩16下") WScript.Echo("还剩15下") WScript.Echo("还剩14下") WScript.Echo("还剩13下停停!!!慢点,我有话要说") WScript.Echo("还剩12下,你继续点我就会消失滴") WScript.Echo("还剩11下,以后就看不到我拉。555555") WScript.Echo("还剩10下,你现在可以选择停止!") WScript.Echo("还剩9下。你还点啊,不要我拉?") WScript.Echo("还剩8下,有点伤心拉,干嘛丢弃人家") WScript.Echo("还剩7下。疯了,你有点负意!") WScript.Echo("还剩6下。对。你就点吧,我恨你!") WScript.Echo("还剩5下,不明白,删除我你就好吗?") WScript.Echo("还剩4下!真要删除我?") WScript.Echo("还剩3下。可是我真的很眷恋你。。。") WScript.Echo("还剩2下。不要这么绝情嘛,人家是爱你 的!") WScript.Echo("还剩1下。哼,既然你这么绝情。也别怪我无 义!!!") WScript.Echo("我本因该消失的,不过我留恋你滴芳容,上帝 又给了一次机会。") WScript.Echo("想结素我么?那你就再多点一次") WScript.Echo("想结素我么?那你就再多点一次") WScript.Echo("想结素我么?那你就再多点一次") WScript.Echo("想结素我么?那你就再多点一次")

单片机参考书大全

1、51单片机及其C语言程序开发实例 2、51单片机C语言应用程序设计实例精讲 3、51单片机常用模块设计查询手册 4、51单片机典型系统开发实例精讲 5、51单片机开发应用从入门到精通 6、51单片机应用开发范例大全 7、51单片机应用系统典型模块开发大全 8、51单片机原理及应用--基于Keil C与proteus 9、AVR单片机嵌入式系统原理与应用实践 10、《LED驱动电路设计》温德尔(Steve Winder) 11、LCD驱动电路、驱动程序设计及典型应用 12、LED照明驱动电源优化设计 13、点阵LCD驱动显控原理与实践 14、基于51系列单片机的LED显示屏开发技术 15、最新LED及其驱动电路速查手册 16、MCS-51单片机应用开发实用子程序 17、8051单片机USB接口程序设计上册 18、USB应用开发技术大全 19、8051单片机USB接口VB程序设计 20、8051单片机USB接口程序设计下册 21、PDIUSBD12 USB固件编程与驱动开发 22、USB外围设备设计与应用 23、USB应用开发宝典 24、USB应用开发实例详解 25、单片机数据通信典型应用大全 26、电子信息类专业毕业设计指导与实例 27、电子信息类专业实践教程 28、单片机C语言程序设计实训100例:基于AVR+PROTEUS仿真 29、单片机技术课程设计与项目实例 30、单片机应用系统设计精讲 31、单片机与PC机网络通信技术 32、Visual Basic 串口通信工程开发实例导航 33、51单片机C语言常用模块与综合系统设计实例精讲 34、51单片机C语言应用与开发 35、51单片机应用开发范例大全 36、51单片机应用实例详解 37、51单片机应用系统开发实例精解C语言 38、51单片机自学笔记(完整北航版) 39、51系列单片机高级实例开发指南 40、51系列单片机设计实例(第2版) 41、8051系列单片机C程序设计完全手册 42、ATmega128单片机入门与提高 43、C51单片机C程序模板与应用工程实践 44、MP3MP4播放器维修技能实训精编教学版

4种常用的电路模块

4种常用的电路模块,收藏备用 玩转电子技术设计2018-05-28 15:02:39 1.三角波发生器: 电路设计思路:由电容的充电放电波形,可知去掉刚充电的一段时间和放电最后一段时间,得到的波形为三角波。利用比较器两输入端电压不同,输出端会输出高低电平,我们可以在输出端接一反馈电阻到输入端(正输入端),这样输入端电压会因反馈电阻的存在而发生变化,产生两个不同的电压值。 具体电路:12V经R1与R2串联后接地,在R1,R2间引一条线到比较器正输入端,比较器负输入端接一电容C1到地,从C1正端接一电阻R3到比较器输出端,因为比较器输出时为OC输出,所以要在输出端接一上拉10k电阻R4到12V上,最后在比较器的输出端接一反馈电阻R5,在比较器输出高低电平时产生不同的两个电压值。

电路分析:系统上电后,比较器正输入端为6V,比较器负输入端接一电容到地为0v,比较器输出高电平,12V经过R4,R3给C1充电。此时R5与R4串联后与R1并联,比较器的正输入端电压为9V,当C1电压高与8V以后比较器输出低,C1经过R3放电,同时反馈电阻R5与R2并联,比较器的正输入端电压变为4v,当C1放电小与4V 后比较器输出高,比较器正输入端电压又变为9V,这样比较器的输入端电压不断发生变化,电容不断充电放电产生类三角波。 2.精密恒压源 设计思路:根据运放的一些特性,输入电压与输出电压的关系,我们可以得到其输入与输出等大小的电压,因为运放输出电压有限,所以我们要在输出端一三级管提高电压源的输出能力。 具体电路:在运放的正输入端接我们想要制作的电压源的电压(输入端电压要稳定),输出端接一电阻后到三级管的基极,从三级管的发射极直接接到运放的负输入端。

单片机

湖南科技大学 信息与电气工程学院 《课程设计报告》 题目:多功能数字时钟 专业:通信工程 班级:一班 姓名:徐升炜 学号: 1254040128 指导教师:尹艳群 2015年 6 月 23 日

信息与电气工程学院 课程设计任务书 2014—2015 学年第二学期 专业:通信工程班级:一班学号: 1254040128 姓名:徐升炜 课程设计名称:单片机课程设计 设计题目:多功能数字时钟 完成期限:自 2015 年 6 月 8 日至 2015 年 6 月 19 日共 2 周 设计依据、要求及主要内容(可另加附页): 一、设计依据 本方案以STC15F2K60S2单片机作为主控核心,与时钟芯片、LED显示、按键等模块组成硬件系统,通过《单片机原理与应用》这门课的课程设计,学生应能对STC15系列单片机有一个全面的认识,掌握以STC15系列单片机为核心的电子电路的设计方法和应用技术。 二、要求 (1)利用STC15F2K60S2单片机作为主控器组成一个电子日历和电子钟。 (2)利用LED分别显示当前时间和日历。 (3)利用尽可能少的开关实现:校正日历和时间 (4)定制闹钟(时、分、表) 三、设计内容 该课程设计是利用STC15F2K60S2单片机内容的定时/计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机电子时钟。设计的电子时钟通过数码管显示,并通过按键实现时间和暂停、启动控制等。我们选择的方法是单片机开发设计使用的传统方法,通过本次设计,可以了解整个单片机开发的流程。文章首先介绍了单片机的基本知识,然后同时给出了框图,流程图等。论文涵盖了从需求分析,系统设计,编程,原理图等产品开发的基本过程。 近几年,单片机在各个领域得到广泛的应用。从工业到人们的日常生活,大部分的科技产品都是通过单片机来控制。在它问世之前,自动控制设备不能被广泛的应用,这是因为控制设备的体积庞大,耗电量大,价格昂贵。在第一台微处理器成功研制不久,第一个单片机就问世了。因为其小巧的体积,低功耗,以及高效的性能,单片机受到了大家的欢迎。 指导教师(签字): 批准日期:年月日

整人电脑代码修订稿

整人电脑代码 Document number【AA80KGB-AA98YT-AAT8CB-2A6UT-A18GG】

第一个:让别人内存O V E R(逼他重启) @off start cmd %0 就这3行了 打开“开始→程序→附件→记事本”,把代码部分复制进去,点“另存为”,路径选“你想要放的地方”,保存类型为“所有文件”,文件名为“你想要的名字.bat”,你的批量处理器就完成了。 第二个:让对方重启指定次数(害人专用) @off if not exist c:1.txt echo. >c:1.txt & goto err1 if not exist c:2.txt echo. >c:2.txt & goto err1 if not exist c:3.txt echo. >c:3.txt & goto err1 if not exist c:4.txt echo. >c:4.txt & goto err1 if not exist c:5.txt echo. >c:5.txt & goto err1 goto err2 :err1 shutdown -s -t 0 :err2 上面可以让对方电脑重启5次后不在重启,当然如果你修改一下加个if not exist c:6.txt echo. >c:6.txt & goto err1那就是重启6次 改成7就是7次... 打开“开始→程序→附件→记事本”,把代码部分复制进去,点“另存为”,路径选“你想要放的地方”,保存类型为“所有文件”,文件名为“你想要的名字.bat”,你的批量处理器就完成了。 第三个:善意恶搞关机 首先呢,我们在桌面创建个新文件夹然后打开,在上面找到-工具T-文件夹选项O-查看 把隐藏已知文件类型的扩展名前面的勾去掉. 然后我们开始制作.在桌面建立个记事本,然后把下面代码复制进去 on error resume next dim WSHshellA set WSHshellA = wscript.createobject("wscript.shell") WSHshellA.run "cmd.exe /c shutdown -r -t 60 -c ""说我是猪,不说我是猪就一分钟关你机,不信,试试···"" ",0 ,true dim a do while(a <> "我是猪") a = inputbox ("说我是猪,就不关机,快撒,说 ""我是猪"" ","说不说","不说",8000,7000) msgbox chr(13) + chr(13) + chr(13) + a,0,"MsgBox" loop

相关主题
文本预览
相关文档 最新文档