蓝桥杯笔记

目录

1、必写内容

2、SMG显示(温度保留一位小数点)

3、温度模块

4、ADC模块

5、串口设置

6、定时器

7、继电器,蜂鸣器设置

7、AT14C02存储

8、N555频率

9、DS1302时间模块

10、超声波模块


1、必写内容

根据小蜜蜂老师代码写的

#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;
//0-9
u8 code SMG_DM[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void CH138(u8 ch)
{
	switch(ch)
	{
		case 4: P2=P2&0x1f|0x80; break;
		case 5: P2=P2&0x1f|0xa0; break;
		case 6: P2=P2&0x1f|0xc0; break;
		case 7: P2=P2&0x1f|0xe0; break;
		case 0: P2=P2&0x1f;
	}
}
void Delay(u16 t)
{
	while(t--);
}
void Display_bit(u8 pos,u8 dat)
{
	CH138(7);P0=0xff;
	CH138(6);P0=0x01<<pos;
	CH138(7);P0=SMG_DM[dat];
	Delay(500);
}
void Display_bit_N(u8 pos,u8 dat)
{
	CH138(7);P0=0xff;
	CH138(6);P0=0x01<<pos;
	CH138(7);P0=SMG_DM[dat]+0x80;
	Delay(500);
}

void System()
{
	CH138(4);P0=0xff;
	CH138(5);P0=0x00;
	CH138(0);
}

void main()
{
	System();
	while(1)
	{
		
	}
}
	

2、SMG显示(温度保留一位小数点)

void Display_wd()
{
	Display_bit(0,10);
	Display_bit(1,1);
	Display_bit(5,wd/100);
	Display_bit_N(6,wd/10%10);
	Display_bit(7,wd%10);
	CH138(7);P0=0xff;
	CH138(0);
}

最后两行消隐必写;

数码管显示其他的同理;

3、温度模块

onewire.c文件中要添加

//单总线延时函数
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
	t=t*12;//加这一段
	while(t--);
}

main.c中

float Read_WD()
{
	u8 low,high;
	u16 temp;
	float val;
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	low=Read_DS18B20();
	high=Read_DS18B20();
	temp=high&0x0f;
	temp=temp<<8;
	temp=temp|low;
	val=temp*0.0625;
	return val;
}

main()函数中加

wd=(u16)(Read_WD()*10);

保留一位小数乘10;保留两位小数乘100;

4、ADC模块

u8 ADC_out3()
{
	u8 i,temp=0;
	for(i=0;i<2;i++)
	{
		I2CStart();
		I2CSendByte(0x90);
		I2CWaitAck();
		I2CSendByte(0x03);
		I2CWaitAck();
		I2CStop();
		I2CStart();
		I2CSendByte(0x91);
		I2CWaitAck();
		temp=I2CReceiveByte();
		I2CSendAck(1);
		I2CStop();
	}
	return temp;
}

输出加上

dy=(u16)((ADC_out3()*5.0/255)*100);

4.5 DAC输出电压

IIC_Start();//IIC总线起始信号
IIC_SendByte(0x90);//发送PCF8591的写设备地址
IIC_WaitAck();//等待从机应答
IIC_SendByte(0x40);//发送控制字节,选择DA模式
IIC_WaitAck();//等待从机应答
IIC_SendByte(temp);//发送0-255
IIC_WaitAck();//等待从机应答
IIC_Stop();//IIC总线起始信号

5、串口设置

加上EA=1;ES=1;

void UartInit(void)		//9600bps@12.000MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设定定时器1为16位自动重装方式
	TL1 = 0xE6;		//设定定时初值
	TH1 = 0xFF;		//设定定时初值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}
void SendByte(u8 dat)
{
	SBUF=dat;
	while(TI==0);
	TI=0;
}
void SendString(u8 *str)
{
	while(*str!='\0')
	{
		SendByte(*str++);
	}
}

发送单字节

if(RI==1)
{
    cmd=SBUF;
	SendByte(cmd);
	RI=0;
	CH138(4);P0=0xff;
}

发送字符串

void Uart()interrupt 4
{
	if(RI==1)
		{
			 cmd[i]=SBUF;
			 i++;
			 RI=0;
			 if(i==6) 
       {
			    i=0;
			    if(strcmp(cmd,"return")==0)
			    {
					    status=1;
					}
			 }
		}
}

接收显示

wd_dat=(float)wd/10.0;//接收电压数据
sprintf(str,"voltage:%.1f°C\r\n",wd_dat);
SendString(str);

6、定时器

  1.  定时器初始化

void Timer0Init(void)		//10毫秒@12.000MHz
{
	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0xF0;		//设置定时初值
	TH0 = 0xD8;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0=1;//自己加 定时器0使能
	EA=1;   //自己加 总使能
}

加上最后两行

   2.  中断服务函数(如LED 0.1S闪烁)

void Timer0() interrupt 1
{
	u8 a;
	a++;
	if(a==10)
	{
		L3=~L3;
		CH138(4);
		L3|=0xfb;
		P0=L3;
		a=0;
		CH138(0);
	}
}

7、继电器,蜂鸣器设置

(1)打开蜂鸣器:P0=0100 0000;或者P0=0x40;

         关闭蜂鸣器:P0=1011 1111;或者P0&=0xb0

(2)打开继电器:P0=0001 0000; 或者P0=0x10;

         关闭继电器:P0=1110 1111;或者P0=0xe8;

void jdq()
{
	if(wd>=200)
	{
		CH138(5);P0=0x00;//打开继电器
		CH138(5);P0=0x10;
		CH138(0);
	}
	else
	{
		CH138(5);P0=0x00;//关闭继电器
		CH138(0);
	}
}
void Fmq()
{
	if(dy>360)//打开蜂鸣器
	{
		CH138(5);P0=0x00;
		CH138(5);P0=0x40;
		CH138(0);
	}
	else
	{
		CH138(5);P0=0x00;//关闭蜂鸣器
		CH138(0);
	}
}

7、AT14C02存储

写字节

void Write_AT24C02(unsigned char addr,unsigned char dat)
{
	IIC_Start();
	IIC_SendByte(0xA0); 
	IIC_WaitAck();
	IIC_SendByte(addr);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop(); 
}

读字节

unsigned char Read_AT24C02(unsigned char addr)
{
	unsigned char temp;
	IIC_Start();
	IIC_SendByte(0xA0); 
	IIC_WaitAck();
	IIC_SendByte(addr);
	IIC_WaitAck();
	
	IIC_Start();
	IIC_SendByte(0xA1); 
	IIC_WaitAck();
	temp = IIC_RecByte();
	IIC_SendAck(1);
	IIC_Stop(); 
	return temp;
}

8、N555频率

void initTimer()
{
	TMOD = 0X04;//定时器0工作于计数模式且为16位自动重装载模式 定时器1工作于定时模式且为16位自动重装载模式
	TL0 = 0XFF;//差一个脉冲就会中断
	TH0 = 0XFF;
	TL1 = (65536-50000)%256;
	TH1 = (65536-50000)/256;
	EA = 1;
	ET0 = 1;
	ET1 = 1;
	TR0 = 1;
	TR1 = 1;
}
void Timer0 () interrupt 1
{
	count_f++;
}
void Timer1() interrupt 3
{
	count_t++;
	if(count_t==20)//每隔1s就计算数了多少个脉冲,即为频率
	{
		dat_f = count_f;
		count_t = 0;
		count_f = 0;
	}
	if(press_flag==1)
	{
		press_count++;
	}
}

9、DS1302时间模块

void Init_time()
{
	u8 i;
	Write_Ds1302_Byte(0x8e,0x00);
	for(i=0;i<3;i++)
	{
		Write_Ds1302_Byte(write_t[i],time[i]);
	}
	Write_Ds1302_Byte(0x8e,0x80);
}
void Read_time()
{
	u8 i;
	for(i=0;i<3;i++)
	{
		time[i]=Read_Ds1302_Byte(read_t[i]);
	}
}

ds1302.c文件添加头文件

#include "reg52.h"
#include "intrins.h"
sbit SCK=P1^7;
sbit RST=P1^3;
sbit SDA=P2^3;

10、超声波模块

sbit TX=P1^0;
sbit RX=P1^1;
void Ultrasonic_Timer0Init(void)
{
	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0xF4;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 0;		//定时器0并不开始计时
}
u8 Wave_Recv(void)
{
	u8 Wave_Num = 10;
  u8 Dist;
	//完成超声波的发送
	TX = 0;
	TL0 = 0xF4;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值	
	TR0 = 1;
	while(Wave_Num-- )
	{
		
		while(!TF0);
		TX ^= 1;
		TF0 = 0;
	}
	//完成超声波的接收
	TR0 = 0;	//关掉定时器的目的是为了重新装载
	TL0 = 0;		//设置定时初值,用于计时
	TH0 = 0;		//设置定时初值		
	TR0 = 1;	//关掉定时器的目的是为了重新装载	
	
	while(RX && (~TF0));
	TR0 = 0;	//关闭的目的是计算距离
	if(TF0 == 1)//表示溢出了
	{
		Dist = 250;//表示数据太大了,有病,为什么要测量这么长的高度
		TF0 = 0;
	}
	else //没有产生溢出
	{
		Dist = (((TH0<<8) | TL0) * 0.017);
	}
	return Dist;
}

 

这些代码是我练习时参考的模块代码,用来做笔记的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_48710785

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值