基於AT89C51微控制器的萬年曆求大神,求指導

時間 2021-08-30 09:49:12

1樓:黃石佳誠家電維修

/*****************************ds18b20.h*******************************/

#ifndef ds_18b20_h

#define ds_18b20_h

sbit dq=p2^4; //定義埠temp

uchar tt;

//uchar code tab1=;

uchar code tab2=;

/*延時函式us*/

void delay(uchar num)

void ds18b20_init(void)//初始化ds1820

uchar ds18b20_readonechar(void)//讀一個位元組

return (dat);

}void ds18b20_writeonechar(unsigned char dat)//寫一個位元組

}uint ds18b20_read_disp_temperature(void)//讀取並顯示溫度

/*void main()

}*/#endif

/************************************lcd1602.h*****************************************/

#ifndef lcd_1602_h

#define lcd_1602_h

//#include

#define uchar unsigned char

#define uint unsigned int

sbit lcd_rs=p2^7;

sbit lcd_rw=p2^6;

sbit lcd_en=p2^5;

void delayms(uint x)

/*write command*/

void write_lcd_1602_command(uchar com)

/*write data*/

void write_lcd_1602_data(uchar dat)

/*initialization lcd_1602*/

void initialization_lcd_1602()

void pos(uchar pos)

void show_string(uchar *str)

}#endif

/**************************************main.c**********************************/

#include

#include

#include "lcd1602.h"

#include "ds18b20.h"

#define uint unsigned int

#define uchar unsigned char

/*ds1302io定義*/

sbit sck=p1^2;

sbit sda=p1^3;

sbit rst=p1^4;

/*設定時間鍵*/

sbit key0=p1^0;//設定

sbit key1=p1^1; //分+

sbit key2=p1^5;//時+

sbit key3=p1^6;//確認

uchar key1m;

uchar second, minute,hour,week,day,month,year;//datestring[9],timestring[9];

uchar data_string[13];

uchar time_string[12];

/*延時*/

/*void delayus(uint x)

*//*寫一位元組*/

void write_one_char(uchar dat)

}/*讀一位元組*/

uchar read_one_char()

return dat;

}/*復位ds1302*/

void rest_ds1302()

/*寫入資料*/

void write_ds1302(uchar addr, uchar dat)

/*讀取資料*/

uchar read_ds1302(uchar addr)

uchar bcd_to_decimal(uchar bcd)

void get_time()

void key_scan()

if(key2==0)

if(key3==0)}}

void ds1302_init() //1302晶片初始化子函式(2010-01-07,12:00:00,week4)

void write_week(uchar week)//寫星期函式

}void main()

}if(key1m==1)key_scan();

pos(0);

show_string(data_string);

write_week(week);

pos(0x40);

show_string(time_string);

pos(0x40+0x0b);//er是標頭檔案規定的值0x80+0x40

write_lcd_1602_data('0'+(ds18b20_read_disp_temperature()/10));//數字+30得到該數字的lcd1602顯示碼

write_lcd_1602_data('0'+(ds18b20_read_disp_temperature()%10));//數字+30得到該數字的lcd1602顯示碼

write_lcd_1602_data(0x2e);

write_lcd_1602_data(tt+0x30);

//write_lcd_1602_data(0xdf);//顯示溫度的小圓圈符號,0xdf是液晶屏字元庫的該符號地址碼

write_lcd_1602_data(0x43);//顯示"c"符號,0x43是液晶屏字元庫裡大寫c的地址碼}}

這個是帶年月日,星期,溫度顯示,小時分秒,可調,你可以參考一下噢!

2樓:匿名使用者

#include #include #define uchar unsigned char #define uint unsigned int sbit sda=p1^0; //ds1302資料線 sbit clk = p1^1; //ds1302時鐘線 sbit rst = p1^2; //ds1302復位線 sbit rs = p2^0; //lcd暫存器選擇 sbit rw = p2^1; //lcd讀/寫控制 sbit en = p2^2; //lcd啟用 sbit k1 = p3^4; //按鍵選擇 sbit k2 = p3^5; //按鍵加 sbit k3 = p3^6; //按鍵減 sbit k4 = p3^7; //按鍵確定 uchar tcount =0; //一年中的每個月的天數,2月的天數有年份決定 uchar monthsdays = ; //週日,週一到週六(0,1-6)[讀取ds1302時分別是1-7] uchar *week = ;

23//lcd顯示緩衝 uchar lcd_dsy_buffer1 = ; uchar lcd_dsy_buffer2 = ; uchar datetime[7]; //所讀取的日期時間 char adjust_index = -1; //當前調節的時間物件:秒,分,時,日,月,年(0,1,2,3,4,5,6) uchar change_flag = "-mhdm-y"; //(分,時,日,月,年) void write_a_byte_to_ds1302(uchar x) //向ds1302寫入一位元組 } void write_ds1302 (uchar addr,uchar dat) //向ds1302某地址寫入資料 //設定時間 void set_ds1302 () write_ds1302(0x8e,0x80); //加保護 } uchar get_a_byte_from_ds1302() //從ds1302讀取一位元組 return b/16*10+b%16; }

unchar read_data (uchar addr) //從ds1302指定位置讀資料 //讀取當前日期時間 void gettime() } //在lcd上顯示字串 viod display_lcd_string(uchar p,uchar *s) } //日期與時間值轉換成為數字字元 void format_datetime(uchar d, uchar *a) //判斷是否為閏年 uchar isleapyear(uint y) //求自2000.1.1開始的任何一天是星期幾 //函式沒有通過,求出總天數後再求星期幾 //因為求總天數可能會越出uint的範圍 viod refreshweekday() d = 0; for (i = 1; i < datetime[4] ; i++ ) d += monthsdays[i]; d += datetime[3]; //儲存星期,0~6表示星期日,星期一,二…,六,為了與ds1302的星期格式匹配,返回值需加1 datetime[5] = (w + d) % 7 + 1; } //年月日時分++/-- void datetime_adjust(char x) } //定時器0每秒重新整理lcd顯示 void t0_int() interrupt 1 //鍵盤中斷(int0) void ex_int0 () interrupt 0 else if (k2 = = 0) //加 else if (k3 = =0 ) //減 else if (k4 = =0) //確定 } 主程式 void main () }

求基於MCS 51系列微控制器AT89C51,設計8路搶答

org 0000h ajmp main org 0003h ajmp int0sub org 000bh ajmp t0int org 001bh ajmp t1int ok equ 20h 搶答開始標誌位 ring equ 22h 響鈴標誌位 org 0040h main mov r1,0fh 初...

微控制器AT89c51的特點,微控制器AT89C51各個引腳的作用

資源我的啊 at89c51 提供以下標準功能 4k 位元組flash 閃速儲存器,256位元組片內資料儲存器 00h 7fh為片內ram,80h ffh為特殊功能暫存器sfr 32 個i o 口線,兩個16位定時 計數器,一個5向量兩級中斷結構,一個全雙工序列通訊口,片內振盪器及時鐘電路。at89c...

求利用51微控制器at89c51做簡易電子鐘的程式

lcd的型號是什麼?它是什麼協議?能給做一個用微控制器at89c51的簡易電子時鐘嗎?要有程式,流程圖proteus 圖,元器件清單 include unsigned char code tab unsigned char buf 8 unsigned char ss 8 unsigned char...