标题:
求大神看一下我的程序有没有问题
[打印本页]
作者:
LIUBAOBAO
时间:
2017-12-27 18:16
标题:
求大神看一下我的程序有没有问题
程序温度可以显示 本来还可以调节上下限温度的 可是不知道为什么 我的调节不了了
HELP
作者:
LIUBAOBAO
时间:
2017-12-27 18:22
这是1602程序
//**********************Disigned By F H X****************************//
//***********************LCD1602é¨Ãè3ìDò*****************************//
//*****1 LCDÃ|¼ì2aoˉêy £o¶ÔLCD½øDDD′Ãüáî D′êy¾Yǰ ¼ì2aLCDêÇ·ñÃ|******//
//*****2 LCDD′Ãüáîoˉêy £o¶ÔLCDD′Ãüáî*********************************//
//*****3 LCD3õê¼»ˉoˉêy £oLCD3õê¼»ˉ***********************************//
//*****4 LCDéè3õê¼×ø±ê £oéèÖÃLCD3õê¼×ø±ê£¨x£¬y£©*********************//
//*****5 LCDD′êy¾Yoˉêy £o¶ÔLCDD′êy¾Y*********************************//
//*****6 LCDÏÔê¾×Ö·û′® £oÔúLCDéÏÏÔê¾×Ö·û′®***************************//
//*****7 LCDÏÔê¾êy¾Y £oÔúLCDéÏÏÔê¾DèòaμÄêy¾Y***********************//
//*****8 LCDÏÔê¾±¨¾ˉÖμ £oÔúLCD£¨x£¬y£©ÏÔê¾±¨¾ˉéÏÏÂÏT*****************//
//*****9 ×Ô¶¨òå×Ö·ûÏÔê¾£oÔúLCDéÏÏÔê¾×Ô¶¨òåμÄ·ûoÅ¡°¡ü¡±******************//
//****10 éèÖýçÃæ3õê¼»ˉ£o½øèëζ豨¾ˉÖμéèÖýçÃæ**********************//
#include "reg52.h"
#define LCD1602_DB P0
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit LCD1602_RS = P1^0;
sbit LCD1602_RW = P1^1;
sbit LCD1602_E = P1^5;
//sbit LCD1602_RS = P2^6;
//sbit LCD1602_RW = P2^5;
//sbit LCD1602_E = P2^7;
void InitLcd1602();
void LcdShowStr(uchar x,uchar y,uchar *str);
void LcdShowDat(uchar x,uchar y,uchar num);
void DisplayLimit(uchar x,uchar y,char dat);
void Display_laba();
uchar code buff[]="0123456789";
uchar code user[]={0x04,0x0E,0x15,0x04,0x04,0x04,0x04,0x04};
uchar code user2[]={
0x01,0x03,0x07,0x1F,0x1F,0x07,0x03,0x01,
0x00,0x02,0x09,0x05,0x15,0x05,0x09,0x02,
};
extern uchar High;
extern uchar Low;
extern uchar cnt;
/**********¼ì2aLcdêÇ·ñÃ|**********/
void LcdWriteReady()
{
uchar sta;
LCD1602_DB=0xFF;
LCD1602_RS=0;
LCD1602_RW=1;
do
{
LCD1602_E=1;
sta=LCD1602_DB;
LCD1602_E=0;
}while(sta&0x80);
}
/**********LcdD′Ãüáîoˉêy**********/
void LcdWriteCmd(uchar cmd)
{
LcdWriteReady();
LCD1602_RS=0;
LCD1602_RW=0;
LCD1602_DB=cmd;
LCD1602_E=1;
LCD1602_E=0;
}
/**********Lcd3õê¼»ˉoˉêy**********/
void InitLcd1602()
{
LcdWriteCmd(0x38);
LcdWriteCmd(0x0c);
LcdWriteCmd(0x06);
LcdWriteCmd(0x01);
LcdShowStr(0,0,"H: C L: C");
LcdShowStr(0,1,"TEMP: C");
LcdShowDat(4,0,0xDF);
LcdShowDat(14,0,0xDF);
LcdShowDat(14,1,0xDF);
DisplayLimit(2,0,High);
DisplayLimit(12,0,Low);
LcdShowStr(7,0," ");
cnt=0;
}
/**********LcdéèÖÃ3õê¼1a±ê**********/
void LcdSetCursor(uchar x,uchar y)
{
uchar addr;
if(y==0)
{
addr=0x00+x;
}
else
{
addr=0x40+x;
}
LcdWriteCmd(addr|0x80);
}
/**********LcdD′êy¾Yoˉêy**********/
void LcdWriteDat(uchar dat)
{
LcdWriteReady();
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_DB=dat;
LCD1602_E=1;
LCD1602_E=0;
}
/**********LcdÏÔê¾×Ö·û′®oˉêy**********/
void LcdShowStr(uchar x,uchar y,uchar *str)
{
LcdSetCursor(x,y);
while(*str!='\0')
{
LcdWriteDat(*str++);
}
}
/**********LcdÏÔê¾êy¾Yoˉêy**********/
void LcdShowDat(uchar x,uchar y,uchar num)
{
LcdSetCursor(x,y);
LcdWriteDat(num);
}
//**********ÏÔê¾Î¶豨¾ˉÖμ**********/
void DisplayLimit(uchar x,uchar y,char dat)
{
uchar ge,shi;
ge=dat%10;
shi=dat/10;
if(shi==0)
LcdShowDat(x,y,' ');
else
LcdShowDat(x,y,buff[shi]);
LcdShowDat(x+1,y,buff[ge]);
}
/**********ÏÔê¾×Ô¶¨òå×Ö·û**********/
void Display_user(uchar x)
{
uchar i;
LcdWriteCmd(0x40); //éèÖÃCGRAMÆeê¼μØÖ·
for(i=0;i<=7;i++)
{
LcdWriteDat(user[i]); //½«×Ô¶¨òå×Ö·ûD′èëCGRAM
}
LcdWriteCmd(0x80+0x40+x); //μú¶tDDμúx¸öλÖÃÏÔê¾
LcdWriteDat(0x00);
}
void Display_laba()
{
uchar i,j;
LcdWriteCmd(0x48);
for(i=0;i<=15;i++)
{
LcdWriteDat(user2[i]);
}
for(j=0;j<=1;j++)
{
LcdWriteCmd(0x80+7+j);
LcdWriteDat(0x01+j);
}
}
/**********×î′óÖμ×îD¡ÖμéèÖà 3õê¼»ˉ½çÃæ**********/
void InitMaxMin()
{
LcdWriteCmd(0x38);
LcdWriteCmd(0x0c);
LcdWriteCmd(0x06);
LcdWriteCmd(0x01);
LcdShowStr(0,0,"H: C L: C");
LcdShowDat(4,0,0xDF);
LcdShowDat(14,0,0xDF);
DisplayLimit(2,0,High);
DisplayLimit(12,0,Low);
}
作者:
LIUBAOBAO
时间:
2017-12-27 18:22
18B20
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//sbit KEY_1 = P2^3;
//sbit KEY_2 = P2^2;
//sbit KEY_3 = P2^1;
//sbit KEY_4 = P2^0;
sbit KEY1 = P2^4;
sbit KEY2 = P2^5;
sbit KEY3 = P2^6;
sbit KEY4 = P2^7;
uchar code KeyCodeMap[4] = {0x0D,0x26,0x28,0x1B}; // ASC¢ò¼üÖμ : »Ø3μ¼ü Ïòéϼü Ïòϼü ESC¼ü
uchar KeySta[4] = {1,1,1,1}; // °′¼üμ±Ç°×′ì¬ Ä¬èÏÎaμˉÆe
ulong pdata KeyDownTime[4] = {0,0,0,0}; // °′¼ü°′ÏÂê±¼ä ĬèÏÎa0
extern void KeyDown(uchar keycode);
/**********°′¼üÇy¶ˉoˉêy**********/
void KeyDrive()
{
uchar i;
static uchar backup[4] = {1,1,1,1}; //±£′æéÏ′ΰ′¼ü×′ì¬ Ä¬è϶¼ÎaμˉÆe
static ulong pdata TimeTh[4] = {1000,1000,1000,1000}; //°′¼ü°′ÏÂê±¼äãDÖμ 3¬1yãDÖμÔòÎa3¤°′Ä£ê½
for(i=0;i<4;i++)
{
if(backup[i]!=KeySta[i]) //¼ì2a°′¼ü¶ˉ×÷
{
if(KeySta[i]==0) //°′¼ü±»°′ÏÂ
{
KeyDown(KeyCodeMap[i]); //Ö′DD°′¼ü¶ˉ×÷oˉêy
}
backup[i]=KeySta[i]; //±£′æμ±Ç°°′¼ü×′ì¬
}
if(KeyDownTime[i]>0) //¼ì2a°′¼ü°′ÏÂê±¼ä
{
if(KeyDownTime[i]>=TimeTh[i]) //°′¼ü°′ÏÂê±¼ä′óóúãDÖμ Ö′DD°′¼ü¶ˉ×÷oˉêy
{
KeyDown(KeyCodeMap[i]);
TimeTh[i]+=200; //ãDÖμ×ÔÔö
}
}
else
{
TimeTh[i]=1000; //°′¼üμˉÆeê±»Ö¸′ãDÖμê±¼ä
}
}
}
/**********°′¼üé¨Ãèoˉêy**********/
void KeyScan()
{
uchar i;
static uchar Keybuff[4]={0xFF,0xFF,0xFF,0xFF}; //°′¼üé¨Ãè»o3åÇø
Keybuff[0]=(Keybuff[0]<<1)|KEY1; //Öe¸öé¨Ãè4¸ö¶àᢰ′¼ü Æeμ½Ñóê±Ïû¶¶×÷óÃ
Keybuff[1]=(Keybuff[1]<<1)|KEY2;
Keybuff[2]=(Keybuff[2]<<1)|KEY3;
Keybuff[3]=(Keybuff[3]<<1)|KEY4;
for(i=0;i<4;i++)
{
if((Keybuff[i]&0x0F)==0x00) //¼ì2aμ½Ä3¸ö°′¼ü±»°′ÏÂ
{
KeySta[i]=0; //¸Ä±ä¸Ã°′¼ü×′ì¬
KeyDownTime[i]+=4; //¸Ã°′¼ü°′ÏÂê±¼äàÛ¼ó
}
else if((Keybuff[i]&0x0F)==0x0F) //¼ì2aμ½Ä3¸ö°′¼üμˉÆe
{
KeySta[i] = 1; //¸Ä±ä¸Ã°′¼ü×′ì¬
KeyDownTime[i] = 0; //¸Ã°′¼ü°′ÏÂê±¼äÇåáã
}
}
}
作者:
LIUBAOBAO
时间:
2017-12-27 18:23
按键程序
#include "reg52.h"
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//sbit DS18B20_DQ = P1^5;
sbit DS18B20_DQ = P3^2;
extern uchar tflag;//ζèÕy¸o±ê־λ
bit RESET_DS18B20(void);
void Write_DS18B20_DATA(uchar Value);
uchar Read_DS18B20_DATA(void);
uint Read_DS18B20_TEMP(void);
void Delay_Us(uchar i);
bit RESET_DS18B20(void) //¸′λ
{
EA=0;
DS18B20_DQ = 1;
DS18B20_DQ = 0;
Delay_Us(247);
DS18B20_DQ = 1;
Delay_Us(27);
EA=1;
if(DS18B20_DQ == 0)
{
while(DS18B20_DQ == 0);
return 0;
}
else
{
return 1;
}
}
void Write_DS18B20_DATA(uchar Value) //D′èëò»¸ö×Ö½úêy¾Y
{
uchar i=0;
EA=0;
for(i=0;i<8;i++)
{
DS18B20_DQ = 1;
DS18B20_DQ = 0;
Delay_Us(5);
DS18B20_DQ = Value & 0x01;
Delay_Us(20);
DS18B20_DQ = 1;
Value >>= 1;
}
EA=1;
}
uchar Read_DS18B20_DATA(void) //¶áè¡ò»¸ö×Ö½ú
{
uchar i=0;
uchar Value=0;
EA=0;
for(i=0;i<8;i++)
{
DS18B20_DQ = 1;
DS18B20_DQ = 0;
Delay_Us(1);
DS18B20_DQ = 1;
Delay_Us(1);
if(DS18B20_DQ)
{
Value|=0x01<<i;
}
Delay_Us(17);
DS18B20_DQ = 1;
_nop_();
}
EA=1;
return Value;
}
uint Read_DS18B20_TEMP(void) //¶áè¡Î¶è
{
uchar Temp_L = 0;
uchar Temp_H = 0;
uint Temp = 0;
float tt=0;
RESET_DS18B20();
Write_DS18B20_DATA(0xCC);
Write_DS18B20_DATA(0x44);
RESET_DS18B20();
Write_DS18B20_DATA(0xCC);
Write_DS18B20_DATA(0xBE);
Temp_L = Read_DS18B20_DATA();
Temp_H = Read_DS18B20_DATA();
Temp = Temp_H;
Temp <<=8;
Temp = Temp | Temp_L;
if(Temp<0x0fff) //ÅD¶ÏζèÕy¸o
tflag=0; //tflag=0ζèÎaÕy
else
{
Temp=~Temp+1; //ζèÎa¸oêy,¸oÖμòÔ21Âë′æ·Å,ÕaàォÆä»1Ô-ÎaÔ-Âë
tflag=1; //tflag=1ζèÖμÎa¸o
}
tt=Temp*0.0625;
Temp= tt*10;
return Temp;
}
void Delay_Us(uchar i)
{
while(-- i);
}
作者:
admin
时间:
2017-12-27 18:33
楼主用的什么浏览器?中文乱码 谷歌的没问题
作者:
LIUBAOBAO
时间:
2017-12-27 18:53
360 不过KEIL 用的可能是盗版或者破解版的吧 我也不知道为什么这样 复制的不是.C文件里的
作者:
花开Long
时间:
2017-12-27 19:40
我看看
作者:
花开Long
时间:
2017-12-27 19:42
主函数?
作者:
LIUBAOBAO
时间:
2017-12-27 21:21
花开Long 发表于 2017-12-27 19:42
主函数?
上面发了。所有的程序 每个.c文件都发上来了
作者:
LIUBAOBAO
时间:
2017-12-27 21:22
花开Long 发表于 2017-12-27 19:42
主函数?
不好意思 漏发了
作者:
LIUBAOBAO
时间:
2017-12-27 21:26
本帖最后由 LIUBAOBAO 于 2017-12-28 08:40 编辑
这是补发的主函数
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//sbit Buzz = P3^2;
sbit Buzz = P1^6;
/*******************************************lcd1602.coˉêyéùÃ÷************************************************/
extern void InitLcd1602(); //lcd16023õê¼»ˉoˉêy
extern void DisplayLimit(uchar x,uchar y,char dat); //Ôú×ø±ê(x,y)ÏÔê¾Î¶èéÏÏT»òÏÂÏT
extern void InitMaxMin(); //½øèëζ豨¾ˉÖμéèÖýçÃæ
extern void Display_user(uchar x); //ÏÔê¾óû§×Ô¶¨òåμÄ×Ö·û¡°¡ü¡±
extern void LcdShowStr(uchar x,uchar y,uchar *str);
extern void LcdShowDat(uchar x,uchar y,uchar num);
//extern void Display_laba();
/*******************************************key.coˉêyéùÃ÷****************************************************/
extern void KeyDrive();
extern void KeyScan();
/****************************************ds18b20.coˉêyéùÃ÷***************************************************/
extern bit RESET_DS18B20(void);
extern uint Read_DS18B20_TEMP(void);
/*****************************************main.c×óoˉêyéùÃ÷***************************************************/
void Timer1Init(uint ms); //¶¨ê±Æ÷13õê¼»ˉoˉêy
void SetLimit(); //éèÖñ¨¾ˉÖμoˉêy
void ControlBuzz(); //·äÃùÆ÷¿ØÖÆoˉêy
void delay(uint z);
/**********************************************±äá¿¶¨òå******************************************************/
extern uchar code buff[];
uchar T1RH=1; //¶¨ê±Æ÷3õÖμ
uchar T1RL=1;
bit flagBuzz=0; //·äÃùÆ÷¿a1رêÖ¾
bit EBuzz=0; //·äÃùÆ÷ê1Äü±êÖ¾
char High=30; //ζèéÏÏT 3¬1yÏT¶è·äÃùÆ÷¿a
char Low=10; //ζèÏÂÏT
char mode=0; //ģ꽱äá¿
uchar cnt=0; //ESC°′¼ü ±äá¿
uchar tflag; //ζèÕy¸o±ê־λ
/*************************************Ö÷oˉêy***************************************/
void main()
{
EA=1; //¿aÆô×üÖD¶Ï
Timer1Init(1); //3õê¼»ˉ¶¨ê±Æ÷1
RESET_DS18B20(); //¸′λ18B20
delay(20);
InitLcd1602(); //3õê¼»ˉlcd1602
while(1)
{
LcdShowDat(10,1,buff[Read_DS18B20_TEMP()/100]); //ÏÔê¾Î¶èÖμê®Î»
LcdShowDat(11,1,buff[Read_DS18B20_TEMP()/10%10]); //ÏÔê¾Î¶èÖμ¸öλ
LcdShowStr(12,1,"."); //ÏÔê¾D¡êyμã
LcdShowDat(13,1,buff[Read_DS18B20_TEMP()%10]); //ÏÔê¾D¡êyλ
KeyDrive(); //°′¼üÇy¶ˉ
SetLimit(); //éèÖñ¨¾ˉÖμ
}
}
/**********************************°′¼ü¶ˉ×÷oˉêy************************************/
void KeyDown(uchar keycode)
{
if(keycode==0x0D) //»Ø3μ¼ü£o½øèëÄ£ê½éèÖÃ
{
mode++;
if(mode>2)mode=0;
}
else if(keycode==0x26) //Ïòéϼü£oÄ£ê½1 éÏÏTÖμ+1 Ä£ê½2 ÏÂÏTÖμ+1
{
if(mode==1)
{
High++;
if(High>99)High=99;
}
else if(mode==2)
{
Low++;
if(Low==High)Low=High-1;
}
}
else if(keycode==0x28) //Ïòϼü£oÄ£ê½1 éÏÏTÖμ-1 Ä£ê½2 ÏÂÏTÖμ-1
{
if(mode==1)
{
High--;
if(High==Low)High=Low+1;
}
else if(mode==2)
{
Low--;
if(Low<0)Low=0;
}
}
else if(keycode==0x1B) //Esc¼ü£o¿a1Ø·äÃùÆ÷±¨¾ˉ
{
if(mode==0)
{
cnt++;
if(cnt>1)cnt=0;
if(cnt==1) //·äÃùÆ÷ê1Äü¿aÆô ÏÔê¾à®°èí¼Ïñ
{
// EBuzz=1;
// Display_laba();
}
else if(cnt==0) //·äÃùÆ÷ê1Äü1Ø±Õ 2»ÏÔê¾à®°è
{
//EBuzz=0;
LcdShowStr(7,0," ");
}
}
}
}
/************************************±¨¾ˉÖμéèÖÃoˉêy*********************************/
void SetLimit()
{
if(mode==0); //Ä£ê½0 Õy3£ÏÔê¾ μ÷ó÷äÃùÆ÷¿ØÖÆoˉêy
{
ControlBuzz();
}
if(mode!=0) //Ä£ê½1 μ÷ÕûζèéÏÏT
{ //Ä£ê½2 μ÷ÕûζèÏÂÏT
//EBuzz=0;
InitMaxMin();
while(mode!=0)
{
KeyDrive();
if(mode==1)
{
//Display_user(3); //ÏÔê¾×Ô¶¨òåμÄ ¼yí· í¼Ïñ Ö¸ÏòζèéÏÏT
DisplayLimit(2,0,High); //ÏÔê¾ Î¶豨¾ˉÖμéÏÏÂÏT
DisplayLimit(12,0,Low);
}
else if(mode==2)
{
//Display_user(13); //ÏÔê¾×Ô¶¨òåμÄ ¼yí· í¼Ïñ Ö¸ÏòζèÏÂÏT
LcdShowStr(3,1," ");
DisplayLimit(2,0,High);
DisplayLimit(12,0,Low);
}
}
InitLcd1602();
}
}
/************************************·äÃùÆ÷¿ØÖÆoˉêy************************************/
void ControlBuzz()
{
if((Read_DS18B20_TEMP()>=(10*High))||(Read_DS18B20_TEMP()<=(10*Low)))
flagBuzz=1;
else
flagBuzz=0;
if(flagBuzz==1)
{
Buzz=~Buzz;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=115;y>0;y--);
}
/**********¶¨ê±Æ÷13õê¼»ˉoˉêy***********/
void Timer1Init(uint ms)
{
ulong tmp; //16λ3¤ÕûDí±äá¿tmp
tmp=12000000/12; //óþ§ÕñÆμÂê3yòÔ12μÃμ½¶¨ê±Æ÷¼ÆêyÆμÂê
tmp=(tmp*ms)/1000; //¼ÆËã3öDèòa¶àéù¸ö»úÆ÷ÖüÆú
tmp=65536-tmp; //¶¨ê±Æ÷μÄÖØÔØÖμ
tmp=tmp+28; //213¥ÖD¶ÏÑóê±Ïìó|Ôì3éμÄÎó2î
T1RH=(uchar)(tmp>>8); //½«tmp¸ß8λóòòÆ8λ ¸3Öμ¸øT1RH
T1RL=(uchar)tmp; //½«tmpμí8λ¸3Öμ¸øT0RL
TMOD&=0x0F; //ÇåáãT1¿ØÖÆÎ»
TMOD|=0x10; //Ñ¡ÔñÄ£ê½1
TH1=T1RH;
TL1=T1RL;
ET1=1;
TR1=1;
}
/**********¶¨ê±Æ÷1ÖD¶Ïoˉêy**********/
/*******1oáÃëé¨Ãèò»′ζàᢰ′¼ü*******/
void InterruptTimer1() interrupt 3
{
TH1=T1RH; //ÖØÔØ3õÖμ
TL1=T1RL;
KeyScan(); //°′¼üé¨Ãè
}
作者:
LIUBAOBAO
时间:
2017-12-27 21:28
admin 发表于 2017-12-27 18:33
楼主用的什么浏览器?中文乱码 谷歌的没问题
360 不过KEIL 用的可能是盗版或者破解版的吧 我也不知道为什么这样 复制的不是.C文件里的
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1