模拟路灯控制系统(单片机c语言+12864+1302+原理图+程序完整版)(4)

2018-12-23 23:37

桂林电子科技大学课程设计(论文)报告用纸 第13页 共 32 页

C语言程序:

#include #include

#define uint unsigned int #define uchar unsigned char

sbit DS1302_CLK = P1^0; //实时时钟时钟线引脚 sbit DS1302_IO = P1^1; //实时时钟数据线引脚 sbit DS1302_RST = P1^2; //实时时钟复位线引脚

sbit ACC0 = ACC^0; sbit ACC7 = ACC^7;

uchar hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; 闪的计数

sbit Set = P3^4; //模式切换键 对应实验板K5 sbit Up = P3^5; //加法按钮 对应实验板K6

sbit Down= P3^6; //减法按钮 对应实验板K7

sbit out = P3^7; //立刻跳出调整模式按钮 对应实验板K8 //sbit p35=P3^5; //定时时间转换

sbit BEEP=P3^2; sbit guang=P3^3;

uchar done,count,temp,up_flag,down_flag; uchar h;

bit a,b; //闪烁标志位 uchar week_value[3];

void show_time(); //液晶显示程序

//**************************************** //12864液晶显示部分子程序模块

//**************************************** sbit rs = P2^0; sbit rw = P2^1; sbit e = P2^2; #define lcddata P0

sbit busy=P0^7; //lcd busy bit void wr_d_lcd(uchar content); void wr_i_lcd(uchar content); void clrram_lcd (void); void init_lcd(void); void busy_lcd(void);

void rev_row_lcd(uchar row);

void rev_co_lcd(uchar row,uchar col,uchar mode);

void clr_lcd(void);

void wr_co_lcd(uchar row,uchar col,uchar lcddata1,uchar lcddtta2); void wr_row_lcd(uchar row,char *p);

unsigned char idata i,tl0_temp=0,th0_temp=0;

//秒,分,时到日,月,年位 桂林电子科技大学课程设计(论文)报告用纸 第14页 共 32 页

//********************************** //液晶初始化

//********************************** void init_lcd(void) {

wr_i_lcd(0x06); /*光标的移动方向*/ wr_i_lcd(0x0c); /*开显示,关游标*/

}

//*********************************** //填充液晶DDRAM全为空格

//********************************** void clrram_lcd (void) { }

wr_i_lcd(0x30); wr_i_lcd(0x01);

//*********************************** //对液晶写数据

//content为要写入的数据

//*********************************** void wr_d_lcd(uchar content) { busy_lcd(); rs=1; rw=0;

lcddata=content;

e=1; e=0; }

//******************************** //对液晶写指令

//content为要写入的指令代码 //***************************** void wr_i_lcd(uchar content) {

busy_lcd(); rs=0;

rw=0; lcddata=content; }

e=1; e=0;

桂林电子科技大学课程设计(论文)报告用纸 第15页 共 32 页

//******************************** //液晶检测忙状态 //在写入之前必须执行

//******************************** void busy_lcd(void) {

lcddata=0xff; rs=0; rw=1;

e =1;

while(busy==1); e =0;

}

//******************************** //指定要显示字符的坐标

//******************************* void gotoxy(unsigned char y, unsigned char x) {

if(y==1)

wr_i_lcd(0x80|x); if(y==2)

wr_i_lcd(0x90|x); if(y==3) wr_i_lcd((0x80|x)+8); if(y==4)

wr_i_lcd((0x90|x)+8); }

//********************************** //液晶显示字符串程序

//********************************** void print(uchar *str) { }

while(*str!='\\0') { }

wr_d_lcd(*str); str++;

桂林电子科技大学课程设计(论文)报告用纸 第16页 共 32 页

//*********************************** //DS1302时钟部分子程序模块

//*********************************** typedef struct __SYSTEMTIME__ { uchar Second;

uchar Minute; uchar Hour; uchar Week; uchar Day; uchar Month; uchar Year;

uchar DateString[11]; uchar TimeString[9];

}SYSTEMTIME; //定义的时间类型 SYSTEMTIME CurrentTime;

#define AM(X) X #define PM(X) (X+12) // 转成24小时制

#define DS1302_SECOND 0x80 //时钟芯片的寄存器位置,存放时间 #define DS1302_MINUTE 0x82 #define DS1302_HOUR 0x84 #define DS1302_WEEK #define DS1302_DAY #define DS1302_MONTH #define DS1302_YEAR

0x8A 0x86 0x88 0x8C

//********************************** //实时时钟写入一字节(内部函数) //********************************** void DS1302InputByte(uchar d) {

uchar i; ACC = d;

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

DS1302_IO = ACC0; DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; }

}

//************************************* //实时时钟读取一字节(内部函数)

//相当于汇编中的 RRC

桂林电子科技大学课程设计(论文)报告用纸 第17页 共 32 页

//************************************* uchar DS1302OutputByte(void) {

uchar i;

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

ACC = ACC >>1; ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; }

return(ACC);

}

//************************************** //ucAddr: DS1302地址, ucData: 要写的数据 //************************************** void Write1302(uchar ucAddr, uchar ucDa) {

DS1302_RST = 0;

DS1302_CLK = 0; DS1302_RST = 1;

DS1302InputByte(ucAddr); // 地址,命令 DS1302InputByte(ucDa); // 写1Byte数据

//相当于汇编中的 RRC

DS1302_CLK = 1; DS1302_RST = 0; }

//************************************** //读取DS1302某地址的数据

//************************************** uchar Read1302(uchar ucAddr) {

uchar ucData; DS1302_RST = 0; DS1302_CLK = 0;

DS1302_RST = 1;

DS1302InputByte(ucAddr|0x01); // 地址,命令 ucData = DS1302OutputByte(); // 读1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData); }

//****************************************** //获取时钟芯片的时钟数据到自定义的结构型数组


模拟路灯控制系统(单片机c语言+12864+1302+原理图+程序完整版)(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:书记员法律基础知识试题

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

马上注册会员

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