久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
紅外遙控器+DS1320+89C52+1602的電子時鐘程序 95%是自己寫的
[打印本頁]
作者:
daxiao
時間:
2015-3-22 02:35
標題:
紅外遙控器+DS1320+89C52+1602的電子時鐘程序 95%是自己寫的
本帖最后由 daxiao 于 2015-3-22 02:36 編輯
功能
1.時間顯示(完成) RAM2.5KB
2.整點報時 (完成) RAM2.5KB
3.量程為24小時的秒表(完成)RMA3.5KB
4.時間調整 (完成)RMA 4.5KB
5.鬧鐘 (完成)RAM4.8K
6.防盜警戒(未完成)
7.計算機 (未完成)
8.邏輯分析儀(未完成)
#include<reg52.h> //頭文件
#define uchar unsigned char //宏定義
#define uint unsigned int //宏定義
volatile char ws;
uchar lcd6;
uchar jm;
uchar n,y,r,s,f,m,z;
uchar ns,nf,nm;
uchar we;
uchar bla,blb,blc;
sbit ACC_7=ACC^7; //位寄存器
sbit SCLK=P1^3; //時鐘引腳定義
sbit DIO=P1^4; //IO引腳定義
sbit CE=P1^5; //讀、寫數據期間,必須為高
sbit LCD_RS=P1^0; //寄存器選擇位
sbit LCD_RW=P1^1; //讀寫控制位
sbit LCD_EN=P1^2; //開關
sbit FMQ=P3^7; //定義蜂鳴引腳
uchar code LCD[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46}; //LCD的數字整形碼
uchar code LCDDZ[13]={0x02,0x03,0x05,0x06,0x08,0x09,0x43,0x48,0x49,0x4b,0x4c,0x4e,0x4f};
uchar code LCD7_1[16]={"1.clock shows "}; //界面1入口,“時鐘顯示”
uchar code LCD7_2[16]={"2.second clock "}; //界面2入口,“秒的時鐘”
uchar code LCD7_3[16]={"3.alarm clock "}; //界面3入口,“鬧鐘”
uchar code LCD7_4[16]={"4.onguard "}; //界面4入口,“值班警戒”
uchar code LCD7_5[16]={"5.news "}; //界面5人口,"信息"
uchar code LCD7_6[16]={"6.time alter "}; //界面6修改時間
uchar code LCD8_0[16]={" 09 DZ1B "};
uchar code LCD1_0[16]={"20 . . "}; //界面1,時間顯示
uchar code LCD1_1[16]={"WEEK : : "}; //界面1,時間顯示
uchar code LCD2_0[16]={" 00:00:00 "}; //界面2,秒表
uchar code LCD3_0[16]={"alarm 00:00:00 "}; //界面3,時間設置
uchar code LCD4_0[16]={"00:00 - 00:00"}; //界面4,警戒時間設置
uchar code LCD5_0[16]; //界面5,信息欄記錄陌生人進人情況
uchar code LCD5_1[16]; //界面5,信息欄記錄陌生人進人情況
uchar code LCD5_2[16]; //界面5,信息欄記錄陌生人進人情況
uchar code LCD5_3[16]; //界面5,信息欄記錄陌生人進人情況
uchar code LCD5_4[16]; //界面5,信息欄記錄陌生人進人情況
uchar code LCD6_0[16]={"20 . . "};
uchar code LCD6_1[16]={"WEEK : : "};
uchar code LCDY[5];
uchar code LCDR[5];
uchar code LCDS[5];
uchar code LCDF[5];
uchar code LCDM[5];
//-------------------延時子函數 ---//
void delay(uint ms)
{
uchar ii,jj;
for(ii=0;ii<ms;ii++)
{
for(jj=0;jj<121;jj++)
{;}
}
}
//------------------X1302------//
void X1302(uchar add,uchar dat) //地址,數據
{
uchar aa;
CE=0; //關閉讀寫使能,讀、寫數據期間,必須為高
SCLK=0; //拉低時鐘線
CE=1; //開啟讀寫使能
for(aa=0;aa<8;aa++) //寫入地址
{
DIO=add&0x01; //把add的最低位送給數據線
SCLK=1; //時鐘拉高
add>>=1; //累加器右移1位
SCLK=0; //時鐘拉
}
for(aa=0;aa<8;aa++) //寫入數據
{
DIO=dat&0x01; //把要寫入1302的數據地位送到數據線
SCLK=1; //時鐘拉高,把數據發送出去
dat>>=1; //數據右移1位,把最低位去掉
SCLK=0; //把時鐘拉低,準備下一次發數據
}
SCLK=1; //寫完數據要把時鐘線拉高,要是讀完數據的話就要拉低時鐘線
CE=0; //關閉讀寫使能
return;
}
//-------------------D1302-------------//
uchar D1302(uchar addr) //讀數據子函數 輸入地址,返回數據
{
uchar ab,temp,dat1,dat2; //定義變量
CE=0; //關閉讀寫數據使能
SCLK=0; //時鐘拉低,準備要接收數據
CE=1; //開讀寫數據使能
for(ab=8;ab>0;ab--) //發地址
{
SCLK=0; //時鐘拉低,準備接收數據
temp=addr; //把地址送給變量temp
DIO=(bit)(temp&0x01); //傳送低字節
addr>>=1; //地址addr右移1位
SCLK=1; //時鐘拉高 ,讓1302讀入地址
}
for(ab=8;ab>0;ab--) //讀數據
{
ACC_7=DIO; // ACC-7=接收新的一位數據
SCLK=1; //時鐘拉高,告訴1302我接收到數據了!!
ACC>>=1; //ACC右移1位,把剛接到的數據移到低位去
SCLK=0; //時鐘拉低,告訴1302,請為我準備下一個數據
}
CE=0; //關閉讀寫數據使能
dat1=ACC; //把ACC的數據送給dat1
dat2=dat1/16; //數據轉換 dat2=數據的 "十六位"
dat1=dat1%16; //數據轉換 dat1=數據的 "個位"
dat1=dat1+dat2*10; //再一次數據轉換(把接收到的BCD碼轉換成十進制碼)
return(dat1); //反回讀到的數據
}
//-----------檢查LCD忙狀態 --//
void lcd_busy()
{
P0=0xff;
LCD_RS=0; //選擇指令寄存器
LCD_RW=1; //進行讀操作
LCD_EN=1; //使能
while((P0&0x80)==0x80);
LCD_EN=0; //關使能
}
//-----------------------------讀LCD顯示的數字--//
uchar lcd_sz(uchar sxs)
{
uchar xx;
delay(2);
LCD_RS=0; //選擇指令
LCD_RW=0; //選擇寫操作
LCD_EN=0; //關使能 ,讓P0數據線上數據
P0=(sxs|0x80); //DDRAM數據指針=80+地址變量
delay(2);
LCD_EN=1; //開使能 ,讓LCD讀單片機的指令
delay(5);
LCD_EN=0; //關使能
P0=0xff; //置高電平
LCD_RS=1; //選擇指令寄存器
LCD_RW=1; //進行讀操作
LCD_EN=1; //開使能
delay(2);
xx=P0; //記錄數據
LCD_EN=0; //關使能
return xx;
}
//----------------------寫指令數據到LCD --//
void lcd_wcmd(uchar cmd)
{
lcd_busy();
LCD_RS=0; //選擇寫操作
LCD_RW=0; //進行寫操作
LCD_EN=0; //關使能 ,讓數據線上數據
P0=cmd; //送指令代碼
delay(2);
LCD_EN=1; //開使能 ,讓單片機讀指令
delay(5);
LCD_EN=0; //關使能
return;
}
//-------------------------寫顯示數據到LCD --//
void lcd_wdat(uchar dat)
{
lcd_busy(); //讀忙
LCD_RS=1; //選擇數據寄存器
LCD_RW=0; //進行讀操作
LCD_EN=0; //關使能
P0=dat; //寫入要顯示的字符
LCD_EN=1; //開使能 ,讓LCD讀進數據
delay(2);
LCD_EN=0; //關使能 ,不讓LCD操作
return;
}
//----------------------設定顯示位置 pos是屏幕的地址 --//
void lcd_pos(uchar pos)
{
lcd_busy();
LCD_RS=0; //選擇寫操作
LCD_RW=0; //進行寫操作
LCD_EN=0; //關使能 ,讓數據線上數據
P0=(pos|0x80); //DDRAM數據指針=80+地址變量
delay(2);
LCD_EN=1; //開使能 ,讓單片機讀指令
delay(5);
LCD_EN=0; //關使能
return;
}
//-----------------------LCD初始化設定 --//
void lcd_init()
{
lcd_busy(); //讀忙
lcd_wcmd(0x3c); //工作方式設置8位長,兩行,5*7
delay(5); //延時5ms
lcd_wcmd(0x02);
delay(5); //延時5ms
lcd_wcmd(0x06); //設置輸入方式為AC是加1計數器,畫面禁止滾動
delay(5); //延時5ms
lcd_wcmd(0x0c); //顯示開,關光標
delay(5); //延時5mS
return;
}
//---------------閃動子程序 //
void fengming(uchar fm)
{
for(;fm<0;fm--)
{
FMQ=0;
lcd_wcmd(0x08); //關閉顯示
delay(200);
FMQ=1; //延時
lcd_wcmd(0x0c); //開顯示
delay(200);
}
return;
}
//----------------------- 紅外--//
void int_init(void) //初始化
{
EX0=1; //開外部中斷0
EX1=1; //INT1開
IT1=1; //負跳變觸發
EA=1; //開總開關
return;
}
//------------------------------------------------//
void interrupt0()interrupt 0 //總斷子函數
{
uchar i=0,j=0,k=0,us=0; //定義字符變量i j k us
uchar addr[4]={0}; //定義字符型數組
EX0=0; //關中斷總開關
for(i=0;i<255;i++) //9ms內有高電平認為是干擾
{
if(P3&0x04) //255的值實際時間為800us
{
EX0=1;
return;
}
}
while(!(P3&0x04)); //等待9ms低電平過去
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(P3&0x04); //等待4.5ms高電平過去
while(!(P3&0x04)); //等待0.56ms低電平后面的高電平
while(P3&0x04) //計算這個高電平的時間
{
for(us=0;us<=32;us++); //100us的延時語句
if((k++)>=30) //高電平時間過長退出程序
{
EX0=1;
return;
}
}
addr[i]=addr[i]>>1; //接收一位數據
if(k>=8)
addr[i]=addr[i]|0x80; //高電平大于0.56ms,則為1
k=0;
}
}
ws=addr[2];
FMQ=0;
for(j=5;j>0;j++)
{
for(i=0;i<121;i++)
{;}
}
FMQ=1;
EX0=1;
}
//------------------------------------------//
void interrupt2()interrupt 2 //總斷子函數
{
uchar d,e;
EX0=0;
FMQ=0;
for(bla=0;bla<3;bla++)
{
for(blb=0;blb<121;blb++)
{for(d=0;d<1000;d++)
{
for(e=0;e<40;e++)
{
;
}
FMQ=~FMQ;
}
for(d=0;d<350;d++)
{
for(e=0;e<140;e++)
{
;
}
FMQ=~FMQ;
}
}
}
FMQ=1;
EX0=1;
}
//---------------------------------主菜單 JM7---------/
void JM7CD()
{
uchar K7=1;
uchar i;
if(jm==0x70)
{
jm=0x71;
}
lcd_wcmd(0x0f);
delay(2);
ws=0x01;
while(K7)
{
while(ws==0x00);
{
switch(ws)
{
case 0x43: //確認
jm%=16;
jm*=16;
K7=0;
break;
case 0x47: //確認
jm%=16;
jm*=16;
K7=0;
break;
case 0x44: //上一條
if(jm>0x71)
{
jm-=0x01;
}
break;
case 0x07: //上一條
if(jm>0x71)
{
jm-=0x01;
}
break;
case 0x19: //上一條
if(jm>0x71)
{
jm-=0x01;
}
break;
case 0x40: //下一條
if(jm<0x76)
{
jm+=0x01;
}
break;
case 0x15: //下一條
if(jm<0x76)
{
jm+=0x01;
}
break;
case 0x0d: //下一條
if(jm<0x76)
{
jm+=0x01;
}
break;
case 0x0c: //第1界面
jm=0x10;
K7=0;
break;
case 0x18: //第2界面
jm=0x20;
K7=0;
break;
case 0x5e: //第3界面
jm=0x30;
K7=0;
break;
case 0x08: //第4界面
jm=0x40;
K7=0;
break;
case 0x1c: //第5界面
jm=0x50;
K7=0;
break;
case 0x5a: //第6界面
jm=0x60;
K7=0;
break;
default:
break;
}
}
delay(10);
{
switch(jm)
{
case 0x71:
lcd_pos(0x00);
delay(2);
for(i=0;i<16;i++)
{
lcd_wdat(LCD7_1[i]); // 1.clock shows 界面1入口,“時鐘顯示”
delay(2);
}
lcd_pos(0x40);
delay(2);
for(i=0;i<16;i++)
{
lcd_wdat(LCD7_2[i]); //2.second clock
delay(2);
}
break;
case 0x72:
for(i=0;i<16;i++)
{
lcd_wdat(LCD7_2[i]); //2.second clock
delay(2);
}
lcd_pos(0x40);
for(i=0;i<16;i++)
{
lcd_wdat(LCD7_3[i]); //3.alarm clock 界面3入口,“鬧鐘”
delay(2);
}
break;
case 0x73:
for(i=0;i<16;i++)
{
lcd_wdat(LCD7_3[i]); //3.second clock
delay(2);
}
lcd_pos(0x40);
for(i=0;i<16;i++)
{
lcd_wdat(LCD7_4[i]); //4.alarm clock 界面3入口,“鬧鐘”
delay(2);
}
break;
case 0x74: //4.alarm clock 界面3入口,“鬧鐘”
for(i=0;i<16;i++)
{
lcd_wdat(LCD7_4[i]);
delay(2);
}
lcd_pos(0x40);
for(i=0;i<16;i++) //5
{
lcd_wdat(LCD7_5[i]);
delay(2);
}
break;
case 0x75:
for(i=0;i<16;i++)
{ // 5
lcd_wdat(LCD7_5[i]);
delay(2);
}
lcd_pos(0x40);
for(i=0;i<16;i++)
{ //6
lcd_wdat(LCD7_6[i]);
delay(2);
}
break;
case 0x76:
for(i=0;i<16;i++)
{ // 5
lcd_wdat(LCD7_6[i]);
delay(2);
}
lcd_pos(0x40);
for(i=0;i<16;i++)
{ //6
lcd_wdat(LCD8_0[i]);
delay(2);
}
break;
default:break;
}
lcd_pos(0x00);
delay(2);
}
ws=0x00;
}
lcd_wcmd(0x0c);
return;
}
//-------------------------------------------JM1 顯示時間//
void JM1SJ()
{
uchar K1=1;
lcd_pos(0x00);
for(K1=0;K1<16;K1++)
{
lcd_wdat(LCD1_0[K1]);
delay(2);
}
lcd_pos(0x40);
for(K1=0;K1<16;K1++)
{
lcd_wdat(LCD1_1[K1]);
delay(2);
}
K1=1;
while(K1)
{
n=D1302(0x8d); //讀1302的年
delay(1);
y=D1302(0x89); //讀1302的月
delay(1);
r=D1302(0x87); //讀1302的日
delay(1);
s=0x1f&D1302(0x85); //讀1302的時
delay(1);
f=0x7f&D1302(0x83); //讀1302的分
delay(1);
m=0x7f&D1302(0x81); //讀1302的秒
delay(1);
z=D1302(0x8b); //讀1302的星期
delay(1);
lcd_pos(0x02); //定位
delay(2);
lcd_wdat(LCD[n/10]); //寫 LCD1602顯示十位年
delay(1);
lcd_wdat(LCD[n%10]); //寫LCD1602顯示年
delay(1);
lcd_pos(0x05); //定位
delay(2);
lcd_wdat(LCD[y/10]); //寫顯示十位月
delay(1);
lcd_wdat(LCD[y%10]); //寫顯示月
delay(1);
lcd_pos(0x08); //定位
delay(2);
lcd_wdat(LCD[r/10]); //寫顯示十位日
delay(1);
lcd_wdat(LCD[r%10]); //寫顯示日
delay(1);
lcd_pos(0x44); //定位
delay(2);
lcd_wdat(LCD[z]); //寫顯示星期
delay(1);
lcd_pos(0x48); //定位
delay(2);
lcd_wdat(LCD[s/10]); //顯示十位時
delay(1);
lcd_wdat(LCD[s%10]); //顯示時
delay(1);
lcd_pos(0x4b); //定位
delay(2);
lcd_wdat(LCD[f/10]); //顯示十位分
delay(1);
lcd_wdat(LCD[f%10]); //顯示分
delay(1);
lcd_pos(0x4e); //定位
delay(2);
lcd_wdat(LCD[m/10]); //顯示秒的十位
delay(2);
lcd_wdat(LCD[m%10]); //顯示秒的個位
delay(2);
while(s==ns&&f==nf&&m==nm&&we==1) //鬧鐘
{
while(ws==0x00)
{
FMQ=0;
for(s=5;s>0;s++)
{
for(m=0;m<121;m++)
{;}
}
FMQ=1;
}
ws=0x99;
s++;
}
while(f==0x00||f==0x1e) //整點報時
{
while(m<0x01)
{
FMQ=0;
delay(3);
m=0x03;
}
FMQ=1;
f++;
}
while(ws==0x45||ws==0x46) // 退出
{
K1=0;
jm=0x70;
ws=0x00;
}
}
return;
}
//------------------------------------------JM2MB 秒表//
void JM2MB()
{
uchar K2=1; //定義變量K2
uint bs,bf,bm; //定義變量bs,bf,bm 時分秒
uchar i,j; //定義變量i,j
lcd_wcmd(0x01); // 寫清屏指令到LCD
lcd_pos(0x00); //設定LCD的顯示位置0x00
for(i=0;i<16;i++) //把秒表的摸塊顯示出來 00:00:00
{
lcd_wdat(LCD2_0[i]);
}
while(K2) //進入K2函數循環
{
bs=0x1f&D1302(0x85); //讀當前時間時
bf=0x7f&D1302(0x83); //讀當前時間分
bm=0x7f&D1302(0x81); //讀當前時間秒
delay(10);
while(ws==0x43) //開始計時循環
{
j=0x7f&D1302(0x81); //變量j賦值時間秒
i=j;
if(j<bm) //判斷j和bm那個大
{j=bm-j;
j=0x3c-j;
}
else{j-=bm;}
lcd_pos(0x0a); //定位
delay(2);
lcd_wdat(LCD[j/0x0a]); //顯示秒的十位
delay(2);
lcd_wdat(LCD[j%0x0a]); //顯示秒的個位
delay(2);
delay(2);
j=0x7f&D1302(0x83); //變量j賦值時間分
if(j<bf&&i<bm)
{j=bf-j;
j=0x3c-j;
j-=0x01;
}
else if(j<bf&&i>=bm)
{
j=bf-j;
j=0x3c-j;
}
else if(j>bf&&i<bm)
{
j-=bf;
j-=0x01;
}
else {j-=bf;}
lcd_pos(0x07); //定位
delay(2);
lcd_wdat(LCD[j/0x0a]); //顯示十位分
delay(1);
lcd_wdat(LCD[j%0x0a]); //顯示分
delay(1);
delay(2);
i=0x7f&D1302(0x83); //讀當前時間分
j=0x1f&D1302(0x85); //讀當前時間時
if(j<bs&&i<bf)
{j=bs-j;
j=0x3c-j;
j-=0x01;
}
else if(j<bs&&i>=bf)
{
j=bs-j;
j=0x3c-j;
}
else if(j>bs&&i<bf)
{
j-=bs;
j-=0x01;
}
else {j-=bs;}
lcd_pos(0x04); //定位
delay(2);
lcd_wdat(LCD[j/0x0a]); //顯示十位分
delay(1);
lcd_wdat(LCD[j%0x0a]); //顯示分
delay(1);
}
switch(ws)
{
case 0x46:jm=0x70;ws=0x00;K2=0;break; //主菜單
case 0x45:jm=0x70;ws=0x00;K2=0;break; //退出
default:break;
}
}
return;
}
//--------------------------鬧鐘設置 ----//
void JM3NZ()
{
uchar K3; //定義K3開關
bit K3x1=1,K3x2=0,K3x3=0,K3x4=0,K3x5=0,K3x6=0,K3x7=0; //定義光標標志位
lcd_wcmd(0x01); //清屏
lcd_pos(0x00); //設定顯示的位置
for(K3=0;K3<16;K3++)
{
lcd_wdat(LCD3_0[K3]); //顯示摸
}
lcd_pos(0x06); //設定LCD的顯示位置
lcd_wcmd(0x0f); //寫指令到LCD顯示光標
K3=1;
while(K3)
{
while(K3x1)
{
lcd_pos(0x06);
switch(ws) //十小時設定
{
case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x1=0;K3x2=1;break; //按下0
case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x1=0;K3x2=1;break; //按下1
case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x1=0;K3x2=1;break; //按下2
case 0x0d:ws=0x00;K3x1=0;K3x2=1;break; //下一個
case 0x40:ws=0x00;K3x1=0;K3x2=1;break; //下一個
case 0x44:ws=0x00;K3x1=0;K3x7=1;break; //上一個
case 0x19:ws=0x00;K3x1=0;K3x7=1;break; //上一個
case 0x43:ws=0x00;K3x1=0;K3=0;break; //確定
case 0x45:ws=0x00;K3x1=0;K3=0;break; //退出
case 0x46:ws=0x00;K3x1=0;K3=0;break; //主菜單
default:break;
}
}
while(K3x2&&lcd_sz(0x06)==LCD[2])
{
lcd_pos(0x07);
switch(ws) //個小時設定
{
case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x2=0;K3x4=1;break; //按下0
case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x2=0;K3x4=1;break; //按下1
case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x2=0;K3x4=1;break; //按下2
case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x2=0;K3x4=1;break; //按下3
case 0x0d:ws=0x00;K3x2=0;K3x4=1;break; //下一個
case 0x40:ws=0x00;K3x2=0;K3x4=1;break; //下一個
case 0x44:ws=0x00;K3x2=0;K3x1=1;break; //上一個
case 0x19:ws=0x00;K3x2=0;K3x1=1;break; //上一個
case 0x43:K3x2=0;K3=0;break; //確定
case 0x45:ws=0x00;K3x2=0;K3=0;break; //退出
case 0x46:ws=0x00;K3x2=0;K3=0;break; //主菜單
default:break;
}
}
while(K3x2)
{
lcd_pos(0x07);
switch(ws) //個小時設定
{
case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x2=0;K3x4=1;break; //按下0
case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x2=0;K3x4=1;break; //按下1
case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x2=0;K3x4=1;break; //按下2
case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x2=0;K3x4=1;break; //按下3
case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x2=0;K3x4=1;break; //按下4
case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x2=0;K3x4=1;break; //按下5
case 0x5a:ws=0x00;lcd_wdat(LCD[6]);K3x2=0;K3x4=1;break; //按下6
case 0x42:ws=0x00;lcd_wdat(LCD[7]);K3x2=0;K3x4=1;break; //按下7
case 0x52:ws=0x00;lcd_wdat(LCD[8]);K3x2=0;K3x4=1;break; //按下8
case 0x4a:ws=0x00;lcd_wdat(LCD[9]);K3x2=0;K3x4=1;break; //按下9
case 0x0d:ws=0x00;K3x2=0;K3x4=1;break; //下一個
case 0x40:ws=0x00;K3x2=0;K3x4=1;break; //下一個
case 0x19:ws=0x00;K3x2=0;K3x1=1;break; //上一個
case 0x44:ws=0x00;K3x2=0;K3x1=1;break; //上一個
case 0x43:K3x2=0;K3=0;break; //確定
case 0x45:ws=0x00;K3x2=0;K3=0;break; //退出
case 0x46:ws=0x00;K3x2=0;K3=0;break; //主菜單
default:break;
}
}
while(K3x4)
{
lcd_pos(0x09);
switch(ws) //十分設定
{
case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x4=0;K3x5=1;break; //按下0
case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x4=0;K3x5=1;break; //按下1
case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x4=0;K3x5=1;break; //按下2
case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x4=0;K3x5=1;break; //按下3
case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x4=0;K3x5=1;break; //按下4
case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x4=0;K3x5=1;break; //按下5
case 0x0d:ws=0x00;K3x4=0;K3x5=1;break; //下一個
case 0x40:ws=0x00;K3x4=0;K3x5=1;break; //下一個
case 0x19:ws=0x00;K3x4=0;K3x2=1;break; //上一個
case 0x44:ws=0x00;K3x4=0;K3x2=1;break; //上一個
case 0x43:K3x4=0;K3=0;break; //確定
case 0x45:ws=0x00;K3x4=0;K3=0;break; //退出
case 0x46:ws=0x00;K3x4=0;K3=0;break; //主菜單
default:break;
}
}
while(K3x5)
{
lcd_pos(0x0a);
switch(ws) //個分設定
{
case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x5=0;K3x6=1;break; //按下0
case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x5=0;K3x6=1;break; //按下1
case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x5=0;K3x6=1;break; //按下2
case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x5=0;K3x6=1;break; //按下3
case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x5=0;K3x6=1;break; //按下4
case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x5=0;K3x6=1;break; //按下5
case 0x5a:ws=0x00;lcd_wdat(LCD[6]);K3x5=0;K3x6=1;break; //按下6
case 0x42:ws=0x00;lcd_wdat(LCD[7]);K3x5=0;K3x6=1;break; //按下7
case 0x52:ws=0x00;lcd_wdat(LCD[8]);K3x5=0;K3x6=1;break; //按下8
case 0x4a:ws=0x00;lcd_wdat(LCD[9]);K3x5=0;K3x6=1;break; //按下9
case 0x0d:ws=0x00;K3x5=0;K3x6=1;break; //下一個
case 0x40:ws=0x00;K3x5=0;K3x6=1;break; //下一個
case 0x19:ws=0x00;K3x5=0;K3x4=1;break; //上一個
case 0x44:ws=0x00;K3x5=0;K3x4=1;break; //上一個
case 0x43:K3x5=0;K3=0;break; //確定
case 0x45:ws=0x00;K3x5=0;K3=0;break; //退出
case 0x46:ws=0x00;K3x5=0;K3=0;break; //主菜單
default:break;
}
}
while(K3x6)
{
lcd_pos(0x0c);
switch(ws) //十秒設定
{
case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x6=0;K3x7=1;break; //按下0
case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x6=0;K3x7=1;break; //按下1
case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x6=0;K3x7=1;break; //按下2
case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x6=0;K3x7=1;break; //按下3
case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x6=0;K3x7=1;break; //按下4
case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x6=0;K3x7=1;break; //按下5
case 0x0d:ws=0x00;K3x6=0;K3x7=1;break; //下一個
case 0x40:ws=0x00;K3x6=0;K3x7=1;break; //下一個
case 0x19:ws=0x00;K3x6=0;K3x5=1;break; //上一個
case 0x44:ws=0x00;K3x6=0;K3x5=1;break; //上一個
case 0x43:K3x6=0;K3=0;break; //確定
case 0x45:ws=0x00;K3x6=0;K3=0;break; //退出
case 0x46:ws=0x00;K3x6=0;K3=0;break; //主菜單
default:break;
}
}
while(K3x7)
{
lcd_pos(0x0d);
switch(ws) //個秒設定
{
case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x7=0;K3x1=1;break; //按下0
case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x7=0;K3x1=1;break; //按下1
case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x7=0;K3x1=1;break; //按下2
case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x7=0;K3x1=1;break; //按下3
case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x7=0;K3x1=1;break; //按下4
case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x7=0;K3x1=1;break; //按下5
case 0x5a:ws=0x00;lcd_wdat(LCD[6]);K3x7=0;K3x1=1;break; //按下6
case 0x42:ws=0x00;lcd_wdat(LCD[7]);K3x7=0;K3x1=1;break; //按下7
case 0x52:ws=0x00;lcd_wdat(LCD[8]);K3x7=0;K3x1=1;break; //按下8
case 0x4a:ws=0x00;lcd_wdat(LCD[9]);K3x7=0;K3x1=1;break; //按下9
case 0x0d:ws=0x00;K3x7=0;K3x1=1;break; //下一個
case 0x40:ws=0x00;K3x7=0;K3x1=1;break; //下一個
case 0x19:ws=0x00;K3x7=0;K3x6=1;break; //上一個
case 0x44:ws=0x00;K3x7=0;K3x6=1;break; //上一個
case 0x43:K3x7=0;K3=0;break; //確定
case 0x45:ws=0x00;K3x7=0;K3=0;break; //退出
case 0x46:ws=0x00;K3x7=0;K3=0;break; //主菜單
default:break;
}
}
while(ws==0x43) //按下確定鍵,保存鬧鐘時間
{
while(lcd_sz(0x06)==LCD[0]){ns=0x00;}
while(lcd_sz(0x07)==LCD[1]){ns+=0x01;}
}
}
jm=0x70;
lcd_wcmd(0x0c);
}
//------------------------警戒設置-----//
void JM4JJ()
{
uchar K4;
lcd_wcmd(0x01);
lcd_pos(0x00);
for(K4=0;K4<16;K4++)
{
lcd_wdat(LCD4_0[K4]);
}
while(1);
}
//--------------------------入侵信息---//
void JM5XX()
{
uchar K5;
lcd_wcmd(0x01);
lcd_pos(0x00);
for(K5=0;K5<16;K5++)
{
lcd_wdat(LCD6_0[K5]);
}
delay(2);
lcd_pos(0x40);
for(K5=0;K5<16;K5++)
{
lcd_wdat(LCD6_1[K5]);
}
while(1);
}
//------------------------------修改時間-----//
void JM6SJ()
{
uchar K6;
lcd_wcmd(0x01);
lcd_pos(0x00);
for(K6=0;K6<16;K6++)
{
lcd_wdat(LCD6_0[K6]);
}
delay(2);
lcd_pos(0x40);
for(K6=0;K6<16;K6++)
{
lcd_wdat(LCD6_1[K6]);
}
K6=1;
while(K6)
{
;
}
}
//------------------------------主函數 //
void main()
{
uchar bl;
int_init(); //中斷 初始化
bl=D1302(0x81);
bl=0x7f&bl;
X1302(0x80,bl);
delay(1);
X1302(0x8e,0x00);
X1302(0x90,0xa5);
X1302(0x8e,0x80); //關閉寫,但可以讀
lcd_init(); //LCD初始化
delay(2);
lcd_pos(0x00); //設定顯示的位置
jm=0x10;
while(1)
{
if(jm==0x70){JM7CD();}
else if(jm==0x10){JM1SJ();} //時間
else if(jm==0x20){JM2MB();} // 秒表
else if(jm==0x30){JM3NZ();} // 鬧鐘
else if(jm==0x40){JM4JJ();} // 警戒
else if(jm==0x50){JM5XX();} // 信息
else if(jm==0x60){JM6SJ();} //時間修改
else{;}
}
}
復制代碼
作者:
miuifen
時間:
2015-3-22 16:36
感謝分享
作者:
miuifen
時間:
2015-3-22 16:38
有原理圖 就完美了
作者:
lesson18
時間:
2015-4-16 23:30
學習一下<><><><><><><><><><><><><><><><
>
作者:
miskel
時間:
2015-4-17 17:06
1602太耗電了點,要是用段碼液晶的應該省電點
作者:
kico
時間:
2015-4-23 21:11
這么多代碼,頭都看暈了
作者:
XiaoBei
時間:
2015-5-10 11:29
挺好的~
作者:
嘉輝先生
時間:
2015-5-24 15:05
樓主我有個問題,這個紅外遙控器鍵值是怎么知道的,比如按某一個鍵顯示第一個界面,這個按鍵是怎么定義的?
作者:
牽只羊
時間:
2015-5-28 14:14
代碼應該還可以精簡吧
作者:
kico
時間:
2015-11-16 21:12
只有源程序,怎么沒電路圖了
作者:
neemxyang
時間:
2015-11-19 21:19
把資源打包吧?
作者:
wc86110
時間:
2015-11-22 13:06
LZ 好有耐心哦,洞洞板都能焊接得如此工整。
作者:
keke1304843512
時間:
2017-6-2 09:25
原理圖有嗎?
作者:
jialishoushi
時間:
2017-6-18 02:32
謝謝分享 下載收藏了
作者:
未來可期
時間:
2019-4-13 14:42
怎么收藏
作者:
rayin
時間:
2020-11-15 14:32
本壇有你更精彩,期待樓主更多力作
作者:
kiccleaf
時間:
2020-12-2 23:20
能寫這么多代碼,值得學習
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
在线一区二区国产
|
日韩欧美精品一区
|
国产美女黄色片
|
91av免费观看
|
久久久精品一区
|
国产精品国色综合久久
|
久久久99国产精品免费
|
国产精品99久久久久久人
|
久久这里只有精品首页
|
欧洲一级毛片
|
av在线免费看网址
|
欧美久久国产精品
|
国产精品99精品久久免费
|
九九热久久免费视频
|
亚洲激情综合
|
中文字幕不卡
|
亚洲欧美在线观看
|
精品一区二区三区在线观看国产
|
yiren22综合网成人
|
中文字幕视频网
|
精品视频免费
|
高清成人av
|
久久精品国产清自在天天线
|
精品av天堂毛片久久久借种
|
久久一区二区视频
|
在线中文字幕亚洲
|
成人精品一区二区三区
|
色婷婷亚洲国产女人的天堂
|
天天av天天好逼
|
亚洲第一区国产精品
|
日韩成人在线一区
|
精品欧美一区二区三区久久久
|
亚洲综合一区二区三区
|
人人叉
|
国产成人一区二区
|
欧美日韩国产不卡
|
在线视频一区二区
|
国产精品亚洲视频
|
99视频精品
|
一区二区三区日韩精品
|
亚洲欧美日韩系列
|