微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PCF8583+LM1602的protues仿真实例(C语言)

PCF8583+LM1602的protues仿真实例(C语言)

时间:11-25 来源:互联网 点击:
程序代码:

#include
#include
#include
#define lcdwritecmd XBYTE[0xFC00]
#define ledwritedat XBYTE[0xFE00]
sbit SCL=P1^0 ;
sbit SDA=P1^1 ;
char tab[2];
unsigned char year,mon,day,hour,min,sec,state,hudsec;
//============================延时函数====================================
void delay(unsigned char n)
{
unsigned char i,j;
for(i=0;i for(j=0;j<5;j++);
}
void delayshort()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
//=========================================================================
//============================1602写指令函数===============================
void writecmd(unsigned char a)
{
delay(100);
lcdwritecmd=a;
}
//=========================================================================
//============================1602写数据函数===============================
void writedata(char lcddata)
{
delay(10);
ledwritedat=lcddata;
}
//=========================================================================
//===========================1602显示字符串据函数==========================
void displaystring(unsigned char add,unsigned char n,char tab[])
{
unsigned char i;
for(i=0;i {
writecmd(add+i);
writedata(tab[i]);
delay(100);
}
}
//=========================================================================
//===========================I2C开始信号函数===============================
void start()
{

}
//=========================================================================
//===========================I2C结束信号函数===============================
void stop()
{

}
//=========================================================================
//===========================I2C从机等待应答信号函数=======================
void waitack()
{

}
//=========================================================================
//===========================I2C主机应答信号函数===========================
void mack()
{

}
//=========================================================================
//===========================I2C写一个字节函数=============================
void write_byte(unsigned char a)
{

}
//=========================================================================
//===========================I2C读一个字节函数=============================
unsigned char read_byte()
{

}
//=========================================================================
//===========================PCF8583写函数=================================
//参数adr:寄存器地址
//参数dat:写入得数据
void PCF8583_write(unsigned char adr,unsigned char dat)
{
start();
write_byte(0xa0);
waitack();
write_byte(adr);
waitack();
write_byte(dat);
waitack();
stop();
}
//=========================================================================
//===========================PCF8583读函数=================================
//连续读区以00起始地址的7个单元的数据
void PCF8583_read()
{
start();
write_byte(0xA0);
waitack();
write_byte(0x00);
waitack();
stop();
start();
write_byte(0xA1);
waitack();
state = read_byte(); // 读状态寄存器的值
mack();
hudsec = read_byte(); // 读百分之一秒数值寄存器的值
mack();
sec = read_byte(); // 读秒数值寄存器的值
mack();
min = read_byte(); // 读分数值寄存器的值
mack();
hour = read_byte(); // 读时数值寄存器的值
mack();
day = read_byte(); // 读天数值寄存器的值
mack();
mon = read_byte(); // 读时月值寄存器的值
mack();
stop();

}
//=========================================================================
//===========================转换读函数====================================
//函数功能:将十六进制的数值a转换为0-9的两位的ASCII码
void datachang(unsigned char a)
{
tab[1]=(a&0x0f)+0x30;
tab[0]=((a>>4)&0x0f)+0x30;
}
//=========================================================================
//===========================显示年月日时分秒的函数========================
void display()
{
char ch;
PCF8583_read();


tab[0]=2;
tab[1]=0;
displaystring(0x83,2,&tab);
year=(day>>6)+0x0E;
datachang(year);
displaystring(0x85,2,&tab);
ch=-;
writecmd(0x87);
writedata(ch);
mon=mon&0x1F;
datachang(mon);
displaystring(0x88,2,&tab);
day=day&0x3F;
datachang(day);
displaystring(0x8b,2,&tab);
ch=-;
writecmd(0x8a);
writedata(ch);
datachang(hour);
displaystring(0x80+0x44,2,&tab);
ch=:;
writecmd(0x80+0x46);
writedata(ch);
datachang(sec);
displaystring(0x80+0x4A,2,&tab);
ch=:;
writecmd(0x80+0x49);
writedata(ch);
datachang(min);
displaystring(0x80+0x47,2,&tab);

}
//=========================================================================
//===========================初始化函数====================================
void init()
{
writecmd(0x38);
writecmd(0x0c);
writecmd(0x06);
writecmd(0x80);
PCF8583_write(0x00,0x00);
delay(200);
}
//=========================================================================
//===========================主函数========================================
void main()
{
init();
while(1)
{
display();
}
}
//=========================================================================
运行结果:

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top