這個錯誤怎么改,各位大佬幫幫忙啊。
1. 建立LCD.H檔案
#ifndef __LCD_H_
#define __LCD_H_
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;
void Lcd1602_Delay1ms(uint c);
void LcdWriteCom(uchar com);
void LcdWriteData(uchar dat) ;
void LcdInit();
#endif
2. 建立LCD.C函式
#include"LCD.h"//包含自建立庫檔案
void Lcd1602_Delay1ms(uint c) //延時函式
{
uchar a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void LcdWriteCom(uchar com)
{
LCD1602_E = 0;
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DATAPINS = com;
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = com << 4;
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
void LcdWriteData(uchar dat)
{
LCD1602_E = 0;
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DATAPINS = dat;
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = dat << 4;
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
void LcdInit() //初始化
{
LcdWriteCom(0x32);
LcdWriteCom(0x28);
LcdWriteCom(0x0c);
LcdWriteCom(0x06);
LcdWriteCom(0x01);
LcdWriteCom(0x80);
}
3. 建立DHT11.H庫檔案
#ifndef __DHT11_H__
#define __DHT11_H__
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DHT_DATA = P1^0;
bit DHT_Start();
bit DHT_ByteRead(unsigned char *dat);
#endif
4. 建立DHT11.C檔案
#include"DHT11.h"
void delay_ms(unsigned char x)
{
unsigned char a;
while(x--)
for(a=0;a<114;a++);
}
void delay_30us(void)
{
unsigned char a;
for(a=12;a>0;a--);
}
void delay_40us(void)
{
unsigned char a,b;
for(b=3;b>0;b--)
for(a=4;a>0;a--);
}
bit DHT_Start()
{ unsigned char m=0;
DHT_DATA=https://bbs.csdn.net/topics/1;
DHT_DATA=https://bbs.csdn.net/topics/0;
delay_ms(20);
DHT_DATA=https://bbs.csdn.net/topics/1;
delay_40us();
if(DHT_DATA=https://bbs.csdn.net/topics/=1)
return 0;
else
while((DHT_DATA=https://bbs.csdn.net/topics/=0)&&(m<200))m++;
delay_40us();
delay_40us();
return 1;
}
bit DHT_ByteRead(unsigned char *dat)
{ unsigned char temp=0;
unsigned char x,y;
unsigned char m=0;
unsigned char n=0;
unsigned char mask=0x01;
unsigned char sum=0;
for(y=0;y<5;y++)
{
for(mask=0x80;mask!=0;mask>>=1)
{
while(DHT_DATA=https://bbs.csdn.net/topics/=0&&m<200)m++;
delay_30us();
if(DHT_DATA)
temp|=mask;
else
temp&=(~mask);
while(DHT_DATA=https://bbs.csdn.net/topics/=1&&n<200)n++;
}
*(dat+y)=temp;
temp=0;
}
for(x=0;x<4;x++)
sum+=*(dat+x);
if((sum&=0xff)==*(dat+4))
return 1;
else
return 0;
}
5. 建立主函式main.c檔案
#include<reg51.h>
#include"LCD.h"
#include"DHT11.h"
#define uchar unsigned char
#define uint unsigned int
sbit beep=P1^0;//
sbit BG=P2^4;//
sbit K1=P1^1;//
sbit K2=P1^2;//
sbit K3=P1^3;//
sbit K4=P1^4;//
sbit K5=P1^5;//
//sbit beep=P2^0;
uchar code table0[]="H:";
uchar code table1[]="T:";
uchar code table2[]="%";
uchar code table3[]="C";
uchar code table_1[]="2016-06-03";
uchar code table_2[]="16:00:00 5";
uchar DHT[5];
uchar tmp,i,j,k;
uchar count,shi,fen,miao,month,day,week,year;
uchar K1num,K2num,K3num;
bit flag_1s=1;
void Delay10ms(unsigned int x);
void Keyscan();
void Keyscan2();
void Wtimer(uchar ad,uchar dat);
void main()
{
LcdInit();
BG = 1;
beep;
TMOD = 0X01;
TH0 = (65536 - 50000)/256; /*11.0592MHz 46080*/
TL0 = (65536 - 50000)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
LcdWriteCom(0X86);
for (j = 0;j < 10;j++)
{
LcdWriteData(table_1[j]);
}
LcdWriteCom(0Xc6);
for (j = 0;j < 10;j++)
{
LcdWriteData(table_2[j]);
}
while(1)
{
Keyscan();
Keyscan2();
if(flag_1s)
{
flag_1s=0;
DHT_Start();
tmp=DHT_ByteRead(&DHT);
//******************
LcdWriteCom(0x80);
for(i=0;i<2;i++)
LcdWriteData(table0[i]);
LcdWriteData(DHT[0]/10+'0');
LcdWriteData(DHT[0]%10+'0');
LcdWriteData(table2[0]);
//******************
LcdWriteCom(0xC0);
for(i=0;i<2;i++)
LcdWriteData(table1[i]);
LcdWriteData(DHT[2]/10+'0');
LcdWriteData(DHT[2]%10+'0');
LcdWriteData(table3[0]);
//LcdWriteCom(0x07); //ò??á
}
}
}
void Delay10ms(unsigned int x)
{
unsigned int t;
while(x--)
for(t=0;t<114;t++);
}
void Timer0() interrupt 1
{
unsigned char t;
TH0=(65536 - 50000)/256; /*11.0592MHz*/
TL0=(65536 - 50000)%256;
t++;
if(t%40==0)
{
flag_1s=1;
}
count++;
if (20 == count)
{
count = 0;
miao++;
if (60 == miao)
{
miao = 0;
fen++;
if (60 == fen)
{
fen = 0;
shi++;
if (24 == shi)
{
shi = 0;
day++;
week++;
if(week>7)
week=1;
if (31 == day)
{
day = 1;
month++;
if (12 == month)
{
month = 1;
year++;
Wtimer(6-0x40+2,year);
}
Wtimer(6-0x40+5,month);
}
Wtimer(6-0x40+8,day);
}
Wtimer(6,shi);
}
Wtimer(9,fen);
}
Wtimer(12,miao);
}
}
void Keyscan()
{
K1 = 1;
K2 = 1;
K3 = 1;
if (0 == K1)
{
Delay10ms(5);
if (0 == K1)
{
K1num++;
while (!K1);
if (1 == K1num)
{
TR0 = 0;
LcdWriteCom(0XC0+13);
LcdWriteCom(0X0F);
}
if (2 == K1num)
{
LcdWriteCom(0XC0+10);
}
if (3 == K1num)
{
LcdWriteCom(0XC0+7);
}
if (4 == K1num)
{
LcdWriteCom(0x89);
}
if (5 == K1num)
{
LcdWriteCom(0x8C);
}
if (6 == K1num)
{
LcdWriteCom(0x8F);
}
if (7 == K1num)
{
TR0 = 1;
K1num = 0;
LcdWriteCom(0x0c);
}
}
}
if (0 != K1num)
{
if (0 == K2)
{
Delay10ms(5);
while (!K2);
if(1 == K1num)
{
miao++;
if(60 == miao)
miao = 0;
LcdWriteCom(0xc0+12);
Wtimer(12,miao);
LcdWriteCom(0xc0+13);
}
if(2 == K1num)
{
fen++;
if(60 == fen)
fen = 0;
LcdWriteCom(0xc0+9);
Wtimer(9,fen);
LcdWriteCom(0xc0+10);
}
if(3 == K1num)
{
shi++;
if(24 == shi)
shi = 0;
LcdWriteCom(0xc0+6);
Wtimer(6,shi);
LcdWriteCom(0xc0+7);
}
if(4 == K1num)
{
year++;
if(30 == year)
year = 16;
LcdWriteCom(0x88);
Wtimer(0x08-0x40,year);
LcdWriteCom(0x89);
}
if(5 == K1num)
{
month++;
if(13 == month)
month = 1;
LcdWriteCom(0x8B);
Wtimer(0x0B-0x40,month);
LcdWriteCom(0x8C);
}
if(6 == K1num)
{
day++;
if(day>31)
day = 1;
LcdWriteCom(0x8E);
Wtimer(0x0E-0x40,day);
LcdWriteCom(0x8F);
}
}
}
if (0 != K1num)
{
if (0 == K3)
{
Delay10ms(5);
while (!K3);
if(1 == K1num)
{
miao--;
if(255 == miao)
miao = 59;
LcdWriteCom(0xc0+10+2);
Wtimer(12,miao);
LcdWriteCom(0xc0+11+2);
}
if(2 == K1num)
{
fen--;
if(255 == fen)
fen = 59;
LcdWriteCom(0xc0+9);
Wtimer(9,fen);
LcdWriteCom(0xc0+10);
}
if(3 == K1num)
{
shi--;
if(255 == shi)
shi = 23;
LcdWriteCom(0xc0+6);
Wtimer(6,shi);
LcdWriteCom(0xc0+7);
}
if(4 == K1num)
{
year--;
if(255 == year)
year = 16;
LcdWriteCom(0x88);
Wtimer(0x08-0x40,year);
LcdWriteCom(0x89);
}
if(5 == K1num)
{
month--;
if(255 == month)
month = 12;
LcdWriteCom(0x8B);
Wtimer(0x0B-0x40,month);
LcdWriteCom(0x8C);
}
if(6 == K1num)
{
day--;
if(day<1)
day = 31;
LcdWriteCom(0x8E);
Wtimer(0x0E-0x40,day);
LcdWriteCom(0x8F);
}
}
}
}
void Wtimer(uchar ad,uchar dat)
{
uchar sw,gw;
sw = dat/10;
gw = dat%10;
LcdWriteCom(0x80+0x40+ad);
LcdWriteData(0x30+sw);
LcdWriteData(0x30+gw);
}
void Keyscan2()
{
K4 = 1;
K5 = 1;
if(K4 == 0)
{
Delay10ms(10);
beep=!beep;
while (!K4);
}
//********************
if(K5 == 0)
{
Delay10ms(10);
BG=!BG;
while (!K5);
}
}
uj5u.com熱心網友回復:
程式太長,懶得看,如果你是中斷中有呼叫 void Wtimer(uchar ad,uchar dat);那最適合你這個的方式是 再寫一個 void Wtimer(uchar ad,uchar dat)專門給中斷呼叫
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/119810.html
標籤:單片機/工控
上一篇:【Git】git存盤結構
