久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機+LCD1602日歷仿真小程序
[打印本頁]
作者:
DANGYU
時間:
2018-8-7 13:28
標題:
51單片機+LCD1602日歷仿真小程序
SM8952A c51仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(16.41 KB, 下載次數: 53)
下載附件
2018-8-8 02:26 上傳
單片機源程序如下:
/*calendar.c文件的功能是通過定時器實現日歷功能,具體描述如下:
1:實現通過按鍵調整時間;
2:可以實現24小時制和12小時制切換
程序創建人 黨羽
創建時間 2017-3-17
*/
#include <reg51.h>
#include <intrins.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define DelayNOP() {_nop_();_nop_();_nop_();_nop_();}
sbit K1 = P1^0; //設置年月日星期
sbit K2 = P1^1; //設置時分秒
sbit K3 = P1^2; //增加
sbit K4 = P1^3; //減少
sbit K5 = P1^4; //12小時制和24小時制
sbit K6 = P1^5; //確定
sbit SPK = P3^0; //蜂鳴器
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
bit LCD_Busy_Check(); //LCD忙檢測
void LCD_Initialize(); //初始化
void LCD_Set_POS(uchar); //設置位置
void LCD_Write_Command(uchar); //寫命令
void LCD_Write_Data(uchar); //寫數據函數
uchar *WEEK[] = {"SUN", "***", "MON", "TUS", "WEN", "THU", "FRI", "SAT"};
uchar YMD_String[] = {" 00-00-00 "}; //待顯示的年月日字符串
uchar HMSam_String[] = "am 00:00:00"; //待顯示的12小時制am時間字符串
uchar HMSpm_String[] = "pm 00:00:00"; //待顯示的12小時制pm時間字符串
uchar HMS24_String[] = " 00:00:00 "; //待顯示的24小時制時間字符串
/*0表示不修改1表示修改*/
bit Settime = 0; //是否修改時間
/*待顯示的年月日時分秒的默認值*/
uchar MilliSecond =0;
uchar idata FlashLcd = 0;
uchar Hour = 0;
uchar Minute = 0;
uchar Second = 0;
uchar Year = 17;
uchar Month = 1;
uchar Day = 1;
uint i =0;
/*按鍵計數
K1按下1次即Change_Y_OR_MO_OR_D_OR_W =1 表示修改年
K1按下2次即Change_Y_OR_MO_OR_D_OR_W =2 表示修改月
K1按下3次即Change_Y_OR_MO_OR_D_OR_W =3 表示修改日
K1按下4次即Change_Y_OR_MO_OR_D_OR_W =4 表示修改星期
K2按下1次即Change_H_OR_M =1 表示修改時
K2按下2次即Change_H_OR_M =2 表示修改分
*/
uint Change_Y_OR_MO_OR_D_OR_W =0,Change_H_OR_M = 0;
//延時函數
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i = 0; i < 120; i++);
}
}
//LCD忙檢測函數
bit LCD_Busy_Check()
{
bit LCD_Status;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
DelayMS(1);
LCD_Status = P0 ;
LCD_EN = 0;
DelayMS(1);
return LCD_Status;
}
//LCD忙等待函數
void LCD_Busy_Wait()
{
while((LCD_Busy_Check() & 0x80) == 0x80);
DelayMS(5);
}
//LCD寫命令函數
void LCD_Write_Command(uchar cmd)
{
LCD_Busy_Wait();
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
P0 = cmd;
LCD_EN = 1;
DelayMS(1);
LCD_EN = 0;
}
//LCD寫數據函數
void LCD_Write_Data(uchar str)
{
LCD_Busy_Wait();
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = str;
LCD_EN = 1;
DelayMS(1);
LCD_EN = 0;
}
//LCD初始化配置函數
void LCD_Initialize()
{
LCD_Write_Command(0x38);
DelayMS(1);
LCD_Write_Command(0x0c);
DelayMS(1);
LCD_Write_Command(0x06);
DelayMS(1);
LCD_Write_Command(0x01);
DelayMS(1);
}
//LCD坐標設置函數
void LCD_Set_POS(uchar Position)
{
LCD_Write_Command(Position | 0x80);
}
//LCD顯示數據函數
void Display_String(uchar * str, uchar LineNo)
{
uchar k;
LCD_Set_POS(LineNo);
for(k = 0; k < 16; k++)
{
LCD_Write_Data(str[k]);
DelayMS(1);
}
}
//蜂鳴器控制函數
void Beep()
{
uchar i,j = 70;
for(i = 0; i < 200; i++)
{
while(--j);
SPK = ~SPK;
}
DelayMS(300);
SPK = 0;
}
void Format_DateTime(uchar d,uchar *a)
{
a[0] = d/10 +'0';
a[1] = d%10 + '0';
}
//顯示時分秒函數
void Display_HMS(uchar h, m, s)
{
if( K5 == 1 )
{
if(Settime) HMS24_String[3] = '>';
else HMS24_String[3] = ' ';
HMS24_String[4] = h/10 + '0';
HMS24_String[5] = h%10 + '0';
HMS24_String[7] = m/10 + '0';
HMS24_String[8] = m%10 + '0';
HMS24_String[10] = s/10 + '0';
HMS24_String[11] = s%10 + '0';
Display_String(HMS24_String,0x40);
}
else
{
if( h < 12 )
{
if(Settime) HMSam_String[3] = '>';
else HMSam_String[3] = ' ';
HMSam_String[4] = h/10 + '0';
HMSam_String[5] = h%10 + '0';
HMSam_String[7] = m/10 + '0';
HMSam_String[8] = m%10 + '0';
HMSam_String[10] = s/10 + '0';
HMSam_String[11] = s%10 + '0';
Display_String(HMSam_String,0x40);
}
else
{
h = h - 12 ;
if(Settime) HMSpm_String[3] = '>';
else HMSpm_String[3] = ' ';
HMSpm_String[4] = h/10 + '0';
HMSpm_String[5] = h%10 + '0';
HMSpm_String[7] = m/10 + '0';
HMSpm_String[8] = m%10 + '0';
HMSpm_String[10] = s/10 + '0';
HMSpm_String[11] = s%10 + '0';
Display_String(HMSpm_String,0x40);
}
}
}
//顯示年月日星期函數
void Display_YMDW(uchar y,m,d,i)
{
if(Settime) YMD_String[0] = '>';
else YMD_String[0] = ' ';
Format_DateTime(y,YMD_String+2);
Format_DateTime(m,YMD_String+5);
Format_DateTime(d,YMD_String+8);
strcpy(YMD_String + 11,WEEK[i]);
Display_String(YMD_String,0x00);
}
//調整時間函數
void Change_Time()
{
Settime = 0;
if( K1 == 0 || K2 == 0 )
{
TR0 = 0;
Settime = 1;
}
while(Settime)
{
while(K1 == 0)
{
Beep();
while(K1 == 0);
Change_Y_OR_MO_OR_D_OR_W++;
K1 = 1;
}
while(K2 == 0)
{
Beep();
while(K2 == 0);
Change_H_OR_M++;
K2 = 1;
}
if(K3 == 0 )
{
Beep();
while( K3 == 0);
switch(Change_Y_OR_MO_OR_D_OR_W)
{
case 1:
++Year;
break;
case 2:
{if (++Month >= 13) Month = 1;}
break;
case 3:
{if (++Day >= 31) Day = 1;}
break;
case 4:
{if (++i >= 8) i = 0;}
break;
}
switch(Change_H_OR_M)
{
case 1:
{if (++Hour >= 24) Hour = 0;}
break;
case 2:
{if (++Minute >= 59) Minute = 0;}
break;
}
}
else if(K4 == 0)
{
Beep();
while(K4 == 0);
switch(Change_Y_OR_MO_OR_D_OR_W)
{
case 1:
--Year;
break;
case 2:
{if (--Month == 0x00) Month = 12;}
break;
case 3:
{if (--Day == 0x00) Day = 31;}
break;
case 4:
{if (--i == 0xff) i = 0;}
break;
}
switch(Change_H_OR_M)
{
case 1:
{if (--Hour == 0xff) Hour = 23;}
break;
case 2:
{if (--Minute == 0xff) Minute = 59;}
break;
}
}
else if(K6 == 0)
{
Beep();
while( K6 == 0);
Settime = 0;
TR0 = 1;
}
Display_HMS(Hour,Minute,Second);
Display_YMDW(Year,Month,Day,i);
}
}
//定時器0中斷
void Time0() interrupt 1
{
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
if( ++MilliSecond == 20)
{
MilliSecond = 0;
if( ++Second == 60)
{
Second = 0;
if( ++Minute == 60)
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png
(8.44 KB, 下載次數: 63)
下載附件
2018-8-8 02:27 上傳
所有資料51hei提供下載:
case 1.rar
(55.49 KB, 下載次數: 50)
2018-8-7 13:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
Honeylulu
時間:
2018-11-8 09:04
真沒勁,分享出來整一堆只讀,無法修改編譯有意思嗎??不過還是感謝你分享
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩一区二
|
国产黄色在线观看
|
av在线免费播放
|
欧美日韩a
|
久久男人
|
成人在线播放
|
久久伊人精品一区二区三区
|
亚洲视频免费
|
正在播放国产精品
|
免费精品
|
欧美第一区
|
亚洲精品乱码
|
久久久久久久久久久丰满
|
日韩综合在线
|
欧美 日韩 国产 一区
|
中国一级特黄真人毛片
|
亚洲欧美在线一区
|
天天爽天天操
|
在线看av网址
|
99色播
|
日日干日日
|
毛片一区二区
|
青娱乐av
|
丁香综合
|
免费在线精品视频
|
日本免费一区二区三区视频
|
91av精品
|
蜜臀网
|
久久久久国产精品一区二区
|
国产亚洲成av人片在线观看桃
|
成人欧美一区二区
|
欧美在线观看一区
|
一区中文字幕
|
国产一区久久精品
|
天天精品综合
|
欧美一区二区三区四区五区无卡码
|
国产99小视频
|
91美女视频
|
最新超碰
|
精品亚洲永久免费精品
|
精品欧美一区免费观看α√
|