mong các bạn giúp mình các quét và đọc giá trị của 3 phím BCD này với. giá trị của mỗi phím được lưu vào mỗi biến tương ứng và hiển thị các biến này trên led 7seg. cảm ơn các bạn rất nhiều!
Thông báo
Collapse
No announcement yet.
các bạn giúp mình cách quét và đọc phím BCD này với
Collapse
X
-
có nghĩa là mình mua đc switch BCD mình muốn thử đọc switch đó rồi lưu vào 1 biến tương ứng. nếu mỗi phím mắc vào từng PORT của VĐK thì mình đã làm đc rồi nhưng sử dung cách quét phím để tiết kiệm chân VĐK thì mình không biết nên làm ntn? rất mong mọi người giúp đỡ (vì nếu quét đc 3 phím này thì mình sẽ phát triển quét nhiều phím hơn) . mình đang rất cầnVũ xuân Lợi
YM!:
Comment
-
đây là code mà mình đã lập trình nhưng vẫn không đc. E nhờ các cao bác xem giúp E xem E còn sai chỗ nào mà nó không chạy! E xin trân thành cảm ơn!
/************************************************** ***
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
HP InfoTech, Development Tools for Microcontrollers, C Compilers, In-System Programmers
Project :
Version :
Date : 3/24/2012
Author : NeVaDa
Company :
Comments:
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 8.001000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
************************************************** ***/
#include <mega8.h>
#include <delay.h>
#define A PIND.0
#define B PIND.1
#define C PIND.2
#define D PIND.3
unsigned char _7_segment[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6 f};
unsigned char Quetphim [4]={0xEf,0xDf,0xBf,0x7f};
unsigned char tmp1=0, tmp2=0, tmp3=0, tmp4=0, tmp5,tmp6;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
;
}
void Quetbanphim(void)
{
unsigned char x,y;
for(x=0;x<4;x++)
{
DDRD=0xf0;
PORTD=Quetphim[x];
/* Xu li so lieu danh cho dau vao so 1 */
if(x==0)
{
for(y=0;y<100;y++)
{
if(A==1 & B==1 & C==1 & D==1) { tmp1 = 0;}
if(A==0 & B==1 & C==1 & D==1) { tmp1 = 1;}
if(B==0 & A==1 & C==1 & D==1) { tmp1 = 2;}
if(A==0 & B==0 & C==1 & D==1) { tmp1 = 3;}
if(C==0 & A==1 & B==1 & D==1) { tmp1 = 4;}
if(A==0 & C==0 & B==1 & D==1) { tmp1 = 5;}
if(B==0 & C==0 & A==1 & D==1) { tmp1 = 6;}
if(A==0 & B==0 & C==0 & D==1) { tmp1 = 7;}
if(D==0 & A==1 & B==1 & C==1) { tmp1 = 8;}
if(A==0 & D==0 & B==1 & C==1) { tmp1 = 9;}
}
}
/* Xu li so lieu danh cho dau vao so 2 */
if(x==1)
{
for(y=0;y<100;y++)
{
if(A==1 & B==1 & C==1 & D==1) { tmp2 = 0;}
if(A==0 & B==1 & C==1 & D==1) { tmp2 = 1;}
if(B==0 & A==1 & C==1 & D==1) { tmp2 = 2;}
if(A==0 & B==0 & C==1 & D==1) { tmp2 = 3;}
if(C==0 & A==1 & B==1 & D==1) { tmp2 = 4;}
if(A==0 & C==0 & B==1 & D==1) { tmp2 = 5;}
if(B==0 & C==0 & A==1 & D==1) { tmp2 = 6;}
if(A==0 & B==0 & C==0 & D==1) { tmp2 = 7;}
if(D==0 & A==1 & B==1 & C==1) { tmp2 = 8;}
if(A==0 & D==0 & B==1 & C==1) { tmp2 = 9;}
}
}
/* Xu li so lieu danh cho dau vao so 3*/
if(x==2)
{
for(y=0;y<100;y++)
{
if(A==1 & B==1 & C==1 & D==1) { tmp3 = 0;}
if(A==0 & B==1 & C==1 & D==1) { tmp3 = 1;}
if(B==0 & A==1 & C==1 & D==1) { tmp3 = 2;}
if(A==0 & B==0 & C==1 & D==1) { tmp3 = 3;}
if(C==0 & A==1 & B==1 & D==1) { tmp3 = 4;}
if(A==0 & C==0 & B==1 & D==1) { tmp3 = 5;}
if(B==0 & C==0 & A==1 & D==1) { tmp3 = 6;}
if(A==0 & B==0 & C==0 & D==1) { tmp3 = 7;}
if(D==0 & A==1 & B==1 & C==1) { tmp3 = 8;}
if(A==0 & D==0 & B==1 & C==1) { tmp3 = 9;}
}
}
/* Xu li so lieu danh cho dau vao so 3*/
if(x==3)
{
for(y=0;y<100;y++)
{
if(A==1 & B==1 & C==1 & D==1) { tmp4 = 0;}
if(A==0 & B==1 & C==1 & D==1) { tmp4 = 1;}
if(B==0 & A==1 & C==1 & D==1) { tmp4 = 2;}
if(A==0 & B==0 & C==1 & D==1) { tmp4 = 3;}
if(C==0 & A==1 & B==1 & D==1) { tmp4 = 4;}
if(A==0 & C==0 & B==1 & D==1) { tmp4 = 5;}
if(B==0 & C==0 & A==1 & D==1) { tmp4 = 6;}
if(A==0 & B==0 & C==0 & D==1) { tmp4 = 7;}
if(D==0 & A==1 & B==1 & C==1) { tmp4 = 8;}
if(A==0 & D==0 & B==1 & C==1) { tmp4 = 9;}
}
}
}
tmp5= tmp1*10 + tmp2;
tmp6= tmp3*10 + tmp4;
}
// Declare your global variables here
void hienthi()
{
PORTB.0 = 0;
PORTC = _7_segment[tmp5/10];
delay_us(7);
PORTC = 0x00;
PORTB.0 = 1;
PORTB.1 = 0;
PORTC = _7_segment[tmp5%10];
delay_us(7);
PORTC = 0x00;
PORTB.1 = 1;
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTB=0xFF;
DDRB=0xFF;
// Port C initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0x7F;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=1 State6=1 State5=1 State4=1 State3=P State2=P State1=P State0=P
PORTD=0xFF;
DDRD=0xF0;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
TCCR0=0x05;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x41;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
Quetbanphim();
hienthi();
}
}Vũ xuân Lợi
YM!:
Comment
-
phần quét phím của bạn quá phức tạp và dài
theo như code trên thì cậu viết = codevision, vậy hãy vào thư mục cài của nó cái cái example các ví dụ trong đó có keypad mở ra mà tham khảo, keypad có nhiều cách quét, tham khảo rồi tự phát triểnWebsite chính thức đổi địa chỉ website thành
Mời các bạn ghé thăm !!!
Comment
-
cảm ơn bác đã góp ý. nhưng E mới tìm hiểu về lập trình. bây giờ E đang mới làm quen nên trong cách lập trinh chưa tối ưu hóa đc thuật toán. E mong Bác xem giúp E code mà E đã lập trình bên trên có gì sai ma không chạy đc. còn để tối ưu hơn thi chăc chắn sau này E sẽ phải phát triển thêm. rất mong đc sự giúp đỡVũ xuân Lợi
YM!:
Comment
Bài viết mới nhất
Collapse
-
bởi 0975132692Cáp Tín Hiệu Vặn Xoắn Đôi Altek Kabel chính hãng
- Thương Hiệu: Altek Kabel – Germany
- Xuất xứ/ Origin: China
- Ruột dẫn: Đồng mạ bạc
- Số Lõi Dẫn: 1 Pair/ 2 Pair/ 3 Pair/ 4 Pair (1 Pair = 1 đôi = 2 lõi) + 1 dây đồng Si bạc thoát...-
Channel: Điện tử công nghiệp
hôm nay, 09:30 -
-
bởi 0975132692Dây cáp điều khiển Altek Kabel - Tiêu chuẩn Châu Âu - đầy đủ các mã
- Dây dẫn: 100% đồng
- Số lõi: 2 - 30 lõi (2-7 lõi chia màu, 8 lõi trở lên lõi đen đánh số)
- Tiết diện: 0.5, 0.75, 1.0, 1.5mm2
- Cáp điều khiển CT-500: Không...-
Channel: Điện tử công nghiệp
hôm nay, 08:57 -
-
Trả lời cho Tổng hợp các thông tin về mạch nạp cho AVRbởi bacthoMình cũng bị như vậy mà chưa biết ở đâu
-
Channel: Vi điều khiển AVR
Hôm qua, 21:00 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi nhathung1101Câu trả lời là không dùng được.
Hai lớp dán mặt trước và mặt sau, gọi là film phân cực. Muốn hiểu rõ về nó thì chịu khó search nhé. Ở đây có rất nhiều chó cứ ngửi thấy phân là sủa nhặng, nên không giải thích nhiều....-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 16:20 -
-
Comment on Tổng hợp các thông tin về mạch nạp cho AVRbởi Memem
-
Channel: Vi điều khiển AVR
Hôm qua, 15:10 -
-
Trả lời cho Tổng hợp các thông tin về mạch nạp cho AVRbởi MememMọi người ơi cho em hỏi cái này ạ, hiện tại em đang làm btl về hiển thị giá trị nhiệt độ trên led 7 thanh sử dụng atmega16, code em chạy trên mô phỏng rất oke nhưng khi lắp qua mạch thực thì bị lỗi ở led đầu tiên bị lỗi như thế này...
-
Channel: Vi điều khiển AVR
Hôm qua, 15:10 -
-
bởi mantruongepuNhờ cả nhà tìm giúp mình thông tin IC này với, thấy ghi 943B W58BAL mà mình tìm mấy ngày nay không được, nó được đóng gói dạng TSSOP 8. Cám ơn cả nhà....
-
Channel: Điện tử dành cho người mới bắt đầu
20-11-2024, 14:40 -
-
bởi TherulCảm ơn bạn đã chia sẻ câu chuyện và quá trình phát triển sản phẩm của mình. Trước tiên, thật may mắn khi bạn vượt qua tai nạn và vẫn giữ được niềm đam mê cũng như khả năng sáng tạo trong lĩnh vực kỹ thuật. Việc bạn tiếp tục...
-
Channel: từ PIC tới dsPIC
20-11-2024, 07:20 -
-
Trả lời cho Em muốn hỏi mọi người về nguyên lý hoạt động, tần số của mạch công suất trong máy rửa siêu âm ạ.bởi nguyendinhvanBạn nên nghiên cứu cái chấn lưu đèn ống Compact fluorescent lamp hay đèn compact trước đã. Nó rẻ đỡ tốn kém.
Sau khi hiểu rõ rồi thì chuyển sang cái mạch này.
Ở cái chấn lưu, tần số của nó linh tinh lắm, tùy điện áp nguồn, tùy...-
Channel: Hỗ trợ học tập
19-11-2024, 22:44 -
-
bởi yname11 E có 1 laptop bị hỏng màn hình, e tháo ra thì thấy nó có 4 lớp , lớp ngoài cùng là 1 lớp nhựa rất mỏng màu hơi đen ( chắc là 1 loại film dán), tiếp theo là 1 lớp thủy tinh bị vỡ (màu đen) , đến 1 lớp thủy tinh trắng ( lớp này có...
-
Channel: Thiết bị điện tử cá nhân
18-11-2024, 19:12 -
Comment