本人学习了关于蓝桥杯单片机方面的知识,整理了近来学习笔记,方便自己查看,如若对大家有帮助就更好了
如果有同学想入手蓝桥杯单片机的话,推荐小蜜蜂老师(yyds)
新手乍到,不足之处,多多包涵。
DS1302外设代码
#include<reg52.h>
#include<smg.h>
#include<ds1302.h>
#define uint unsigned int
#define uchar unsigned char
uchar write_addr_ds1302[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//写地址
uchar read_addr_ds1302[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};//读地址
uint time[3]={55,59,23};
uchar hex_bcd2(uchar dat)//十进制转为BCD码
{
uchar MSB,LSB;
uchar temp;
LSB=dat%10;
MSB=dat/10;
temp=0x00;
temp=MSB;
temp<<=4;
temp|=LSB;
return temp;
}
uchar bcd2_hex(uchar dat)//BCD码转为十进制
{
uchar temp;
uchar shi,ge;
ge=(dat&0x0f);
shi=(dat>>4)&0x0f;
shi=shi*10;
temp=shi+ge;
return temp;
}
void Config_ds1302()//ds1302配置
{
uchar i;
Write_Ds1302_Byte(0x8e,0x00);//关闭写保护
for(i=0;i<3;i++)
{
time[i]=hex_bcd2(time[i]);
Write_Ds1302_Byte(write_addr_ds1302[i],time[i]);
}
Write_Ds1302_Byte(0x8e,0x80);//开启写保护
}
void Read_ds1302()
{
uchar i;
for(i=0;i<3;i++)
{
time[i]=Read_Ds1302_Byte(read_addr_ds1302[i]);
time[i]=bcd2_hex(time[i]);
}
}
void displaysmg()
{
displaysmg_bit(0,smg_nodot[time[2]/10]);
delaysmg(500);
displaysmg_bit(1,smg_nodot[time[2]%10]);
delaysmg(500);
displaysmg_bit(2,0xbf);
delaysmg(500);
displaysmg_bit(3,smg_nodot[time[1]/10]);
delaysmg(500);
displaysmg_bit(4,smg_nodot[time[1]%10]);
delaysmg(500);
displaysmg_bit(5,0xbf);
delaysmg(500);
displaysmg_bit(6,smg_nodot[time[0]/10]);
delaysmg(500);
displaysmg_bit(7,smg_nodot[time[0]%10]);
delaysmg(500);
displaysmg_all(0xff);
}
void initsystem()//系统初始化
{
selectHC573(4);
P0=0xff;
selectHC573(5);
P0=0x00;
displaysmg_all(0xff);
Config_ds1302();
}
void main()
{
initsystem();
while(1)
{
Read_ds1302();
displaysmg();
}
}