单片机实训 ——基于单片机的电子闹钟设计(2)

2019-06-05 00:12

备电源进行涓细电流充电的能力。S1302是SPI总线型,因此与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。 2.2.3 LCD1602液晶显示电路

2.2.4 键盘电路

第三章 系统的软件设计

3.1 主程序流程图

开始 初始化LCD及DS1302 判断设置按键 是否按下 进入调节模式 读取DS1302中的时间、日期 将时间/日期写入显示时间、 日期 主程序流程图

6

3.2 时钟程序流程图

第四章 结束语

在整个设计过程中,发挥团队精神,分工合作,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识,完成了对万年历的设计,达到了预期的目的。在最初的设计中,发挥“三个臭皮匠,顶个诸葛亮”的作用,相互学习、相互讨论、研究,完成了最初的设想。在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成,反而达到事半功倍的效果。对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,理清了思路,终于能够完成它。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。也练就了我们的耐心,做什么事都在有耐心。此次设计中学到了很多很多东西,这是最重要的。

附录

PCB板展示:

7

程序展示:

#include #include

#define uchar unsigned char #define uint unsigned int sbit lcden=P1^2; sbit lcdwr=P1^1; sbit lcdrs=P1^0; sbit sda=P2^1; sbit rst=P2^2; sbit sck=P2^0; sbit s1=P3^3; sbit s2=P3^4; sbit s3=P3^5; sbit s4=P3^6; sbit ACC0=ACC^0; sbit ACC7=ACC^7; sbit BELL=P1^3; char

fen,shi,miao,ri,yue,nian,zhou,s1num,s

8

2num,s4num,flag1,flag2,lshi,lfen;

uchar code table[]={\20 - - \

uchar code table1[]={\\

uchar code table2[]={\Welcome To Lcd!\

uchar code table3[]={\Every Day!\

/*延时函数 z ms*/ void delay(uint z) {

uint x,y;

for(x=z;x>0;x--) for(y=110;y>0;y--); }

/*蜂鸣器函数*/ void didi() {

uchar i;

for(i=0;i<60;i++) {

BELL=0; delay(1); BELL=1; delay(1); } }

/*向1602液晶中写一个指令*/ void write_com(uchar com) {

lcdwr=0; lcdrs=0; // lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; }

/*向液晶写数据*/

void write_data(uchar date) {

// lcdwr=0; lcdrs=1; // lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; }

/*初始化1602液晶*/ void init_1602() {

lcdwr=0; lcden=0;

write_com(0x38); //设置LCD为16*2显示,5*7点阵,8位数据口模式

write_com(0x0c); //开显示,不显示光标

write_com(0x06); //写一个字符后,地址指针加1

9

write_com(0x01);//显示清0 }

void gudingtime_1602() {

uchar num;

write_com(0x80);

for(num=0;num<16;num++) write_data(table[num]);

write_com(0x80+0x40); //将指针指向液晶第二行

for(num=0;num<16;num++)

write_data(table1[num]); }

//显示欢迎界面函数 void displaystar(void) {

uchar i;

write_com(0x80); for(i=0;i<16;i++)

write_data(table2[i]); write_com(0x80+0x40); for(i=0;i<16;i++)

write_data(table3[i]); }

//显示时间、日期子函数 void write_sfm(uchar add,uchar time)//add为显示位置,time为要显示内容 {

uchar shiwei,gewei; shiwei=time/16; gewei=time;

write_com(add+0x80);

write_data(0x30+shiwei);//由1602液晶字库可知,0~9的数据码分别对应0x30~0x39

write_data(0x30+gewei); }

//写数据字节 子函数

void Input_1byte(uchar TD)//写一字节数据

{

uchar i; ACC=TD;

for(i=8;i>0;i--) {

sda=ACC0; sck=1; sck=0;

ACC=ACC>>1; } }

//读数据字节 子函数

uchar Output_1byte(void) {

uchar i;

for(i=8;i>0;i--) {

ACC=ACC>>1; ACC7=sda; sck=1; sck=0; }

return(ACC); }

//写ds1302数据函数

void write_1302(uchar DS_ADD,uchar DS_DAT)//写操作 {

rst=0; sck=0; rst=1;

Input_1byte(DS_ADD); Input_1byte(DS_DAT); sck=1; rst=0; }

//读ds1302数据函数

uchar read_1302(uchar DS_ADD)//读操作 {

uchar DS_INF; rst=0; sck=0;

10

rst=1;

Input_1byte(DS_ADD); DS_INF=Output_1byte(); sck=1; rst=0;

return(DS_INF); }

//初始化ds1302子函数 void inital_1302() {

// rst=0; // sck=0;

write_1302(0x8e,0x00);//禁止写保护

write_1302(0x90,0xaa);//定义充电 write_1302(0x80,0x53);//最初显示53秒

write_1302(0x84,0x09);//最初显示13时

write_1302(0x82,0x10);//分 write_1302(0x8c,0x14);//nian write_1302(0x88,0x07);//yue write_1302(0x86,0x06);//ri

//write_1302(0x8a,0x04);//星期1 write_1302(0xc0,0x09);//闹钟小时08

write_1302(0xfc,0x12);//闹钟00分 write_1302(0x8e,0x80);//开保护 }

//扫描函数 void keyscan() {

if(s1==0&&s4num==0) //按键1按下且s4在这之前没按下 {

delay(5);

if(s1==0&&s4num==0) {

flag1=1; s1num++;

while(!s1); didi(); if(s1num==1) {


单片机实训 ——基于单片机的电子闹钟设计(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:Moodle在学校信息化建设中的运用与研究课题申请报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: