📄 zhtest.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 + -