DS1302可调电子时钟1602显示proteus仿真.doc
文本预览下载声明
总电路图:
单片机电路图:
1602接线图:
1302接线图:(I/O接单片机3.5脚)
按键接线图:
程序清单:
#includereg52.h
#includeintrins.h
#define uchar unsigned char
#define uint unsigned int
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
sbit t=P1^0;//进入调时按键
sbit jia=P1^1;//加一按键
sbit jian=P1^2;//减一按键
sbit m=P1^3;//退出调时按键
sbit BEEP=P2^0;//蜂鸣器
sbit jtod=P1^4;//矩阵按键转独立按键,该脚置0
sbit T_CLK = P1^6; /*实时时钟时钟线引脚 */
sbit T_IO = P3^5; /*实时时钟数据线引脚 */
sbit T_RST = P1^7; /*实时时钟复位线引脚 */
sbit E=P2^7; //1602使能引脚
sbit RW=P2^6; //1602读写引脚
sbit RS=P2^5; //1602数据/命令选择引脚
uchar code hanzi[][8]={{0x04,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02},{0x0f,0x09,0x0f,0x09,0x0f,0x09,0x13,0x11},{0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00}};
void v_W1302(uchar ucAddr, uchar ucDa);
uchar uc_R1302(uchar);
uchar dectobcd(uchar bcd);
uchar bcdtodec(uchar);
void beep();
void delay(uchar x)
{
uchar i;
while(x--)
for(i=0;i110;i++);
}
/********************************************************************
* 名称 : enable(uchar del)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void enable(uchar del)
{
RS = 0;
RW = 0;
P0 = del;
E = 1;
delay(3);
E=0;
}
/********************************************************************
* 名称 : write(uchar del)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/
void write(uchar del)
{
RS = 1;
RW = 0;
P0 = del;
E = 1;
delay(3);
E=0;
}
/********************************************************************
* 名称 : L1602_init()
* 功能 : 1602初始化,请参考1602的资料
* 输入 : 无
* 输出 : 无
***********************************************************************/
void L1602_init(void)
{
enable(0x01);
enable(0x38);
enable(0x06);
enable(0x0c);
E=0;
}
//装入自定义字符(汉字)
void writch()
{
uchar i,j;
enable(0x40);
for(i=0;i8;i++)
for(j=0;j8;j++)
write(hanzi[i][j]);
}
/********************************************************************
* 名称 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改变液晶中某位的值,如果要让第一行,第
显示全部