Discuz! Board

 找回密碼
 立即註冊
搜索
熱搜: 活動 交友 discuz
查看: 876|回復: 0
打印 上一主題 下一主題

單片機壆習——利用單片機內部中斷制作簡易電子表

[複製鏈接]

2784

主題

2788

帖子

8463

積分

管理員

Rank: 9Rank: 9Rank: 9

積分
8463
跳轉到指定樓層
樓主
發表於 2018-6-13 11:58:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
lcde=0; //LCD1602初始化
le=0;
leden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x01);
write_com(0x80);
題目:利用單片機內部中斷制作簡易電子表
本文引用地址:
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="2009-02-01 Mon.";
uchar code table1[]=" 00:00:00";
uchar code xingqi[]="Mon. Tue. Wed. Thu. Fri. Sat. Sun.";
uchar num,sfcount;
char hour,min,sec,week,day,month,year,rmonth;
sbit lcdrs=P1^7; //端口定義
sbit lcdrw=P1^6;
sbit lcde=P2^4;
sbit le=P3^6;
sbit leden=P2^5;
sbit dkle=P3^7;
sbit sf=P1^0;
sbit sup=P1^1;
void delay(uint);//函數聲明
}
}
char keyscan() //按鍵掃描子函數
{
if(sf==0)//功能鍵
{
delay(2);
if(sf==0)
{
while(!sf);
sfcount++;
if(sfcount==1) //秒針閃爍
{
TR0=0;
write_com(0x80+0x40+9);
write_com(0x0f);
}
if(sfcount==2) //分針閃爍
{
write_com(0x80+0x40+6);
}
if(sfcount==3) //時針閃爍
{
write_com(0x80+0x40+3);
}
if(sfcount==4) //星期閃爍
{
write_com(0x80+0x0d);
}
if(sfcount==5)//天閃爍
{
write_com(0x80+9);
}
if(sfcount==6)//月閃爍
{
write_com(0x80+6);
}
if(sfcount==7)//年閃爍
{
write_com(0x80+3);
}
if(sfcount==8)//取消閃爍
{
sfcount=0;
write_com(0x0c);
TR0=1;
}
}
}
if(sup==0) //調節時間(上升鍵)
{
delay(5);
if(sup==0)
{
while(!sup);
if(sfcount==1)//調節秒
{
sec++;
if(sec==60)
sec=0;
write_time(8,sec);
write_com(0x80+0x40+9);
}
if(sfcount==2) //調節分鍾
{
min++;
if(min==60)
min=0;
write_time(5,min);
write_com(0x80+0x40+6);
}
if(sfcount==3) //調節小時
{
hour++;
if(hour==60)
hour=0;
write_time(2,hour);
write_com(0x80+0x40+3);
}
if(sfcount==4) //調節星期
{
week++;
if(week==7)
week=0;
write_xingqi(week);
write_com(0x80+0x0d);
}
if(sfcount==5) //調節日
{
day++;
if(day==32)
day=1;
write_riqi(8,day);
write_com(0x80+9);
}
if(sfcount==6) //調節月
{
month++;
if(month==13)
month=1;
write_riqi(5,month);
write_com(0x80+6);
}
if(sfcount==7) //調節年
{
year++;
if(year==100)
year=9;
write_riqi(2,year);
write_com(0x80+3);
}
}
}
return month;
}
void main() //main函數
{
init();
while(1)
{
rmonth=keyscan();
}
}
void time0() interrupt 1//中斷子函數
{
uchar tt;
TH0=0x3c;
TL0=0xb0;
tt++;
if(tt==20)
{
tt=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
week++;
if(week==7)
week=0;
write_xingqi(week);
write_com(0x80+0x0b);
if((rmonth==1)||(rmonth==3)||(rmonth==5)||(rmonth==7)||(rmonth==8)||(rmonth==10)||(rmonth==12))//有31天的月份
{
day++;
if(day==32)
{
day=1;
month++,早洩的原因;
if(month==13)
{
month=1;
year++;
if(year==100)
year=9;
write_riqi(2,day);
write_com(0x80+3);
}
write_riqi(5,month);
write_com(0x80+6);
}
}
else if((rmonth==4)||(rmonth==6)||(rmonth==9)||(rmonth==11))//有30天的月份
{
day++;
if(day==31)
{
day=1;
month++;
if(month==13)
{
month=1;
year++;
if(year==100)
year=9;
write_riqi(2,day);
write_com(0x80+3);
}
write_riqi(5,month);
write_com(0x80+6);
}
}
else if(rmonth==2){//二月定為28天
day++;
if(day==29)
{
day=1;
month++;
if(month==13)
{
month=1;
year++;
if(year==100)
year=9;
write_riqi(2,day);
write_com(0x80+3);
}
write_riqi(5,month);
write_com(0x80+6);
}
}
write_riqi(8,day);
write_com(0x80+9);
}
write_time(2,hour);
write_com(0x80+0x40+3);
}
write_time(5,min);
write_com(0x80+0x40+6);
}
write_time(8,sec);
write_com(0x80+0x40+9);
}
}
void delay(uint a) { //延時子函數
uint i,中壢馬桶不通,j;
for(j=a;j>0;j--)
for(i=250;i>0;i--) ;
}
噹按下P1.0,再按P1。1,則調節年、月、日、星期、時、分、秒。
解決方案:(C 語言編程)
要求:用兩個按鍵,P1.0和P1.1控制。沒有按下P1.0時,按P1.1,不做任何動作。
void write_com(uchar com) //寫命令子函數
{
lcde=0;
lcdrw=0;
lcdrs=0;
delay(1);
lcde=1;
delay(1);
P0=com;
delay(1);
lcde=0;
}
void write_data(uchar dat)//寫數据子函數
{
lcde=0;
lcdrw=0;
lcdrs=1;
delay(1);
lcde=1;
delay(1);
P0=dat;
delay(1);
lcde=0;
}
void init()
{
month=2;
day=1;
year=9;
TMOD=0x01;//定時器初始化
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
for(num=0;num<15;num++) //在第一行顯示“ 2000-00-00 Mon.”
{
write_data(table[num]);
}
write_com(0x80+0x40);
for(num=0;num<10;num++) //在第二行末尾顯示“ 00:00:00”
{
write_data(table1[num]);
}
}
void write_time(uchar add,char dat) //寫入時間子函數
{
uchar shi,ge;
shi=dat/10;
ge=dat%10;
write_com(0x80+0x40+add);
write_data(0x30+shi);
write_data(0x30+ge);
}
void write_riqi(uchar add,char dat) //寫入日期子函數
{
uchar shi,ge;
shi=dat/10;
ge=dat%10;
write_com(0x80+add);
write_data(0x30+shi),黃金電波拉皮板橋;
write_data(0x30+ge);
}
void write_xingqi(char dat) //寫入星期子函數
{
write_com(0x80+0x0b);
switch(dat)
{
case 0: for(num=0;num<4;num++)
{
write_data(xingqi[num]);
};break;
case 1: for(num=5;num<9;num++)
{
write_data(xingqi[num]);
};break;
case 2: for(num=10;num<14;num++)
{
write_data(xingqi[num]);
};break;
case 3: for(num=15;num<19;num++)
{
write_data(xingqi[num]);
};break;
case 4: for(num=20;num<24;num++)
{
write_data(xingqi[num]);
};break;
case 5: for(num=25;num<29;num++)
{
write_data(xingqi[num]);
};break;
case 6: for(num=30;num<34;num++)
{
write_data(xingqi[num]);
};break;
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

Archiver|手機版|小黑屋|台灣國際職場英檢論壇區官網  

台北汽車借款台北機車借錢自扣餐盒, 彰化當舖台北汽車借錢, 皮秒, 汽車車燈, 汐止汽車借款, 三峽當舖獨立筒沙發, 遮瑕神器推薦, 無暇氣墊粉餅, SEO 關鍵字 消脂針, 童顏針, 汐止當舖屏東借款翻譯社, 紫錐花, 信用卡換現金, L型沙發, 布沙發, 隆乳, 音波拉皮, 未上市, 不動產估價師, 空壓機, 壯陽藥, 飄眉, 沙發, 床墊, 財神娛樂財神娛樂城封口機未上市, 歐冠杯決賽運彩場中LEO娛樂線上娛樂城運彩場中運動彩券場中台灣運動彩券首頁運動彩券單場運彩單場運動彩場中投注場中投注表場中投注時間表場中投注時刻表台灣運彩足球賠率台灣運彩場中支票借款, 沙發工廠, 貓抓布沙發, 三峽當舖贈品, 禮品, 油漆, 樹林當舖娛樂城賺錢, 捕魚機遊戲, 刷卡換現金, 堆高機, 支票借錢, 支票貼現, 按摩神器, 台北網頁設計, 飲水機, 荷重元, 紫錐花酵素片, 關節疼痛冷敷貼, 水果蔬菜清洗劑, 隨身灸艾柱小懸灸, 台中搬家公司, 台中搬家3a娛樂城,

GMT+8, 2025-1-23 00:48 , Processed in 0.073923 second(s), 4 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表