麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

可調鬧鐘lcd時鐘

2019-11-10 20:01:03
字體:
來源:轉載
供稿:網友
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義#include<intrins.h>#include "i2c.h"http://sbit LATCH1=P2^2; //定義鎖存使能端口 段鎖存//sbit LATCH2=P2^3; //位鎖存sbit RS = P2^4; //定義端口 sbit RW = P2^5;sbit EN = P2^6;sbit SPK = P2^7;#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0 //定義數據端口 程序中遇到DataPort 則用P0 替換#define KeyPort P1bit KeyPRessFlag;//定義按鍵標志位unsigned char sec;unsigned char min;unsigned char hour;unsigned char second;unsigned char minute;unsigned char hours;unsigned char dat[3] = 0;/*------------------------------------------------ uS延時函數------------------------------------------------*/void DelayUs2x(unsigned char t){ while(--t);}/*------------------------------------------------ mS延時函數------------------------------------------------*/void DelayMs(unsigned char t){ while(t--) { //大致延時1mS DelayUs2x(245); DelayUs2x(245); }}/*------------------------------------------------ 外部中斷0初始化------------------------------------------------*/void Init_INT0(void){ EA=1; //全局中斷開 EX0=1; //外部中斷0開 IT0=1; //邊沿觸發}/*------------------------------------------------ 外部中斷0程序------------------------------------------------*/void ISR_INT0(void) interrupt 0 { KeyPressFlag=1; //表明按鍵有動作,可以進行按鍵掃描}/*------------------------------------------------ 按鍵掃描函數,返回掃描鍵值------------------------------------------------*/unsigned char KeyScan(void) //鍵盤掃描函數,使用行列逐級掃描法{ unsigned char Val; KeyPort=0xf0;//高四位置高,低四位拉低 if(KeyPort!=0xf0)//表示有按鍵按下 { DelayMs(10); //去抖 if(KeyPort!=0xf0) { //表示有按鍵按下 KeyPort=0xfe; //檢測第一行 if(KeyPort!=0xfe) { Val=KeyPort&0xf0; Val+=0x0e; while(KeyPort!=0xfe); DelayMs(10); //去抖 while(KeyPort!=0xfe); return Val; } KeyPort=0xfd; //檢測第二行 if(KeyPort!=0xfd) { Val=KeyPort&0xf0; Val+=0x0d; while(KeyPort!=0xfd); DelayMs(10); //去抖 while(KeyPort!=0xfd); return Val; } KeyPort=0xfb; //檢測第三行 if(KeyPort!=0xfb) { Val=KeyPort&0xf0; Val+=0x0b; while(KeyPort!=0xfb); DelayMs(10); //去抖 while(KeyPort!=0xfb); return Val; } KeyPort=0xf7; //檢測第四行 if(KeyPort!=0xf7) { Val=KeyPort&0xf0; Val+=0x07; while(KeyPort!=0xf7); DelayMs(10); //去抖 while(KeyPort!=0xf7); return Val; } } } return 0xff;}/*------------------------------------------------ 按鍵值處理函數,返回掃鍵值------------------------------------------------*/unsigned char KeyPro(void){ switch(KeyScan()) { case 0x7e: { sec++; if(sec == 60) { sec = 0; } break; } case 0x7d: { min++; if(min == 60) { min = 0; } break; } case 0x7b: { hour++; if(hour == 24) { hour =0 ; } break; } case 0x77: { second++; if(second == 60) { second = 0; } break; } case 0xbe: { minute++; if(minute == 60) { minute = 0; } break; } case 0xbd: { hours++; if(hours == 24) { hours = 0; } break; } /* case 0xbb:;break;//6 case 0xb7:return 7;break;//7 case 0xde:return 8;break;//8 case 0xdd:return 9;break;//9 case 0xdb:return 10;break;//a case 0xd7:return 11;break;//b case 0xee:return 12;break;//c case 0xed:return 13;break;//d case 0xeb:return 14;break;//e case 0xe7:return 15;break;//f*/ default:return 0xff;break; }}/*------------------------------------------------ 判忙函數------------------------------------------------*/ bit LCD_Check_Busy(void) { DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80); }/*------------------------------------------------ 寫入命令函數------------------------------------------------*/ void LCD_Write_Com(unsigned char com) { // while(LCD_Check_Busy()); //忙則等待 DelayMs(5); RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; }/*------------------------------------------------ 寫入數據函數------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) { //while(LCD_Check_Busy()); //忙則等待 DelayMs(5); RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; }/*------------------------------------------------ 清屏函數------------------------------------------------*/ void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5); }/*------------------------------------------------ 寫入字符串函數------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行 } else { LCD_Write_Com(0xC0 + x); //表示第二行 } while (*s) { LCD_Write_Data( *s); s ++; } }/*------------------------------------------------ 寫入字符函數------------------------------------------------*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) { LCD_Write_Com(0x80 + x); } else { LCD_Write_Com(0xC0 + x); } LCD_Write_Data( Data); }/*------------------------------------------------ 初始化函數------------------------------------------------*/ void LCD_Init(void) { LCD_Write_Com(0x38); /*顯示模式設置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*顯示關閉*/ LCD_Write_Com(0x01); /*顯示清屏*/ LCD_Write_Com(0x06); /*顯示光標移動設置*/ DelayMs(5); LCD_Write_Com(0x0C); /*顯示開及光標設置*/ }void ISR_time0() interrupt 1{ unsigned char i; EA = 0; TMOD = 0x01; TH0 = 0x3c; TL0 = 0xb0; i++; if(i == 20) { i = 0; sec++; } EA = 1; }void time_add(){ if(sec == 60) { sec = 0; min++; } if(min == 60) { min = 0; hour++; } if(hour == 24) { hour = 0; } if(sec == second && min == minute && hour == hours) { SPK = !SPK; DelayMs(5); }}/*------------------------------------------------ 主函數------------------------------------------------*/ void main(void) { IRcvStr(0xae,80,dat,16); sec = dat[0]; min = dat[1]; hour = dat[2]; TMOD = 0x01; TH0 = 0x3c; TL0 = 0xb0; TR0 = 1; EA = 1; ET0 = 1; Init_INT0(); LCD_Init(); LCD_Clear();//清屏 DelayMs(5); while (1) { time_add(); KeyPort=0xf0; // 賦值用于中斷檢測 if(KeyPressFlag==1) { KeyPressFlag=0; //按鍵標志清零,以便下次檢測 KeyPro(); } LCD_Write_Char(7,0,'0' + sec%10); LCD_Write_Char(6,0,'0' + sec/10); dat[0] = sec; LCD_Write_Char(5,0,0x3a); LCD_Write_Char(4,0,'0' + min%10); LCD_Write_Char(3,0,'0' + min/10); dat[1] = min; LCD_Write_Char(2,0,0x3a); LCD_Write_Char(1,0,'0' + hour%10); LCD_Write_Char(0,0,'0' + hour/10); dat[2] = hour; LCD_Write_Char(0,1,'a'); LCD_Write_Char(1,1,'l'); LCD_Write_Char(2,1,'a'); LCD_Write_Char(3,1,'r'); LCD_Write_Char(4,1,'m'); LCD_Write_Char(5,1,0x3a); LCD_Write_Char(6,1,'0' + second%10); LCD_Write_Char(7,1,'0' + second/10); LCD_Write_Char(8,1,0x3a); LCD_Write_Char(9,1,'0' + minute%10); LCD_Write_Char(10,1,'0' + minute/10); LCD_Write_Char(11,1,0x3a); LCD_Write_Char(12,1,'0' + hours%10); LCD_Write_Char(13,1,'0' + hours/10); ISendStr(0xae,80,dat,16); }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 3344永久免费 | 免费a级观看 | 蜜桃传媒视频麻豆第一区免费观看 | 91社区在线观看 | 精品中文字幕在线观看 | 视频一区二区三区在线播放 | 日韩一级片 | 一级毛片在线观看视频 | 中文字幕网在线 | 九九热九九爱 | 久久精品亚洲一区二区三区观看模式 | 国产精品视频免费网站 | 特级毛片a级毛片100免费 | 999精品国产 | 久国久产久精永久网页 | 噜噜色av | 成人在线观看免费爱爱 | 欧美成人一级片 | 欧美一级成人 | 99爱视频在线观看 | 日韩视频www | 日本一区二区不卡在线观看 | www日韩在线观看 | 欧美另类在线视频 | 噜噜噜躁狠狠躁狠狠精品视频 | 99最新网址 | 一道本不卡一区 | 中文字幕亚洲一区二区三区 | 欧美黄一级 | 久久艹精品| 欧美精品a∨在线观看不卡 午夜精品影院 | 最新久久免费视频 | 精久久久| 久久人人爽人人爽人人片av高清 | 欧美区在线 | 亚洲第一激情 | 久久精品中文字幕一区二区三区 | 黄色片视频免费观看 | 久久伊人国产精品 | 国产亚洲精品久久久久久久久 | 国产福利不卡一区二区三区 |