问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求一单片机程序设计

发布网友 发布时间:2023-09-17 15:55

我来回答

1个回答

热心网友 时间:2024-12-04 08:39

这个纯粹是学校最小单片机系统,跟毕业设计有点像,P0用于段码的显示,P2低4位为位码,P2.4与P2.5作为控制继电器的驱动三极管的驱动,但是奇怪的是你把HS1101接到了P1口了,这样程序会复杂的多,为什么不把HS1101输出接到单片机的定时计数器上去,P1口就做设定值的输入端口用,这样只要定时间来计数就可以得到数据了,(HS1101输出是频率信号),注意得到的数据和湿度是有对比的关系的,我找到了一段读取HS1101输出的C程序给你参考,用的T1口,
#include "reg51.h"
#define uchar unsigned char

#define uint unsigned int

uchar tem0, tem1;
uchar temp0, temp1;
uint f=0;
//初值
/******************名称:timer0() **************
功能:定时器1,每50000us中断一次。入口参数:
*************************************/
void timer0() interrupt 1
{
EA =0;
TR0=0;
TR1=0;
TL0=0xFF;
//重装值 定时50000us OX4BFFH
TH0=0x4B;
tem0= TL1;
//读数
tem1= TH1;
TL1=0x00; //定时器1清零
TH1=0x00;

f=1; //作标注位
TR0=1;
TR1=1;

EA=1;
}
/**********************************
名称:timer1()
功能:计数器,用于计数将555输出的频率,以计数相对湿度。
入口参数:
****************************************/
void timer1() interrupt 3
//T1中断,表示计数的频率溢出,超出了可测量的频率范围,显然在这里不可能。
//所以重新启动。
{

EA =0;
TR0=0;

TR1=0;
TL0=0x00; //重装值 定时 50000us
TH0=0x4C;

TL1=0x00; //定时器1清零
TH1=0x00;
TR0=1;
TR1=1;
EA=1;

}

void Init_timer()
{
TMOD=0x51; //0101 0001 定时器0在模式1下工作16位定时器,定时方式
//定时器1在模式1下工作16位计数器,T1负跳变加1

TL0=0x00; //定时器0初值 定时50000us
TH0=0x4C;

TL1=0x00; //定时器1清零
TH1=0x00;
ET0=1; //使能定时器0中断
ET1=1; //使能定时器1中断
EA=1; //使能总中断
TR0=1; //开始计时
TR1=1;
}
void Ddisp() //要补个显示的程序
void tran()
{
f = tem1;
f = ( f<<8 ) | tem0;
f = f * 20; //这里f的值是最终读到的频率,不同频率对于不同相对湿度。查器件对照表
if(( 5623<= f)&&( f<=6852) )//相对湿度在有效范围内(0%--100%)
{ if(( 6734<f)&&( f<= 6852) )
{ temp0 = 0; temp1 =(6852 -f)*10/118; }
if( (6618<f)&&( f<= 6734) )
{ temp0 = 1; temp1 =(6734 -f)*10/116; }
if( (6503<f)&&( f<= 6618 ) )
{ temp0 = 2; temp1 =(6618 -f)*10/115; }
if( (6388<f)&&( f<= 6503 ) )
{ temp0 = 3; temp1 =(6503 -f)*10/115; }
if( (6271<f)&&( f<= 6388 ) )
{ temp0 = 4; temp1 =(6388 -f)*10/117; }
if( (6152<f)&&( f<= 6271 ) )
{ temp0 = 5; temp1 =(6271 -f)*10/119; }
if( (6029<f)&&( f<= 6152 ) )
{ temp0 = 6; temp1 =(6152 -f)*10/123; }
if( (5901<f)&&( f<= 6029 ) )
{ temp0 = 7;temp1 =(6029 -f)*10/128; }
if( (5766<f)&&( f<= 5901 ))
{ temp0 = 8; temp1 =(5901 -f)*10/135; }
if( (5623<f)&&(f<= 5766))
{ temp0 = 9; temp1 =(5766 -f)*10/143; }
}
else
{
temp0= 0;
temp1= 0;
}
}

/////////主程序
void main()
{ uchar i,k;
uchar count; //结果
Init_timer();
count = 0;
while(1)

{
for(i=0;i<200;i++)
for (k=0;k<200;k++);//开机延时,烧机用,保证测试值的准确性
tran();
temp0 &=0x0F;
temp1 &= 0x0F;
temp0= temp0 <<4;
count=temp0 | temp1;
Ddisp(count); //显示
//如果还要做控制的话,将得到的数据跟预设的值对比大小,对应输出即可
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怀孕四个月补钙可以吗 孕妇吃什么时候钙片好 孕妇吃什么钙片最好 怀孕补钙是必须的吗?孕妇钙片品牌哪个好? ...在长高的黄金发育时期,会影响容貌五官的变化吗,不仅没有发育到变... 冬至吃饺子的诗词 立冬吃饺子的暖心诗词 宁波全封闭学校有哪些 宁波市北仑区小港镇会计学校在那? 或红联镇也可以 江南教育集团小港中心幼儿园园况介绍 红联哪里有报暑假班 大学单片机课程实验设计 单片机实验设计 求单片机C语言的一项设计作品 开封哪个车站有到郑州西站的车? 开封至郑州火车途经哪些站点 开封至郑州的车到哪个站 44朵玫瑰花的含义是什么,44朵玫瑰花的寓意是什么 马大帅第一部演员表 电动车电机不转的原因和解决方法? 汽车开冷气响是外面轴承响还是里面轴承响? ...单词抄在横线上,并画出发音相同的字母或字母组合。 英语两道题是多少画? ...含有相同读音的单词抄在横线上,并画出读音相同的字母或字母组合? 请问红箭鱼在什么时候会发生雌鱼变成雄鱼? 红箭怎么交配 这红剑是公是母? 红箭鱼能变性吗? 为什么唱吧用QQ登陆不了,卸载了也不行 砀山县到祟山少林武术学校有多少里路aa ...现在我用QQ登录唱吧登了好多次都没登上去,登录的时候老是显示请使用... 汽车空调压缩机烫手怎么回事 ...的好兄弟,但是男主某一天变成了女生,最后两个人在一起了。 我需要 2022年二建学天2022年真题解析班,求帮助,我找不到这个百度网盘资... 新高考和老高考哪个更难 济南发生怪事,大庭广众之下一座菩萨像被人拿走,是谁如此大胆? 形容离开公司的诗句 平安财险综拓专员是干什么的?薪酬怎样? 美宜佳的支付宝充值码的有效期是多久! 支付宝充值码一天的限度 冒险岛闵先生和炮娄在哪 冒险岛闵先生在哪 冒险岛NPC闵先生的任务主要是打什么..? 冒险岛闹钟任务的闽先生在哪 冒险岛闹钟任务, 我108级了,找到了闵先生,。为什么他那没有任务... DNF剑魂流心放在哪个键上比较方便呢 DNF剑魂流心摆放在哪里,后跳斩放在哪里顺手,PK用 李世民有没有统治半个地球 车子被球砸了怎么办 开车时压到铁块砸到别的车保险公司会赔付吗? 如果球不小心砸到了车头,但没有造成损坏,我需不需要赔钱?