单片机万年历程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DELAY.C
#define DELAY_C
#include”includes.h”
#define XTAL 12
void delay_lus(void)
{
asm(”nop”):
}

void delay_nus(unsigned int n)
{
unsigned int i=0;
for(i=0;idelay_lus();
}
void delay_ims(void)
{
unsigned int i;
for(i=0:i<(unsigned int)(XTAL*143-2);i++);
}
void delay_nms(unsigned int n)
{
unsigned int i=0;
for(i=0;i{
delay_ims();
}
}
DSl302.C
#include”includes.h”
#define DSl302_C
unsigned char bflag;
unsigned char bpm;
unsigned char get_hours(void)
{
unsigned char i;
unsigned char R_Byte;
unsigned char TmpByte;
reset();
write(0x85);
ddr_set_io();
R_Byte=0x00;
Prt_clear_io();
ddr_clear_io();
for(i:0;i<4;i++)
}
TmpByte=0;
if((pinp&(1<TmpByte=1;
TmpByte<<=7;
R_Byte>>=1;
R_Byte I=TmpByte;
Prt_set_clk();
delay_nus(2);
prt_clear_clk();
delay_nus(2);
}
bflag=0;
if((pinp&(1< bflag=l;
prt_set_clk();
delay_nus(2);
prt_clear_clk();
delay_nus(2);
bpm=0;
if((pinp&(1< bpm=1;
prt_set_clk();
delay_nus(2);
prt_clear_clk();
delay_nus(2);
prt_clear_rst();
prt_clear_clk();
R_Byte >>=4;
return R_Byte;
}
unsigned char readbyte(unsigned char w_byte)
{
unsigned char temp;
reset();
write(w_byte);
temp=read();
prt_clear_rst();
prt_clear_clk();
return temp;
}
void writebyte(unsigned char w_byte,unsigned char w_2_byte) {
reset();
write(w_byte);
write(w_2_byte);
prt_clear_rst();
prt_clear_clk();
}
void reset(void)
{
ddr_set_rst();
prt_clear_clk();
prt_clear_rst();
prt_set_rst();
}
void write(unsigned char W_Byte)
{
unsigned char i;
DDRC=0xFF;

for(i=0;i<8;i++)
{
Prt_clear_io();
if(W_Byte &0x01)
{
prt_set_io();
}
Prt_set_clk();
delay_nus(1);//delay_nus(2);
prt_clear_clk();
delay_nus(1);//delay_nus(2);
W_Byte>>=1;
}
}
unslgned char read(void)
{
unsigned char i;
unsigned char R_Byte;
unsigned char R_Byte2;
unsigned

char TmpByte;
ddr_set_io();
R_Byte=0x00;
R_Byte2=0x00;
prt_clear_io();
ddr_clear_io();
for(i=0;i<4;i++)//get the first 4 bits
{
TmpByte=0;
if((pinp&(1< {
TmpByte=1;
TmpByte=0x80;
}
//TmpByte<<=7;
R_Byte= (R-Byte>>1);//R_Byte>>=1;
R_Byte |=TmpByte;
prt_set_clk();
delay_nus(1);//delay_nus(2);
prt_chear_clk();
delay_nus(1);//delay_nus(2);
}
for(i=0;i<4;i++)
{
TmpByte=0;
if((pinp&(1< {
TmpByte=1;
TmpByte=0x80;
}
//TmpByte<<=7;
R_Byte2=(R_Byte2>>1);//R_Byte2>>=l;
R_Byte2 |=TmpByte;
Prt_set_clk();
delay_nus(1)://delay_nus(2);
prt_clear_clk();
delay_nus(1);//delay_nus(2);
}
R_Byte>>=4;
R_Byte2>>=4;
R_Byte=(R_Byte2*10)+R_Byte;
return R_Byte;
}
HD44780.C
#include”includes.h”
#define HD44780_C
void lcd_pulse(void)
{
Icd—set—e()
delay_nms(1);
Icd_clear_e();
delay_nms(1);
}
void icd_wait(void)
{
asm(”nop”);
}
void icd_send(unsigned char data)
{
Lcd_wait();
dataport=data;
lcd_pulse();

}
void clrscr(void)
{
lcd_clear_rs();
lcd_clear_rw();
icd_send(0x01);
lcd_wait();
}

void gotoz(unsigned char z)
{
lcd_clear_rs();
lcd_clear_rw();
lcd_send(z || 0x80);
}

void gotoxy(unsigned char x,unsigned char y)
{
gotoz((x)|((y)<(6));
}

void put_char(char c)
{
lcd_clear_rw();
lcd_set_rs();
lcd_send(c);
}
void outtext(unsigned char*text)
{
unsigned char i;
for(i=0; text[i]&&i<16;i++)
put_char(text[i]);
}
void initgraph(void)
{
dirport_data:0xFF;
dirport_con |=(LCD_E | LCD_RS | LCD_RW);
lcd_clear_rs();
lcd_clear_rw();
lcd_send(0x3C);
lcd_send(0x3C);
lcd_send(0x3C);
lcd_send(0x06);
lcd_send(0x0C);
}
#define LCD_C
#include”includes.h”
void LCD_INIT(void)
 

{
LCD_DIR_PORT=0xff;
LCD_0Pl_PORT=0x30;
lcd_clear_rw();
lcd_clear_rs();
lcd_set_e();
asm(”nop”);
asm(”nop”);
icd_clear_e();
delay_nus(40);
icd_clear_rw();
icd_clear_rs();
lcd__set_e();
asm(”nop”);
asm(”nop”);
icd_clear_e();
delay_nus(40);
icd_set_e();
asm(”nop”):
asm(”nop”);
lcd_clear_e();
delay_nus(40);
LCD_OP_PORT=0x20;
icd_set_e();
asm(”nop”);
asm(”nop“);
lcd_clear_e();
delay_nus(40);
}
void LCD_Busy(void)
{
unsigned char temp,high;
unsigned char low;
LCD_DIR_PORT=0x0f;
do
{
teap=LCD_OP_PORT;
temp=temp&BIT3;
LCD_OP_PORT=temp;
Lcd_set_rw(); //Set LCD to READ
lcd_clear_rs();
lcd_set_e();
delay_nus(3);
high=LCD_IP_PORT;
lcd_clear_e();
lcd_set_e();
asm(”nop”);
asm(”nop”);
low=LCD—IP—PORT;.
lcd_clear_e();
}while(high&0x80);
delay_nus(20);
}
void LCD_WriteControl(unsigned char CMD)
{
char temp;
LCD_Busy();
LCD_DIR_PORT=0xff;
temp=LCD_OP_PORT;
temp=temp&BIT3:
LCD_OP_PORT=(CMD &0xf0)| temp;
lcd_clear_rw();
lcd_clear_rs();
lcd_set_e();
asm(”nop”);
asm(”nop”);
lcd_clear_e();
LCD_OP_PORT=(CMD<<4)|temp;
lcd_clear_rw();
lcd_clear_rs();
lcd_set_e();
asm(”nop”);
asm(”nop”);
lcd_clear_e();
}
void LCD_WriteData(unsiqned char Data)
{
char temp~
LCD_Busy();
LCD_DIR_PORT=0xFF;
temp=LCD_OP_PORT;
temp=temp&BIT3;
LCD_OP_PORT=(Data&0xf0)| temp;
lcd_clear_rw(); //Set LCD to write
lcd_set_rs();
lcd_set_e();
asm(”nop”);
asm(”nop”);
lcd_clear_e();
LCD_OP_PORT=(Data<<4)|temp;
lcd_clear_rw();
lcd_set_rs();
lcd_set_e();
asm(”nop”);
asm(”nop”);
lcd_clear_e();
}
//*********************************//
//***初始化液晶***//
//*********************************//
void Init_LCD(void)
{
LCD_INIT();
LCD_WriteControl(LCD_FUNCTION_SET);
LCD_WriteControl(LCD_OFF);
LCD_Wri

teControl(LCD_CLEAR);
LCD_WriteControl(LCD_MODE_SET);
LCD_WriteControl(LCD_ON);
LCD_WrlteControl(LCD_HOME);
//LCD_WriteControl(0x90);
}
//************************************************//
/ /***清屏 ***//
//************************************************//
void LCD_Clear(void)
{
LCD_WriteControl(0x01);
}
//***********************************************//
//***移动光标到0行0列***//
//***********************************************//
void LCD_Home(void)
{
LCD_WriteControl(0x02); "
}
//**********************************************//
//***显示字符,在当前光标处***//
//***********************************************//
void LCD_DisplayCharacter(char Char)
{
LCD_WriteData(Char);
}
//***********************************************//
//***在Flash中、在指定的行和列显示一个字符串***//
//***********************************************//
void LCD_DisplayString_F(char rOW,char column,unsigned char__flash*string)
{
LCD_Cursor(row,column);
while(*string)
}
LCD_DisplayCharacter(*string++);
}
}
//***********************************************//
//***在RAM中、在指定的行和列显示一个字符串***//
//***********************************************//
void LCD_DisplayString(char row,char column,unsigned char*string)
{
LCD_Cursor(row,column);
while(*string)
LCD_DisplayCharacter(*string++);
}
//***********************************************//
//***定位行和列的光标***//
//***********************************************//
void LCD_Cursor(char row,char column)
{
switch (row) {
case 1:LCD_WriteControl(0x80+column一1);break;
case 2:LCD_WriteControl(0xc0+column一1);break;
case 3:LCD_WriteControl(0x94+column—1);break;
case 4:LCD_WriteControl(0xd4+column—1);break;
default:break;
}
}
//**************************//
//***打开光标***//
//**************************//
void LCD_Cursor_On(void)
{
LCD_WriteControl(LCD_CURS_ON);
}
//***************************//
//***关闭光标***//
//***************************//
void LCD_Cursor_Off(void)
{
LCD_WriteCon

trol(LCD_ON);
//********************//
//***关闭LCD***//
//*************杀******//
void LCD_Display_Off(void)
{
LCD_WriteControl(LCD_OFF);
}
//*******************//
//***打开LCD***//
//******************//
void LCD_Display_On(void)
{
LCD_WriteControl(LCD_ON);
}
MAIN.C
#include”includes.h”
#define WDR() asm(”wdr”)
unsigned char alarm _1_set,alarm_2_set,alarm_3_set;
__flash unsigned char test[ ]=”DSl302 time is:”;
void main(void)
{
unsigned char hour,min,sec;
unsigned char date,month;
unsigned char flag;
flag=1;
PORTB=0x00;
DDRB=0x00;
DDRD=0x7f;
PORTD=0xFF;
Init_LCD();
LCD_DisplayString(0,1,”Initialize OK!”);
delay_nms(500);
LCD_WriteControl(LCD_CLEAR);
WDR();
writebyte(w_protect,0x00);
//设置时间
//writebyte(sec_w,0x09);
//writebyte(min_w,0x09);
//writebyte(hour_w,0x09);
while(1)
{
sec =readbyte(sec_r); //读秒
min =readbyte(min_r); //读分
hour =readbyte(hour_r); //读小时
month =readbyte(month_r);
date =readbyte(date_r);
WDR();
LCD_DisplayString_F(1,1,test);
if(flag)
{
LCD_Cursor(2,1);
LCD_DisplayCharacter(~+hour/10);
LCD_DisplayCharacter(~+hour%lO);
LCD_DisplayCharacter(’:,);
WDR();
LCD_DisplayCharacter(~+m~/10)}
LCD_DisplayCharacter(~+min%10);
LCD_DisplayCharacter(':’);
WDR();
LCD_DisplayCharacter(d~+s~/10);
LCD_DisplayCharacter(~+sec%10):
LCD_Cursor(2,ii);
WDR();
LCD_DisplayCharacter(~Y+month/10);
LCD DisplayCharacter(dY+month%10);
LCD_DisplayCharacter<-/0;
WDR();
LCD_DisplayCharacter(~+date/10);
LCD_DisplayCharacter(~+date%10):
WDR();
}
}
}
usart.c
#define USART_C
#include”includes.h”
void usart_putchar(char c)
{
if(c==飞rr)
usart_putchar@f);
while(UCSRA&(1<<5));
UDR=c:
)
void init—usart(void)
{
//USART initialization
//Communication Paramet

ers:8 Data,1 Stop。No Parity
//USART Receiver:Off
//USART Transmitter:On
//USART Mode:Asynchronous
//USART Baud rate:19200
UCSRA=Ox00;
UCSRB=Ox08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C;

相关文档
最新文档