大佬救救
proteus吧
全部回复
仅看楼主
level 1
怎么看keil中的程序连at89c51的引脚
2022年04月05日 08点04分 1
level 1
网上摘来的
#include "onewire.h"(单总线协议驱动模块)
//单总线延时函数
void Delay_OneWire(unsigned int t)
{
t=12*t;
while(t--);
}
//DS18B20芯片初始化
bit Init_DS18B20(void)
{
bit initflag = 0;
DQ = 1;
Delay_OneWire(12);
DQ = 0;
Delay_OneWire(80);
DQ = 1;
Delay_OneWire(10);
initflag = DQ;
Delay_OneWire(5);
return initflag;
}
//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0;
DQ = dat&0x01;
Delay_OneWire(5);
DQ = 1;
dat >>= 1;
}
Delay_OneWire(5);
}
//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
{
dat |= 0x80;
}
Delay_OneWire(5);
}
return dat;
}
unsigned char Get_wendu(){
unsigned char high,low;
unsigned char temp;
Init_DS18B20();
Write_DS18B20(0XCC);
Write_DS18B20(0X44);
Delay_OneWire(200);
Init_DS18B20();
Write_DS18B20(0XCC);
Write_DS18B20(0XBE);
low=Read_DS18B20();
high=Read_DS18B20();
temp=(low>>4)|(high<<4);
return temp;
}
#ifndef _ONEWIRE_H
#define _ONEWIRE_H 编译这个文件
#include "stc15f2k60s2.h"
#define OW_SKIP_ROM 0xcc
#define DS18B20_CONVERT 0x44
#define DS18B20_READ 0xbe
//IC引脚定义
sbit DQ = P1^4;
//函数声明
void Delay_OneWire(unsigned int t);
void Write_DS18B20(unsigned char dat);
bit Init_DS18B20(void);
unsigned char Read_DS18B20(void);
unsigned char Get_wendu();
#endif
#include<stc15f2k60s2.h>
#include "onewire.h"
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF,0XC6};
uchar f1,f2,f3,f4,f5,f6,f7,f8;
uchar moshi=1;
uchar wendu;
uchar dingshi=0;
uchar flag=0;
uchar pwm_zhankongbi=0;
uchar n=0;
uint count=0;
void delayms(uchar ms);
void display12(uchar f1,uchar f2);
void display34(uchar f3,uchar f4);
void display56(uchar f5,uchar f6);
void display78(uchar f7,uchar f8);
void allinit();
void Time0_init();
void keyscan();
void delay();
void main(){
allinit();
Time0_init();
f1=11;f2=11;f3=11;f4=11;f5=11;f6=11;f7=11;f8=11;
while(1)
{
wendu=Get_wendu();
if(flag==0)
{
f1=10;f2=moshi;f3=10;f4=11;f5=0;f6=dingshi/100;f7=dingshi%100/10;f8=dingshi%10;
}
else if(flag==1)
{
f1=10;f2=4;f3=10;f4=11;f5=11;f6=wendu/10;f7=wendu%10;f8=12;
}
if(dingshi>0)
{
if(moshi==1)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P00=0;
}
else if(moshi==2)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P01=0;
}
else if(moshi==3)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P02=0;
}
}
else if(dingshi==0)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P0=0XFF;
}
keyscan();
display12(f1,f2);
display34(f3,f4);
display56(f5,f6);
display78(f7,f8);
}
}
void keyscan(){
if(P33==0) //切换转换模式 S4
{
delayms(5);
if(P33==0)
{
if(moshi==1)
{
moshi=2;
}
else if(moshi==2)
{
moshi=3;
}
else if(moshi==3)
{
moshi=1;
}
}
while(!P33);
}
if(P32==0) //定时设置 S5
{
delayms(5);
if(P32==0)
{
if(dingshi==0)
{
dingshi=60;
}
else if(dingshi<=60)
{
dingshi=120;
}
else if(dingshi<=120)
{
dingshi=0;
}
}
while(!P32);
}
if(P31==0) //清零剩余工作时间 S6
{
delayms(5);
if(P31==0)
{
dingshi=0;
}
while(!P31);
}
if(P30==0) //温度和剩余工作时间转换 S7
{
delayms(5);
if(P30==0)
{
if(flag==0)
{
flag=1;
}
else if(flag==1)
{
flag=0;
}
}
while(!P30);
}
}
//1000hz=0.001s=1ms=1000us,每次定时100us。
void Time0_init(){
TMOD=0X01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
TR0=1;
ET0=1;
EA=1;
}
void Time0_service() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
n++;
count++;
pwm_zhankongbi++;
if(count==10000)
{
count=0;
if(dingshi>0)
{
dingshi--;
}
}
if(dingshi>0)
{
if(moshi==1)
{
if(pwm_zhankongbi==3)
{
P34=1;
}
else
{
P34=0;
}
}
else if(moshi==2)
{
if(pwm_zhankongbi==4)
{
P34=1;
}
else
{
P34=0;
}
}
else if(moshi==3)
{
if(pwm_zhankongbi==8)
{
P34=1;
}
else
{
P34=0;
}
}
}
if(n==11)
{
n=0;
pwm_zhankongbi=0;
}
}
void delayms(uchar ms){
uchar i,j,k;
for(k=ms;k>0;k--){
i=12;
j=169;
do
{
while(j--);
}
while(i--);
}
}
void allinit(){
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P2=0XC0;P0=0XFF;P2=0XFF;P0=0XFF;
}
void display12(uchar f1,uchar f2){
P2=0XC0;P0=0X01;P2=0XFF;P0=tab[f1];
delay();
P2=0XC0;P0=0X02;P2=0XFF;P0=tab[f2];
delay();
}
void display34(uchar f3,uchar f4){
P2=0XC0;P0=0X04;P2=0XFF;P0=tab[f3];
delay();
P2=0XC0;P0=0X08;P2=0XFF;P0=tab[f4];
delay();
}
void display56(uchar f5,uchar f6){
P2=0XC0;P0=0X10;P2=0XFF;P0=tab[f5];
delay();
P2=0XC0;P0=0X20;P2=0XFF;P0=tab[f6];
delay();
}
void display78(uchar f7,uchar f8){
P2=0XC0;P0=0X40;P2=0XFF;P0=tab[f7];
delay();
P2=0XC0;P0=0X80;P2=0XFF;P0=tab[f8];
delay();
}
void delay(){
uchar i,j;
for(i=10;i>0;i--)
for(j=200;j>0;j--);
}
2022年04月05日 08点04分 2
1