淘先锋技术网

首页 1 2 3 4 5 6 7

基于单片机温控电风扇智能调速器的设计749

本设计为一种温控风扇系统,具有灵敏的温度感测和显示功能,系统STC89C52单片机作为控制平台对风扇转速进行控制。可由用户设置高、低温度值,测得温度值在高低温度之间时打开风扇弱风档,当温度升高超过所设定的温度时自动切换到大风档,当温度小于所设定的温度时自动关闭风扇,控制状态随外界温度而定。所设高低温值保存在温度传感器DS18B20内部E2ROM中,掉电后仍然能保存上次设定值,性能稳定,控制准确。

#include <reg52.h>	         //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535

//数码管段选定义      0     1    2    3    4    5	6	 7	  8	   9	
uchar code smg_du[]={0x28,0xee,0x42,0x72,0xe5,0xa8,0x41,0x77,0x20,0xa0,
				  	 0x60,0x25,0x39,0x26,0x31,0x71,0xff};	 //断码
//数码管位选定义
uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};
uchar dis_smg[4] = {0};	
uchar smg_i = 3;    //显示数码管的个位数
sbit dq   = P2^4;	//18b20 IO口的定义

bit flag_lj_en;		 //按键连加使能
bit flag_lj_3_en;	 //按键连3次连加后使能  加的数就越大了 
uchar key_time,key_value;      //用做连加的中间变量
bit key_500ms  ;
sbit pwm = P2^3;  
uchar f_pwm_l ;	  //

uint temperature ;  //
bit flag_300ms ;
uchar menu_1;       //菜单设计的变量
uint t_high = 300,t_low = 100;	   //温度上下限值 

 

748基于单片机出租车打表计价器系统设计

设计思路:通过单片机主控,控制六位数码管进行显示,24c08芯片实现断电存储,初始化时读写24c08芯片,按键电路可以实现数据控制。

f=05;

u=12;//时
v=00;//分
w=00;//秒
//jiage=d*e; //金额
/24C08 读写驱动程序
sbit scl=P3^4; // 24c08 SCL
sbit sda=P3^5; // 24c08 SDA
void delay1(unsigned char x)
{ unsigned int i;
for(i=0;i<x;i++);
;}
void flash()
{ ; ; }
void x24c08_init() //24c08 初始化子程序
{scl=1; flash(); sda=1;                     flash();}
void start() //启动(I方C)总线
{sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();}
void stop() //停止(I方C)总线
{sda=0; flash(); scl=1; flash(); sda=1; flash();}
void writex(unsigned char j) //写一个字节
{ unsigned char i,temp;
temp=j;
for (i=0;i<8;i++)
{temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}
scl=0; flash(); sda=1; flash();
}
unsigned char readx() //读一个字节
{
unsigned char i,j,k=0;
scl=0; flash(); sda=1;
for (i=0;i<8;i++)

583基于51单片机篮球积分器仿真系统(完善)

1.2.1 设计内容

给A、B两队分别设置加分按钮,各按钮按下分别实现给A、B队加1~9分。
给A、B两队分别设置减分按钮,各按钮按下分别实现给A、B队减1~9分。
(3)设置一个复位按钮,按下实现A、B队总分回到初试分及显示

(4)预置分通过A,B两队加分按钮实现。

1.2.2 设计要求
方案合理、正确,系统稳定、可靠。
软件设计要求尽可能精练、简短和运行可靠。
硬件电路要求简单明了,以节约成本


#define delay_led delay(8);          //延时
uint time;                           //比赛时间
uchar t,i;
uchar score_A;                       //A方分数
uchar score_B;                       //B方分数
uchar exchangeing;                   //交换比分时的临时变量
bit alarm_enable;                  //报警使能标志
uchar code table[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99,0x92, 0x82, 0xf8, 0x80, 0x90};  //共阳极数码管
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};			          	 //数码管扫描
sbit led=P3^7;                       //报警灯控制端口
sbit alarm_sound=P3^6;               //报警声音控制端口
sbit A_plus1=P1^0;                   //A方比分加1按钮
sbit A_minus1=P1^3;                  //        减1按钮
sbit B_plus1=P1^4;                   //B方比分加1按钮
sbit B_minus1=P1^7;                  //        减1按钮
sbit minutes_plus=P3^0;				 //分钟加按钮
sbit minutes_minus=P3^1;             //分钟减按钮     
sbit seconds_plus=P3^2;				 //秒钟加按钮
sbit seconds_minus=P3^3;             //秒钟减按钮
sbit Pause=P3^4;                     //计时开始/暂停按钮
sbit exchange=P3^5; 				 //换分按钮
sbit A_plus2=P1^1;					 //A加2
sbit A_plus3=P1^2;					 //A加3
sbit B_plus2=P1^5;            	     //B加2
sbit B_plus3=P1^6;			    	 //B加3
//*****************************************************
//**延时函数:void delay(uchar y)
//***************************************************
void delay(uchar y)
点击并拖拽以移动

 593​​基于51单片机超声波模块测距系仿真系统

功能说明:protuse里面本身是没有超声波模块的,而且网上这方面的资料很少,为了方便大家学习超声波模块。将我们以前建的模型分享出来。

1.超声波测距并1602显示

2.ds18b20温度检测并显示

3.按键调整报警距离。

sbit k1=P3^5;
sbit k2=P3^6;
sbit csb=P2^5;
sbit csbint=P3^2;
sbit bg=P2^6;
sbit fmq=P3^3;

unsigned char aa[]={' ',' ','D','i','s','t','a','n','c','e',':'};	   //Distance

unsigned char bb[11]={' ',' ',' ',' ','.',' ',' ',' ',' ',' ',};	
unsigned char cc[]={'A','.','A','A','m'};
unsigned char zf,a1,a2,a3,xs,e,n,m,z;	 //zf 温度正负标志位;a1,a2,a3,按键设定程序中定值的米、分米、厘米临时存储变量
                                             //xs,e 用于按键程序中设定位闪动显示的变量;flag,未用,n,是背光控制标志位变量;m,z;
unsigned int dz,k,s,j,bgz,k;
int temp;
float temperature,csbc,wdz;
bit wh;

main()
{
	TH0=0;
	TL0=0;
	TMOD=0X11;	//T1,T0为16位定时器
	EA=0;
	bg=0;
	n=0;
	m=0;
	z=0;
 	init();
	Init_DS18B20();
    dz=80;
	bb[6]=0xdf;
	bb[7]=0x43;
	e=4;
	cc[0]=dz/100+'0';
点击并拖拽以移动

  

005 基于单片机PID算法的温度控制调节器控制设计

设计思路:

改进PID算法的温度调节器设计,采用单片机为控制器,研究热电阻测温电路,控制量输出电路和温度控制PID算法。

功能实现:

1.采用市电供电。

2.采用单片机。

3.LED数码管显示。

4.4*4键盘输入。

5.热电阻测温0-150℃。

6. 工艺参数断电可保持,AT24C02存储。

7. 电流输出4-20mA,电压输出0-5V。

8.有超偏差报警功能。

9.增量式PID算法。

  

  

#include "Interrupt.h"			  //中断头文件
#include "24C02.h"				  //存储器
#include "delay.h"				  //延时函数
#include "PID.h"				  //改进PID算法
#include "DISPLAY.h"              //数码管显示
sbit Change=P3^6;				  //切换显示按键
sbit Warning=P3^3;
unsigned char key=16,ShowPage=0;
int PID_Data;                           //PID算法输出的计算值
unsigned int LTC1655_WritData=0;	  	//给DA的值
extern PID sPID; 
unsigned int LT1860_ReadData=0;
float LTC1860_Voltage=0;
float RealTemp=0;
float LTC1655_Voltage;       //DA输出电压
void ParaInit(void);         //从存储器中读取参数值

void main(void)
{
	IIC_Init();					    //IIC初始化  24C02初始化
	Timer_Init();				    //定时器1初始化
	Timer_EN();						//打开定时器1中断
	Glob_Interrupt_EN();			//打开全局中断允许
	IncPIDInit();					//改进PID初始化
	ParaInit();						//开机读取上次设定的PID的参数和设定的温度
	Warning=0;

	while(1)
	{
		
		LT1860_ReadData=LTV1860_GetData();	       //读取AD的值
		LTC1860_Voltage=5.0*LT1860_ReadData/4096;  //读到的值转换成电压
		RealTemp=(LTC1860_Voltage+10)/(40-LTC1860_Voltage)*1039-272.72+0.5;	 //电压转换成温度
		if(RealTemp<109) 				  //软件补偿  消除误差  
			RealTemp-=3;
		else if(RealTemp<149) 
			RealTemp-=2;
		else 
			RealTemp-=1;	 


		if((int)RealTemp>150||(int)RealTemp<0) 	 //报警
			Warning=1;
		else 
			Warning=0;

		PID_Data=IncPIDCalc(RealTemp);   //PID算法
		LTC1655_WritData=PID_Data+32767; 	  
		LTC1655_WritWord(LTC1655_WritData);	  //读到的值送到DA

		LTC1655_Voltage=5.0*LTC1655_WritData/65535;
 

590基于单片机炉温温度恒温控制系统设计

设计思路:

测温,温度可设定,继电器电路,数码管显示。此系统用于控温,当设定温度高于实际温度时,继电器吸合加热单元加热,当实际温度大于设定温度时,继电器释放。

#define uchar unsigned char
#define uint   unsigned int
#define DATAPORT P0                    
sbit RED_ALARM=P1^0;
sbit WRITE_ALARM=P1^1;
sbit GREEN_ALARM=P1^2;          		 //绿色指示灯
sbit BLUE_ALARM=P1^3;
sbit P1_4=P1^4;                		 //时钟调整
sbit P1_5=P1^5;                 		 //时钟加
sbit P1_6=P1^6;                  	 //时钟减
sbit DQ = P1^7;   
sbit   L1=P2^3;
sbit   L2=P2^2;
sbit   L3=P2^1;
sbit   L4=P2^0;            		 //定义ds18b20通信端口 
sbit  sda=P2^4;                       //IO口定义
sbit  scl=P2^5;              			 //LCD使能信号
sbit ad_busy=P3^2;              		 //adc中断方式接口
sbit  OUT=P3^7;
sbit anjian=P2^6;//
sbit  RELAY=P2^7;//

 /******延时程序*******/ 

 void delay2(unsigned int m)  

  {  
unsigned int i,j;  
for(i=m;i>0;i--)  
for(j=60;j>0;j--);  
	}  



uchar ad_data;                  		//ad采样值存储					
uchar seconde;                	//定义并初始化时钟变量
uchar minite;
uchar hour;
uchar mstcnt=0;
uchar temp1,temp2,temp,xs;        		//温度显示变量
uchar t,set;
uchar K;
bit ON_OFF=0;
bit outflag;
bit write=0;

void init_timer0(void);   //定时器初始化
void keyscan(void );      //键盘扫描子程序
void set_adj(void);
void inc_key(void);
void dec_key(void);
void delay_18B20(unsigned int i);//
void Init_DS18B20(void) ;
uchar ReadOneChar(void);
void WriteOneChar(unsigned char dat);
void ReadTemperature(void);
void ad0809(void);
void playalarm(void); 
void display();
void DelayMs(uint ms)
  {
   uchar t;
   while(ms--)for(t=0;t<8;t++);
  }

  


文章转自电设屋,资料百度网盘下载地址 https://www.aiesst.cn/share.html