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; ///按钮连续三次使用 加的数量越大 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]={' ',' ',' ',' ','.',' ',' ',' ',' ',' ',}; unsignd 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++);
}