⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zhtest.c

📁 郑州远博公司生产的单片机B型实验板电路原理图及配套源程序代码
💻 C
字号:
/**************************************************************************
YB-51-B  综合演示程序 (完成对实验板的综合测试)
来源: 郑州远博科技   王兴民
0371-66949037  0371-67256036 13949105551

  液晶屏第一行开始显示年、月、日 、星期
  第二行开始显示时、分、秒 和温度
  (演示程序时间不可调整)
***************************************************************************/

#include <config.h>
#define BUZZ  P3_6     //蜂鸣器
#define JDQ   P3_7      //继电器
#define LEDPOWER P2_7   //发光二极管总电源
void d_convert(Uchar  dd);
void rw24c02(void);
void testfmq(void);
void testjdq(void);
void testsmg(void);
void testled(void);
void enint0(void);

code char examp1[]="K1 be pressed!";
code char examp2[]="K2 be pressed!";
code char examp3[]="K3 be pressed!";
code char examp4[]="K4 be pressed!";

data Uchar wdh,wdl;
data Uchar displaybuff[]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a}; //数码管显示缓冲区,初始化全灭

data Uchar clockdata2[7];     //DS1302时钟数据缓冲区 for ds1302
data Uchar *clockdatain;
data Uchar *clockdataout;
data Uchar cmddata;
data Uchar indata,outdata;
data Uchar houtdatal,houtdatah,moutdatal,moutdatah,soutdatal,soutdatah; //时、分、秒
data Uchar noutdatal,noutdatah,youtdatal,youtdatah,routdatal,routdatah; //年、月、日
data Uchar woutdatal, woutdatah;

code Uchar hdata=0xfe;     //for 18b20    上限报警设定值                                  
code Uchar ldata=0x05;     //  下限报警设定值
data Uchar databuff[9];

data Uchar keyvalue;


code Uchar CH0=0X02;              //ADC0832通道0被选中

void main(void)           {  
Uchar j,temp;
Delayms(500);
Lcdreset();
testfmq();
testjdq();
testled();
testsmg();
rw24c02();
enint0();   //允许中断


for(j=0;j<6;j++)    {    //数码管显示缓冲区全部填充为不显示
displaybuff[j]=0x0a;
                    }
cmddata=0x8e;
indata=0x00;
v_W1302(cmddata, indata); //init
cmddata=0x80;
indata=0x00;
v_W1302(cmddata, indata);//秒
cmddata=0x82;
indata=0x00;
v_W1302(cmddata, indata);//分
cmddata=0x84;
indata=0x00;
v_W1302(cmddata, indata);//小时
cmddata=0x86;
indata=0x31;
v_W1302(cmddata, indata);//日
cmddata=0x88;
indata=0x03;
v_W1302(cmddata, indata);//月
cmddata=0x8A;
indata=0x03;
v_W1302(cmddata, indata);//星期
cmddata=0x8C;
indata=0x05;
v_W1302(cmddata, indata);//年 
Init_18b20();
Skip();
Write_18b20(0x4e);    //写缓存命令
Write_18b20(hdata);   //写地址2  (TH温度触发器)
Write_18b20(ldata);   //写地址3  (TL温度触发器)
Write_18b20(0x7f);    //12位分辨率
Init_18b20();
Skip();
Write_18b20(0x48);    //复制暂存存储器
Init_18b20();
Skip();


while(1)   {
temp=Adconvert(CH0);       //18B20转换数据
Display(displaybuff); 
displaybuff[2]=temp/100;
displaybuff[1]=(temp-displaybuff[2]*100)/10;
displaybuff[0]=temp-(displaybuff[2]*100+displaybuff[1]*10);
Display(displaybuff);           //在数码管上显示转换的数据
Init_18b20();
Skip();
Convert();             //温度转换
Display(displaybuff); 
Display(displaybuff); 
Display(displaybuff); 
Display(displaybuff); 
//Display(displaybuff); 
                keyvalue=Key_s(); //读取键值
                if(keyvalue==0x7f)
                  {while(Key_s()==0x7f)
                      {Lcdreset();Eputstr(0,2,examp1); P3_6=0;}  //P3_6是蜂鸣器的接口
                  }
                if(keyvalue==0xbf)
                  {while(Key_s()==0xbf)
                      {Lcdreset();Eputstr(0,2,examp2); P3_6=0;}  //P3_6是蜂鸣器的接口
                  }
                if(keyvalue==0xdf)
                  {while(Key_s()==0xdf)
                      {Lcdreset();Eputstr(0,2,examp3); P3_6=0;}  //P3_6是蜂鸣器的接口
                  }

                 if(keyvalue==0xef)
                  {while(Key_s()==0xef)
                      {Lcdreset();Eputstr(0,2,examp4); P3_6=0;}  //P3_6是蜂鸣器的接口
                  }               
                 if(keyvalue==0xff) { P3_6=1;}
Init_18b20();
Skip();
Read_scrat();       //读18b20 scratchpad   存储器
for(j=0;j<9;j++)
 {
  databuff[j]=Read_18b20();
  Display(displaybuff); 

 }
databuff[0]=databuff[0]>>4;
databuff[1]=databuff[1]<<4;
databuff[0]=(databuff[0]|databuff[1])&0x7f;
d_convert(databuff[0]);
           clockdataout=&clockdata2;     
           v_BurstR1302T(clockdataout);
           soutdatal=clockdata2[0]&0x0f;
           soutdatah=(clockdata2[0]>>4)&0x07;
           moutdatal=clockdata2[1]&0x0f;
           moutdatah=(clockdata2[1]>>4)&0x07;
           houtdatal=clockdata2[2]&0x0f;
           houtdatah=(clockdata2[2]>>4)&0x07; 
           routdatal=clockdata2[3]&0x0f;
           routdatah=(clockdata2[3]>>4)&0x07;
           youtdatal=clockdata2[4]&0x0f;
           youtdatah=(clockdata2[4]>>4)&0x07;
           woutdatal=clockdata2[5]&0x0f;
           woutdatah=(clockdata2[5]>>4)&0x07;
           noutdatal=clockdata2[6]&0x0f;
           noutdatah=(clockdata2[6]>>4)&0x07;

              
               Disponechar(0,0,50);     //50代表数字‘2’的ASC码,液晶屏是按照ASC码来显示字符
               Disponechar(0,1,48);       //48代表数字‘0’的ASC码
               Disponechar(0,2,noutdatah+48);   //48表示对应数字的实际值和相对应的ASC码的偏移

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -