手机版

基于单片机作息时间控制器设计的c语言程序设计

时间:2025-05-10   来源:未知    
字号:

附2:源程序代码

#include<pic.h> //调用pic.h头函数

__CONFIG(XT & WDTDIS & LVPDIS); //设置单片机工作模式

#define uchar unsigned char //无符号字符型定义符重说明

#define uint unsigned int //无符号整型定义符重说明

#define lcd_rs RA1 //---LCD端口定义---

#define lcd_rw RA2

#define lcd_e RA3

#define i_o RB5 //---DS1302端口定义---

#define sclk RB6

#define rst RB7

#define K1 RB1//---键盘端口定义---

#define K2 RB2

#define K3 RB3

uchar test=7,sw[]={5,5,2,9,1,0,3};

uchar presetTime[]={0x00,0x30,0x09,0x13,0x05,0x03,0x21,0x00};

//初始时间日期"秒、分、小时、年、月、星期 、日 " 存放表

uchar dateTime[7];

uchar bell_n=3,yuzhi[][3]={0x00,0x30,0x01,0x15,0x30,0x02,0x30,0x30,0x03};

const uchar digit[]={"0123456789.-:"}; //定义字符数组显示数字

const uchar weekstr[][4]={"SUN","MON","TUE","WEN","THR","FRI","STA"};

数组显示

uchar time_rx @ 0x30; //定义接收寄存器

static volatile bit time_rx7 @ (unsigned)&time_rx*8+7;

//接收寄存器的最高位

void delay(uchar n)//---延时函数---

{

uchar i;

for(i=0;i<50;i++);

}

void port_init() //---端口初化函数---

{

// ADCON1=0X07; //设置A口为普通I/O口

TRISA=0X00; //设置A口为输出

TRISB=0X1f; //设置A口为输出

TRISC=0X00; //设置C口为输出

//定义字符

TRISE0=0;

}

//------DS1302时间控制有关函数--------

uchar time_read_1() //读一个字节函数子程序

{

int j; //设置循环变量

TRISB5=1; //设置数据口方向为输入

for(j=0;j<8;j++) //连续读取8bit

{

sclk=0; //拉低时钟信号

time_rx=time_rx>>1; //接收寄存器右移1位

time_rx7=i_o; //把接收到的数据放到接收寄存器的最高位 sclk=1; //拉高时钟信号

}

TRISB5=0; //恢复数据口方向为输出

sclk=0; //拉低时钟信号

return(time_rx); //返回读取到的数据

}

void time_write_1(uchar time_tx) //写一个字节数据函数子主程序

{

int j; //设置循环变量

for(j=0;j<8;j++) //连续写8bit

{

i_o=0; //先设置数据为0

sclk=0; //时钟信号拉低

if(time_tx&0x01) //判断待发送的数据位是0或1

{

i_o=1; //待发送数据位是1

}

time_tx=time_tx>>1; //待发送的数据右移1位

sclk=1; //拉高时钟信号

}

sclk=0; //写完一个字节,拉低时钟信号

}

void get_time() //读取时间函数子程序

{

int i; //设置循环变量

rst=1; //使能DS1302

time_write_1(0xbf); //发送多字节读取命令

for(i=0;i<7;i++) //连续读取7个字节数据

{

dateTime[i]=time_read_1(); //调用读取1个字节数据的函数

delay(100);

}

rst=0; //复位DS1302

}

void set_time() //设置时间函数子程序

{

int i; //定义循环变量

rst=1; //使能DS1302

time_write_1(0xbe); //时钟多字节写命令

for(i=0;i<8;i++) //连续写8个字节数据

{

time_write_1(presetTime[i]); //调用写一个字节函数

delay(100);

}

rst=0; //复位

}

void ds1302_init() //DS1302初始化函数子程序

{

sclk=0; //拉低时钟信号

rst =0; //复位DS1302

rst=1; //使能DS1302

time_write_1(0x8e); //发控制命令

time_write_1(0); //允许写DS1302

rst=0; //复位

}

//------LCD1602显示控制有关函数--------

void lcd_writeComd(uchar cmdChar) //---写命令函数---

{

PORTC=cmdChar;

lcd_rs=0; //该字节数据为命令,而不是数据

lcd_rw=0; //此次操作为写,而不是读

lcd_e=0; //拉低使能信号

delay(50); //保持使能信号为低一段时间

lcd_e=1; //拉高使能信号,建立LCD操作所需要的上升沿 }

void lcd_init() //---LCD初始化函数---

{

lcd_writeComd(0x01); //清除显示

lcd_writeComd(0x38); //8位2行5*7点阵

lcd_writeComd(0x0c); //显示开,光标关,光标不闪烁

lcd_writeComd(0x06); //显示光标移动

}

void lcd_writeData(uchar datx) //---向LCD写数据函数---

{

PORTC=datx; //待显示数据送PORTC口

lcd_rs=1; //该字节数据为数据,而不是命令

lcd_rw=0; //此次操作为写,而不是读

lcd_e=0; //拉低使能信号

delay(50); //保持使能信号为低一段时间

lcd_e=1; //拉高使能信号,建立LCD操作所需要的上升沿

…… 此处隐藏:3640字,全部文档内容请下载后查看。喜欢就下载吧 ……

基于单片机作息时间控制器设计的c语言程序设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)