基于51单片机点阵显示左移c程序Word格式.docx
- 文档编号:8656942
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:21
- 大小:18.11KB
基于51单片机点阵显示左移c程序Word格式.docx
《基于51单片机点阵显示左移c程序Word格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机点阵显示左移c程序Word格式.docx(21页珍藏版)》请在冰点文库上搜索。
//红外接收数据保存
voidwrite_com(com);
//液晶的写指令
voidwrite_data(dat);
//液晶的写数据
voidinit(void);
//定时器,液晶,红外中断的初始化
voiddelay(uintt);
voidtimechuli(void);
voidset_time(void);
//设置时间
voidread_time(void);
//读书时间
voidyejinchuli(void);
ucharread_ds1302(ucharadd);
//读DS1302上的某个地址上的数,如:
读时间
voidwrite_byte(uchardat);
//写一个字节到DS1302
voidwrite_ds1302(ucharadd,uchardat);
//在DS1302上的某个地址上写数据
//ucharread_1602(ucharadd);
ucharcodetimetable[8];
ucharirtable[33];
ucharircode[4];
uchardisp[16]="
"
;
uchardisp1[16]="
ucharcodetable[10]="
0123456789"
;
ucharcodetable1[4]="
zhou"
//液晶数组
ucharcodetable2[5]="
-CSD:
uchartime[7];
//年周月日时分秒
ucharcodewrite_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};
//写操作的时候DS1302中的对应的时间地址
ucharcoderead_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
//读操作的时候DS1302中的对应的时间地址
voidmain()
{
init();
//set_time();
while
(1)
{
read_ds18b20temp();
if(irreseok==1)
{
irreseok=0;
irchuli();
delay(5);
irpd();
tiaoshi();
}
if(flagstop)
{
flagdushi=1;
flagstop=0;
if(flagstart)
flagstart=0;
flagdushi=0;
}
if(!
flagdushi)
timechuli();
yejinchuli();
read_time();
}
}
voiddelay_8us(uintt)
while(t--);
ucharinit_ds18b20(void)
ucharn;
DQ=1;
delay_8us(8);
DQ=0;
delay_8us(80);
//释放总线
n=DQ;
delay_8us(4);
returnn;
voidwrite_ds18b20byte(uchardat)
ucharj;
for(j=0;
j<
8;
j++)
DQ=dat&
0x01;
dat>
>
=1;
ucharread_ds18b20byte(void)
uchari,dat;
for(i=0;
i<
i++)
DQ=0;
dat>
DQ=1;
if(DQ)
dat|=0x80;
delay_8us(4);
returndat;
ucharread_ds18b20temp(void)
uchara,b;
init_ds18b20();
write_ds18b20byte(0xcc);
//跳过ROM
write_ds18b20byte(0x44);
//启动温度测量
delay_8us(300);
write_ds18b20byte(0xbe);
//开始读取温度
a=read_ds18b20byte();
b=read_ds18b20byte();
temp=(b*256+a)*0.0625;
returntemp;
voidtime0()interrupt1
irtime++;
voidint0()interrupt0
if(startflag)
if(irtime>
32)//收到引导码
bitnum=0;
}
irtable[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==33)
irreseok=1;
}
}
else
startflag=1;
}
voidinit(void)
//液晶初始化
P0=0x00;
e=0;
write_com(0x38);
write_com(0x0f);
write_com(0x06);
delay(15);
delay(5);
write_com(0x08);
write_com(0x01);
//定时器0初始化
TH0=0X00;
TL0=0X00;
ET0=1;
TMOD=0X02;
TR0=1;
EA=1;
//外部中断0初始化
IT0=1;
EX0=1;
/*ucharread_1602(ucharadd)
uchardat;
write_com(add);
rs=0;
rw=0;
rw=1;
delay
(1);
e=1;
dat=P0;
return(dat);
}*/
voidtiaoshi(void)
if(ircode[1]==0xbf)
if(haoma<
10)
{
delay
(2);
n++;
if((n>
0x0f)&
&
(n<
0x40))
n=0x40;
switch(n)
case0x01:
time[0]=time[0]%16+(haoma*16);
set_time1(0);
break;
case0x02:
time[0]=time[0]/16*16+haoma;
set_time1(0);
case0x04:
time[2]=time[2]%16+(haoma*16);
set_time1
(2);
case0x05:
time[2]=time[2]/16*16+haoma;
set_time1
(2);
case0x07:
time[3]=time[3]%16+(haoma*16);
set_time1(3);
case0x08:
time[3]=time[3]/16*16+haoma;
set_time1(3);
case0x40:
time[1]=time[1]/16*16+haoma;
set_time1
(1);
case0x41:
time[4]=time[4]%16+(haoma*16);
set_time1(4);
case0x42:
time[4]=time[4]/16*16+haoma;
case0x44:
time[5]=time[5]%16+(haoma*16);
set_time1(5);
case0x45:
time[5]=time[5]/16*16+haoma;
case0x47:
time[6]=time[6]%16+(haoma*16);
set_time1(6);
case0x48:
time[6]=time[6]/16*16+haoma;
default:
delay(10);
write_data(table[haoma]);
if(haoma==10)
=0x40)&
=0x4f))
n-=0x40;
if(haoma==11)
=0x00)&
=0x0f))
n+=0x40;
if(haoma==12)
n--;
if(n==255)
n=0x47;
if(n==0x3f)
n=0x0f;
if(n==0x0e)
n=7;
if(n==5)
n=4;
if(n==2)
n=1;
if(n==0x45)
n=0x44;
if(n==0x42)
n=0x41;
if(n==0x10)
if(haoma==13)
if(haoma==14)
flagstart=1;
if(haoma==15)
flagstop=1;
};
if(n==2)
n=3;
if(n==5)
n=6;
if((n>
=8)&
=14))
n=15;
if(n==0x10)
n=0x40;
if(n==0x42)
n=0x43;
if(n==0x45)
n=0x46;
if(n==0x48)
n=0;
write_com(0x80+n);
voidirkongzhi(void)//红外控制液晶
{
voidirpd(void)//红外解码判断
switch(ircode[2])
case0x0c:
haoma=0;
break;
case0x10:
haoma=1;
case0x11:
haoma=2;
case0x12:
haoma=3;
case0x14:
haoma=4;
case0x15:
haoma=5;
case0x16:
haoma=6;
case0x18:
haoma=7;
case0x19:
haoma=8;
case0x1a:
haoma=9;
case0x05:
haoma=10;
case0x0d:
haoma=11;
case0x08:
haoma=12;
case0x0a:
haoma=13;
case0x09:
haoma=14;
case0x06:
haoma=15;
default:
voiddelay(uintt)//长延时
for(a=t;
a>
0;
a--)
for(b=120;
b>
b--);
voidwrite_com(ucharcom)//1602液晶写指令
P0=com;
voidwrite_data(uchardat)//1602液晶写数据
rs=1;
P0=dat;
delay(5);
voidwrite_byte(uchardatt)//向ds1302时钟芯片中写一个字节
uchari;
sck=0;
io=datt&
datt=datt>
1;
sck=1;
voidwrite_ds1302(ucharadd,uchardat)//给ds1302中某个地址上写数据
rst=0;
_nop_();
sck=0;
rst=1;
write_byte(add);
write_byte(dat);
io=1;
sck=1;
ucharread_ds1302(ucharadd)//读DS1302中某个地址上的数据并返回
uchari,value;
value=value>
if(io)
value=value|0x80;
returnvalue;
}
voidset_time(void)//设置DS1302的时间
uchari,j;
7;
j=time[i]/10;
time[i]=time[i]%10;
time[i]=time[i]+j*16;
//把十进制数转为BCD码,如:
15转换成BCD码位00011001
}
write_ds1302(0x8e,0x00);
//去除写保护
write_ds1302(write_add[i],time[i]);
write_ds1302(0x8e,0x80);
//加写保护
voidset_time1(ucharm)//设置DS1302的时间
write_ds1302(0x8e,0x00);
write_ds1302(write_add[m],time[m]);
voidread_time(void)//读DS1302中的年,周,月,日,时,分,秒。
for(i=7;
i>
i--)
time[i]=read_ds1302(read_add[i]);
voidtimechuli(void)//把从DS1302中读出的年,周,月,日,时,分,秒,进行分离成十进制。
//第一行显示
disp[0]=table[time[0]/16];
disp[1]=table[time[0]%16];
disp[2]=table2[0];
disp[3]=table[time[2]/16];
disp[4]=table[time[2]%16];
disp[5]=table2[0];
disp[6]=table[time[3]/16];
disp[7]=table[time[3]%16];
disp[8]=table2[0];
disp[9]=table2[0];
disp[10]=table1[0];
disp[11]=table1[1];
disp[12]=table1[2];
disp[13]=table1[3];
disp[14]=table2[0];
disp[15]=table[time[1]%16];
//第二行显示
disp1[0]=table[time[4]/16];
disp1[1]=table[time[4]%16];
disp1[2]=table2[4];
disp1[3]=table[time[5]/16];
disp1[4]=table[time[5]%16];
disp1[5]=table2[4];
disp1[6]=table[time[6]/16];
disp1[7]=table[time[6]%16];
disp1[8]=table2[0];
disp1[9]=table2[0];
disp1[10]=table[temp/100];
disp1[11]=table[temp%100/10];
disp1[12]=table[temp%10];
disp1[13]=table2[1];
disp1[14]=table2[2];
disp1[15]=table2[3];
voidyejinchuli(void)
write_com(0x80);
16;
write_data(disp[i]);
write_com(0xc0);
write_data(disp1[i]);
voidirchuli(void)
uchari,j,k,vaule;
k=1;
4;
for(j=0;
vaule=vaule>
if(irtable[k]>
6)
vaule=vaule|0x80;
k++;
ircode[i]=vaule;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 点阵 显示 程序