Cần giúp Quet led 7 thanh bị nháy

co_dien_tu

Học sinh trung cấp
#1
Có Pro nào đã quét nhiều mã 7 đoạn chưa cho mình biết cách quét đx không, mình qyets toàn bị nháy thôi mặc dù delay nhỏ hơn 1ms mà vẫn nháy bị giật,thanks
 
#2
Có Pro nào đã quét nhiều mã 7 đoạn chưa cho mình biết cách quét đx không, mình qyets toàn bị nháy thôi mặc dù delay nhỏ hơn 1ms mà vẫn nháy bị giật,thanks
- Vậy bạn phải úp cái code và phần cứng bạn thực hiện lên mọi người mới biết được lỗi do cái nào chứ
 

co_dien_tu

Học sinh trung cấp
#4
Mình đã khắc phục đx! Thannks mọi người nha Qua đây mình hỏi thêm với, để thiết lập con trỏ đối với atmega8 thì thực hiện thế nào Ví dụ như mình có đoạn địa chỉ chứa giá trị của mã led 7thanh từ 0-9 thì con trỏ đx thiết lập ntn để trỏ vào địa chỉ trên và lấy ra nội dung tương ứng Thanks mọi người nhiều lắm !!
 

co_dien_tu

Học sinh trung cấp
#5
Mình đã dùng thử lệnh như sau LDI R28,$60 LDI R29,$00 để định vị trí ban đầu cho con trỏ LD R16,Y+ để load giá trị con trỏ Y tức là nội dung vị trí ô nhớ 60h và tăng Y lên 1 địa chỉ. Mình làm thế lúc mô phỏng ko cho kết quả gì cả Mọi người xem như thế có đúng không giúp mình với nha!
 

vuongdang92

Học sinh phổ thông
#6
mình cũng gặp trường hợp tương tự. Led 7 doan cứ chớp nháy, cao nhân nào giúp mình với. bên dưới là code và mạch mô phỏng
KHAI BÁO:
#include <16F887.h>
#device ADC=10

#FUSES HS
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(crystal=20000000)
#define COT_1 PIN_C0
#define COT_2 PIN_C1

CODE MAIN
#include <ADC_Sensor.h>
UNSIGNED INT16 KQADC;
UNSIGNED INT J;//MATRAM;

void _TachSo(char DuLieu, char &HangChuc, char &HangDonVi);
void HIEN_THI(unsigned char H1,H2);
void _DelayScan(unsigned char H1,H2, unsigned int16 Time);
void _QuetLed(char TenChan, int1 TrangThai);
void _TatQuetCot(void);

void main()
{
unsigned char H1,H2;
_TatQuetCot();
//! set_tris_b(0x00); // Set portB output
//! set_tris_d(0x00); // Set portC output

SETUP_ADC(ADC_CLOCK_DIV_2);
SETUP_ADC_PORTS(SAN0);
SET_ADC_CHANNEL(0);
while(TRUE)
{
KQADC = 0;
FOR(J=0; J <200; J++)
{
KQADC = KQADC + READ_ADC();
delay_ms(1);
}
KQADC = KQADC/2.046;
KQADC = KQADC/ 200;
_TachSo(KQADC,H1,H2);
_DelayScan(H1,H2,300);
//! if(KQADC >=50)
//! {
//! output_bit(PIN_c0,1);
//! }
//! else output_bit(PIN_c0,0);
}
}

void _QuetLed(char TenChan, int1 TrangThai)
{
switch(TenChan)
{
case 1:
{
output_bit(COT_1,TrangThai);
break;
}
case 2:
{
output_bit(COT_2,TrangThai);
break;
}
}
}

void _TachSo(char DuLieu, char &HangChuc, char &HangDonVi)
{
HangChuc = DuLieu/10;
HangDonVi = DuLieu%10;
}

VOID HIEN_THI(unsigned char H1,H2)
{
CONST UNSIGNED CHAR MA7DOAN[16] = {0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8,
0X80, 0X90, 0X88, 0X83, 0XC6, 0XA1, 0X86, 0X8E};
//{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x40};//
signed char i;
unsigned char a[2];
a[0]=H2;
a[1]=H1;

//for(i=2;i>=0;i--)
for(i=0;i<2;i++)
{
output_D(MA7DOAN[a]);//xuat ma led
_QuetLed(i+1,1);
delay_ms(1);//tao tre 1 miligiay
_QuetLed(i+1,0);
}
}

void _DelayScan(unsigned char H1,H2, unsigned int16 Time)
{
Time=Time/2;//vi co 2 led duoc quet

while(Time>0)
{
HIEN_THI(H1,H2);
Time--;//giam Time xuong mot don vi
}
}
void _TatQuetCot(void)
{
int8 i;

for(i=1;i<=2;i++)
{
_QuetLed(i,0);
}
}
 

vuongdang92

Học sinh phổ thông
#7
mình cũng gặp trường hợp tương tự. Led 7 doan cứ chớp nháy, cao nhân nào giúp mình với. bên dưới là code và mạch mô phỏng
KHAI BÁO:
#include <16F887.h>
#device ADC=10

#FUSES HS
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(crystal=20000000)
#define COT_1 PIN_C0
#define COT_2 PIN_C1

CODE MAIN
#include <ADC_Sensor.h>
UNSIGNED INT16 KQADC;
UNSIGNED INT J;//MATRAM;

void _TachSo(char DuLieu, char &HangChuc, char &HangDonVi);
void HIEN_THI(unsigned char H1,H2);
void _DelayScan(unsigned char H1,H2, unsigned int16 Time);
void _QuetLed(char TenChan, int1 TrangThai);
void _TatQuetCot(void);

void main()
{
unsigned char H1,H2;
_TatQuetCot();
//! set_tris_b(0x00); // Set portB output
//! set_tris_d(0x00); // Set portC output

SETUP_ADC(ADC_CLOCK_DIV_2);
SETUP_ADC_PORTS(SAN0);
SET_ADC_CHANNEL(0);
while(TRUE)
{
KQADC = 0;
FOR(J=0; J <200; J++)
{
KQADC = KQADC + READ_ADC();
delay_ms(1);
}
KQADC = KQADC/2.046;
KQADC = KQADC/ 200;
_TachSo(KQADC,H1,H2);
_DelayScan(H1,H2,300);
//! if(KQADC >=50)
//! {
//! output_bit(PIN_c0,1);
//! }
//! else output_bit(PIN_c0,0);
}
}

void _QuetLed(char TenChan, int1 TrangThai)
{
switch(TenChan)
{
case 1:
{
output_bit(COT_1,TrangThai);
break;
}
case 2:
{
output_bit(COT_2,TrangThai);
break;
}
}
}

void _TachSo(char DuLieu, char &HangChuc, char &HangDonVi)
{
HangChuc = DuLieu/10;
HangDonVi = DuLieu%10;
}

VOID HIEN_THI(unsigned char H1,H2)
{
CONST UNSIGNED CHAR MA7DOAN[16] = {0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8,
0X80, 0X90, 0X88, 0X83, 0XC6, 0XA1, 0X86, 0X8E};
//{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x40};//
signed char i;
unsigned char a[2];
a[0]=H2;
a[1]=H1;

//for(i=2;i>=0;i--)
for(i=0;i<2;i++)
{
output_D(MA7DOAN[a]);//xuat ma led
_QuetLed(i+1,1);
delay_ms(1);//tao tre 1 miligiay
_QuetLed(i+1,0);
}
}

void _DelayScan(unsigned char H1,H2, unsigned int16 Time)
{
Time=Time/2;//vi co 2 led duoc quet

while(Time>0)
{
HIEN_THI(H1,H2);
Time--;//giam Time xuong mot don vi
}
}
void _TatQuetCot(void)
{
int8 i;

for(i=1;i<=2;i++)
{
_QuetLed(i,0);
}
}
 

Đính kèm

Quảng cáo Google