Kết quả 1 đến 5 của 5
-
04-15-2015, 02:08 AM #1
Silver member
- Ngày tham gia
- Jan 2016
- Bài viết
- 0
Giúp tạo thêm hiệu ứng cho LCD 20X4 hiển thị giờ-phút-giây
chào mọi người.mình có viết đoạn code lập trình cho LCD 20X4 hiển thị giờ
hút:giây và có phím bấm chỉnh giờ như sau:MOD-chọn chế độ chỉnh giây,phút hay giờ..phím UP-tăng thời gian.Phím DW-giảm thời gian..về phần này mình viết dc rồi nhưng mình muốn có thêm điều kiện là khi nhấn MOD (bất kỳ ở chế độ chỉnh nào) thì nếu ko nhấn khoản 10s thì tự động MOD=0 và đồng hồ lại tự động đếm như chưa nhấn MOD.
Trong đoạn code mình không liệt kê các hàm mình tạo sẵng vì sẽ rất dài.Ý tưởng của mình là dùng timer0 để đếm.khi timer0 đếm thì timer1 dừng đếm nhưng không biết đặt vào dòng lệnh ntn cả!Xin các bạn góp ý.
dưới đây là đoạn code của mình!
#include <TV_P89V51RD2_SHIFT.C>
#include <TV_P89V51RD2_LCD.C>
const unsigned char code HANG1[20]={"*SU PHAM KY THUAT"};
const unsigned char code HANG2[20]={"DONG HO: "};
unsigned char j,GIAY=0,PHUT=0,BDN=0,GIO=0,GT_MOD=0;
void timer1_interrupt() interrupt 3 using 0
{
BDN++;TH1=0X4B;TL1=0XB0;
}
void HIENTHI_CLOCK()
{
LCD_COMMAND(ADDR_LINE2+10);
LCD_DATA(GT_MOD+0X30);
LCD_DATA(':');
LCD_DATA(GIO/10+0X30);
LCD_DATA(GIO%10+0X30);
LCD_DATA(':');
LCD_DATA(PHUT/10+0X30);
LCD_DATA(PHUT%10+0X30);
LCD_DATA(':');
LCD_DATA(GIAY/10+0X30);
LCD_DATA(GIAY%10+0X30);
}
//******************************
void PHIM_UP()
{
if(!UP)
{
DELAY_MS(20);
if(!UP)
{
switch(GT_MOD)
{
case 1: if(GIAY==59)GIAY=0;
else GIAY++;
break;
case 2: if(PHUT==59)PHUT=0;
else PHUT++;
break;
case 3: if(GIO==23)GIO=0;
else GIO++;
break;
default:break;
}
HIENTHI_CLOCK();
DELAY_MS(100);
}
}
}
//***************************X
void PHIM_DW()
{
if(!DW)
{
DELAY_MS(20);
if(!DW)
{
switch(GT_MOD)
{
case 1: if(GIAY==0) GIAY=59;
else GIAY--;
break;
case 2: if(PHUT==0) PHUT=59;
else PHUT--;
break;
case 3: if(GIO==0) GIO=23;
else GIO--;
break;
default: break;
}
HIENTHI_CLOCK();
DELAY_MS(100);
}
}
}
//*********************
void PHIM_MOD()
{
if(!MOD)
{
DELAY_MS(20);
if(!MOD)
{
GT_MOD++;
if(GT_MOD>=4) GT_MOD=0;
HIENTHI_CLOCK();
do{}while(!MOD);
}
}
}
//*********************************XX
void CHINH_CLOCK()
{
PHIM_MOD();
if(GT_MOD!=0)
{
TR1=1;
do
{
PHIM_UP();
PHIM_DW();
PHIM_MOD();
}
while(GT_MOD!=0);
TR1=1;
}
}
void main()
{
SETUP_LCD();
TMOD=0X15; TR1=1;
EA=1;ET1=1;
LCD_COMMAND(ADDR_LINE1);
for(j=0;j<20;j++){LCD_DATA(HANG1[j]);}
LCD_COMMAND(ADDR_LINE2);
for(j=0;j<20;j++){LCD_DATA(HANG2[j]);}
HIENTHI_CLOCK();
while(1)
{
if(BDN==40)
{
if(GIAY==59)
{
GIAY=0;
if(PHUT==59)
{
PHUT=0;
if(GIO==24) GIO=0;
else GIO++;
}
else PHUT++;
}
else GIAY++;
BDN=0;
HIENTHI_CLOCK();
}
else
{ CHINH_CLOCK();
}
}
}View more random threads:
- cảm biến đo khoảng cách
- Dự đoán và phân tích SXMB thứ 6 ngày 22/03/2019
- Vận may của 12 cung hoàng đạo khi chơi game Online(phần 1)
- Tính toán quộn dây cuộn hút relay
- Cần mọi người giúp đỡ .
- Cần giúp viết hộ e bài code điều khiển led 7 thanh mong mn giúp đỡ
- điều khiển triac
- đặc điểm trần căng xuyên sáng barrisol
- Mọi người giúp em với
- CẢM BIẾN NHẬN DẠNG NHIỀU NGƯỜI ,ÍT NGƯỜI?
-
04-15-2015, 02:09 AM #2
Junior Member
- Ngày tham gia
- Jan 2016
- Bài viết
- 0
đoạn code mình gửi dưới đây để các bạn dễ nhìn hơn!Xin cảm ơn các bạn!
-
04-15-2015, 06:40 PM #3
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
HIC..Cao thủ đâu hết rồi..ra tay tương trợ với..
fight)
fight)
-
04-15-2015, 07:48 PM #4
Silver member
- Ngày tham gia
- Apr 2016
- Bài viết
- 0
Gửi bởi Kiếm Định
Mã:#include <TV_P89V51RD2_SHIFT.C> #include <TV_P89V51RD2_LCD.C> const unsigned char code HANG1[20]={"*DAI HOC SU PHAM KY"}; const unsigned char code HANG2[20]={"DONG HO: "}; unsigned char j,GIAY=0,PHUT=0,BDN=0,GIO=0,GT_MOD=0; unsigned long TIMER_OUT=0; void timer1_interrupt() interrupt 3 using 0 { BDN++;TH1=0X4B;TL1=0XB0; TIMER_OUT++;IF(TIMER_OUT>500)TIMER_OUT=501;//TINH LAI O DAY CHO DU 10S } void HIENTHI_CLOCK() { LCD_COMMAND(ADDR_LINE2+10); LCD_DATA(GT_MOD+0X30); LCD_DATA(':'); LCD_DATA(GIO/10+0X30); LCD_DATA(GIO%10+0X30); LCD_DATA(':'); LCD_DATA(PHUT/10+0X30); LCD_DATA(PHUT%10+0X30); LCD_DATA(':'); LCD_DATA(GIAY/10+0X30); LCD_DATA(GIAY%10+0X30); } //****************************** void PHIM_UP() { if(!UP) { DELAY_MS(20); if(!UP) { switch(GT_MOD) { case 1: if(GIAY==59)GIAY=0; else GIAY++; break; case 2: if(PHUT==59)PHUT=0; else PHUT++; break; case 3: if(GIO==23)GIO=0; else GIO++; break; default:break; } HIENTHI_CLOCK(); DELAY_MS(100); } } } //***************************X void PHIM_DW() { if(!DW) { DELAY_MS(20); if(!DW) { switch(GT_MOD) { case 1: if(GIAY==0) GIAY=59; else GIAY--; break; case 2: if(PHUT==0) PHUT=59; else PHUT--; break; case 3: if(GIO==0) GIO=23; else GIO--; break; default: break; } HIENTHI_CLOCK(); DELAY_MS(100); } } } //********************* void PHIM_MOD() { if(!MOD) { DELAY_MS(20); if(!MOD) { GT_MOD++; if(GT_MOD>=4) GT_MOD=0; HIENTHI_CLOCK(); do{}while(!MOD); } } } //*********************************XX void CHINH_CLOCK() { PHIM_MOD(); if(GT_MOD!=0) { TR1=1; do { PHIM_UP(); PHIM_DW(); PHIM_MOD(); } while(GT_MOD!=0); TR1=1; } } void main() { SETUP_LCD(); TMOD=0X15; TR1=1; EA=1;ET1=1; LCD_COMMAND(ADDR_LINE1); for(j=0;j<20;j++){LCD_DATA(HANG1[j]);} LCD_COMMAND(ADDR_LINE2); for(j=0;j<20;j++){LCD_DATA(HANG2[j]);} HIENTHI_CLOCK(); while(1) { IF(GT_MOD==0)TIMER_OUT=0; ELSE {IF(TIMER_OUT>500){TIMER_OUT=0;GT_MOD=0;}} if(BDN==40) { if(GIAY==59) { GIAY=0; if(PHUT==59) { PHUT=0; if(GIO==24) GIO=0; else GIO++; } else PHUT++; } else GIAY++; BDN=0; HIENTHI_CLOCK(); } else { CHINH_CLOCK(); } } }
-
04-15-2015, 09:43 PM #5
Banned
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
vẫn không dc bạn à..mình nhấn MOD là nó đứng hình luôn..lúc này nhấn MOD nó ko tự tăng giá trị nữa mà nó ko đếm tg như trước khi chưa bấm..giống như bị treo vậy....
- FIRSKY – Cùng Bạn Xây Dựng Một...
Hôm qua, 10:32 PM in Rao vặt tổng hợp