欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機lcd12864大數(shù)字+ds1302+時間可調(diào)+鬧鐘 Proteus仿真程序
[打印本頁]
作者:
zhangshuqiang
時間:
2020-7-4 17:35
標題:
51單片機lcd12864大數(shù)字+ds1302+時間可調(diào)+鬧鐘 Proteus仿真程序
單片機大數(shù)字時鐘仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png
(28.03 KB, 下載次數(shù): 80)
下載附件
2020-7-6 00:46 上傳
單片機源程序如下:
#include <reg51.h>
#include "DS18B20.h"
#include "DS1302.h"
#include "LCD12864.h"
char a;
sbit KEY6=P3^4;
sbit KEY2=P3^5;
sbit KEY3=P3^6;
sbit KEY4=P3^7;
sbit KEY5=P3^3;
bit flag=1; //進入/退出設置標志
uchar choose=0x01; //切換標志
void delay10(void) //延時10ms
{
unsigned char i,j;
for(i=0;i<255;i++)
for(j=0;j<200;j++);
}
void delay5ms(void) //誤差 0us
{
unsigned char a,b;
for(b=19;b>0;b--)
for(a=130;a>0;a--);
}
//設置時ds1302寄存器值循環(huán) 如秒寄存器59時加一變?yōu)?0
unsigned char conver(unsigned char a,unsigned char b,unsigned char c)
{
if((a&0x0f)==0x0a) a=a+6;
if(a==b) a=c;
return a;
}
void digplay() {
//時間
ShowNumber16_32(2,0,TIME[2]>>4&0x03); //時 十位
ShowNumber16_32(2,16, TIME[2]&0x0f);//時 個位
ShowChina(2,33,18);
ShowNumber16_32(2,48,TIME[1]>>4&0x07);//分 十位
ShowNumber16_32(2,64, TIME[1]&0x0f);//分 個位
ShowChina(2,81,18);
ShowNumber16_32(2,96,TIME[0]>>4&0x07);//秒 十位 0000 0111
ShowNumber16_32(2,112, TIME[0]&0x0f);//秒 個位
//日期
ShowNumber(0,0,2);
ShowNumber(0,8,0);
ShowNumber(0,16,TIME[6]>>4&0x0f);
ShowNumber(0,24, TIME[6]&0x0f);//年
ShowNumber(0,32,11);
ShowNumber(0,40,TIME[4]>>4&0x01);
ShowNumber(0,48, TIME[4]&0x0f);//月
ShowNumber(0,56,11);
ShowNumber(0,64,TIME[3]>>4&0x03);
ShowNumber(0,72, TIME[3]&0x0f);//日
ShowChina(0,112,(TIME[5]&0x07)-1);//周
}
void wendu() {
//溫度
a=Read_Temperature(); //讀取DS18B20的溫度
if(a<0) //處理溫度正負
{
a = (-1)*a; // 取補
ShowNumber(6,88,11); //溫度計圖標—
}
else
{
ShowNumber(6,88,12);//溫度計圖標+
}
ShowNumber(6,96,a/10%10); //顯示溫度中位
ShowNumber(6,104,a%10); //顯示溫度低位
ShowChina(6,112,8);//顯示 .C
}
void digplaystart() {//開機顯示
uchar i=0;
ShowChina(2,64-16*1.5,19);
ShowChina(2,64-16*0.5,20);
ShowChina(2,64+16*0.5,21);
ShowChina(2,64+16*1.5,22);
for (i=0;i<10;i++) {
ShowNumber(4,32+8*i,16);
delay5ms();
delay5ms();
}
ClearScreen(0);//清屏
}
void InitTimer0(void) //1ms
{
TMOD = 0x01;
TH0 = 0x0FC;
TL0 = 0x18;
EA = 1;
ET0 = 1;
TR0 = 0;
}
unsigned int count =0;
void main(void)
{ char swh = 0;
char year= 20;
char week= 0x04;
char month= 0x20;
char day= 0x04;
char hour= 0x20;
char div= 0x04;
char second= 0x20;
char n_hour = 1;
char n_div = 30;
char n_falg=0;
unsigned char month_x= 0,day_x=0,hour_x = 0 ,div_x = 0,year_x = 0;
char djs_flag = 0;
char djs_stop_flag=1;
char djs = 60;
int time=0;
InitLCD(); //初始化LCD12864
//Ds1302Init();//Ds1302初始化,并且附上設定的默認時間
Ds1302ReadTime();
Ds1302WriteTime();
//set_DS1302_time(0x20,0x04,0x20, 0x04,0x20,0x04,0x20);
//InitTimer0();
while(1)
{
//ShowNumber(6,32,9);
// wendu();
//Ds1302ReadTime();
//digplay();
if ( KEY2 == 0 )
{
swh ++;
while(!KEY2);
}
if(swh >8 ) swh = 0;
if( swh == 0 )
{
ShowNumber(6,20,15);
ShowNumber(6,32,11); ShowNumber(6,40,11);
Ds1302ReadTime();
digplay();
//========判斷 鬧鐘
if((TIME[2]>>4&0x03) == (n_hour/10) && (TIME[2]&0x0f) == n_hour%10 && (TIME[1]>>4&0x07) == n_div/10 && (TIME[1]&0x0f) == n_div%10)
{
{
n_falg ++;
if(n_falg%2==0 )
{
ShowNumber(6,75,n_hour/10); //時 十位
ShowNumber(6,83,n_hour%10);//時 個位
ShowNumber(6,91,10);
ShowNumber(6,99,n_div/10);//分 十位
ShowNumber(6,107,n_div%10);//分 個
}
if(n_falg%2==1 )
{
ShowNumber(6,73,n_hour/10); //時 十位
ShowNumber(6,81,n_hour%10);//時 個位
ShowNumber(6,89,10);
ShowNumber(6,97,n_div/10);//分 十位
ShowNumber(6,105,n_div%10);//分 個
}
}
}
}
if(swh == 1 )//設置年
{
ShowChina(6,32,9);
if(KEY3 == 0)
{
year ++;
while(!KEY3);
}
if(KEY4 == 0)
{
year --;
while(!KEY4);
}
year = year >80?80:year;
year = year <1?1:year;
year_x =((year/10)<<4)|(year%10) ;
// set_DS1302_time(year_x,week,month_x, day_x,hour_x,div_x,0x00);
digplay();
}
if(swh == 2 )//設置星期
{
ShowChina(6,32,10);
if(KEY3 == 0)
{
week ++;
while(!KEY3);
}
if(KEY4 == 0)
{
week --;
while(!KEY4);
}
week= week > 7 ?7:week;
week= week < 1 ?1:week;
// set_DS1302_time(year_x,week,month_x, day_x,hour_x,div_x,0x00);
digplay();
}
if(swh == 3 )//設置月
{
ShowChina(6,32,11);
if(KEY3 == 0)
{
month ++;
while(!KEY3);
}
if(KEY4 == 0)
{
month --;
while(!KEY4);
}
month = month >12?12:month;
month = month <1?1:month;
month_x=((month/10)<<4)|(month%10) ;
// set_DS1302_time(year_x,week,month_x, day_x,hour_x,div_x,0x00);
digplay();
}
if(swh == 4 )//設置日
{
ShowChina(6,32,12);
if(KEY3 == 0)
{
day ++;
while(!KEY3);
}
if(KEY4 == 0)
{
day --;
while(!KEY4);
}
day = day >31?31:day;
day = day <1?1:day;
day_x=((day/10)<<4)|(day%10) ;
// set_DS1302_time(year_x,week,month_x, day_x,hour_x,div_x,0x00);
digplay();
}
if(swh == 5 )//設置小時
{
ShowChina(6,32,13);
if(KEY3 == 0)
{
hour ++;
while(!KEY3);
}
if(KEY4 == 0)
{
hour --;
while(!KEY4);
}
hour = hour >24?24:hour;
hour = hour <1?1:hour;
hour_x=((hour/10)<<4)|(hour%10) ;
// set_DS1302_time(year_x,week,month_x, day_x,hour_x,div_x,0x00);
digplay();
}
if(swh == 6 )//設置分
{
ShowChina(6,32,14);
if(KEY3 == 0)
{
div ++ ;
while(!KEY3);
}
if(KEY4 == 0)
{
div --;
while(!KEY4);
}
div = div >60?60:div;
div = div <1?1:div;
div_x=((div/10)<<4)|(div%10) ;
// set_DS1302_time(year_x,week,month_x, day_x,hour_x,div_x,0x00);
digplay();
}
if(swh == 7 ) //設置 鬧鐘 時
{
ShowChina(6,32,13); ShowNumber(6,20,11);
if(KEY3 == 0)
{
n_hour ++;
while(!KEY3);
}
if(KEY4 == 0)
{
n_hour --;
while(!KEY4);
}
n_hour = n_hour >24?24:n_hour;
n_hour = n_hour <1?1:n_hour;
ShowNumber(6,75,n_hour/10); //時 十位
ShowNumber(6,83,n_hour%10);//時 個位
ShowNumber(6,91,10);
ShowNumber(6,99,n_div/10);//分 十位
ShowNumber(6,107,n_div%10);//分 個
}
if(swh == 8 ) //設置 鬧鐘 分
{
ShowChina(6,32,14); ShowNumber(6,20,11);
if(KEY3 == 0)
{
n_div ++;
while(!KEY3);
}
if(KEY4 == 0)
{
n_div --;
while(!KEY4);
}
n_div = n_div >60?60:n_div;
n_div = n_div <1?1:n_div;
ShowNumber(6,75,n_hour/10); //時 十位
ShowNumber(6,83,n_hour%10);//時 個位
ShowNumber(6,91,10);
ShowNumber(6,99,n_div/10);//分 十位
ShowNumber(6,107,n_div%10);//分 個
}
if(KEY6 == 0 )
{
set_DS1302_time(year_x,week,month_x, day_x,hour_x,div_x,0x00);
while(!KEY6);
}
/*
if( swh == 7 )//秒表設置時間
{
if(djs_flag == 0)
{
TR0 = 0;
if(KEY3 == 0)
{
djs ++ ;
while(!KEY3);
}
if(KEY4 == 0)
{
djs -- ;
while(!KEY4);
}
djs = djs >100?100:djs;
djs = djs <1?1:djs;
count = 0;
ShowNumber(6,32,djs/10); ShowNumber(6,40,djs %10);
}
if ( djs_flag == 1 ) //djs
{
TR0 = 1;
time = djs - count/1000;
ShowNumber(6,32,time/10); ShowNumber(6,40,time %10);
} */
/* if (djs_stop_flag == 1 )
{
TR0 = 1;
}
if (djs_stop_flag == 1 )
{
TR0 = 0;
}*/
/* }
if( swh == 7 && KEY5 == 0 )
{
djs_flag ++ ;
if( djs_flag >1 )djs_flag =0;
while(!KEY5);
}*/
/* if( swh == 7 && KEY6 == 0 )
{
djs_stop_flag ++ ;
if( djs_stop_flag >1 )djs_stop_flag =0;
while(!KEY6);
} */
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0FC;
TL0 = 0x18;
//add your code here!
count ++ ;
}
// digplaystart();
// delay5ms();
// Ds1302Init();//Ds1302初始化,并且附上設定的默認時間
// a=Read_Temperature(); //讀取DS18B20的溫度
// ShowNumber(0,32,11);//-
// ShowNumber(0,56,11);//-
// ShowChina(0,96,7);//漢字周
// ShowNumber16_32(2,32,10);//:
// ShowNumber16_32(2,80,10);//:
// ShowChina(6,112,8);//℃
/* while(1)
{
wendu();//溫度顯示
if(flag==1)
Ds1302ReadTime();
//讀取DS1302的時間
else
Ds1302WriteTime();
if(KEY1==0) //按鍵1--處理設定時間和返回
{
delay10();
if(KEY1==1)
{
delay10();
flag=~flag;
if(flag==0) {
ShowChina(6,48,9);
ShowChina(6,0,16);
ShowChina(6,16,17);
ShowNumber(6,32,10);
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
lcd12864-時鐘-秒表.zip
(139.14 KB, 下載次數(shù): 347)
2020-7-4 17:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
51hei團團
時間:
2020-7-6 00:50
好資料,51黑有你更精彩!!!
作者:
單片機19
時間:
2021-4-9 19:45
有沒有電路圖
作者:
bomber_kk
時間:
2022-5-17 11:16
goodgoodgoodgoodgoodgood
作者:
xjj850205
時間:
2022-9-7 20:01
好資料,51黑有你更精彩!!!
作者:
愛學習的小菜
時間:
2023-12-12 21:30
是用什么版本的keil和Proteus呢?
作者:
1587912810
時間:
2024-4-15 20:39
好資料,51黑有你更精彩!!!
作者:
xhlcp2011
時間:
2024-11-10 09:47
好資料,先留個記號,有空慢慢學。
作者:
popopo258
時間:
2024-12-11 06:34
好資料,51黑有你更精彩!!!
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1