【电路方案】基于单片机温控电风扇智能调速器设计/单片机出租车打表计价器系统设计/51单片机篮球积分器仿真系统/51单片机超声波模块测距/单片机PID算法的温度控制调节器/单片机炉温温度恒温控制系统设计
基于单片机温控电风扇智能调速器的设计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