chao may bac
Thông báo
Collapse
No announcement yet.
HƯỚNG DẪN LẬP TRÌNH KEIL C CHO 8051-[Chỉ dành post bài hướng dẫn]
Collapse
X
-
em cũng là dân mới vào nghề,bác nào có tài liệu gì tâm huyết gửi cho em với : votinh.kt@gmail.com
thanks các bác nhiều
Comment
-
-
Nguyên văn bởi votinh_kt Xem bài viếtem cũng là dân mới vào nghề,bác nào có tài liệu gì tâm huyết gửi cho em với : votinh.kt@gmail.com
thanks các bác nhiều
Comment
-
Nguyên văn bởi DuyTuanpdt Xem bài viếtTurbo C có khác VC và KC nhiều ko?
-Turbo C & Virsual C là 2 trình dịch để lập trình hệ thống , tui chưa thấy ( hoặc chưa bit) có thể dùng 2 trình dịch này để lập trình cho VDK : Đơn giản vì ko bit làm thế nào để tạo ra file HEX
- Keil C là trình dịch để viết C cho VDK .
- Trình dịch # với ngôn ngữ nha u ! đừng lộn 2 cái đó ( vd trình dịch Keil C cũng có thể vừa viết ngôn ngữ ASM vừa viết ngôn ngữ C đc đấy thui )
Comment
-
Xin chào tất cảm các bạn!
Mình chỉ mớii biết về VDK một chút, nhưng mình rất thích học về nó, mình muốn nhờ các bạn sửa giúp mình đoạn code của một cái khóa mã số mà mình tìm được trên mạng, mình đã lắp thử và chạy tốt, nhưng nó chỉ cho bạn cài mã số có 5 số thôi, ngoài ra thì không được (nhỏ hơn hoặc lớn hơn đều không được). Các ban có thể giúp mình sửa cho nó cài được bất kỳ mã số nào ( <10 số).sau đây là đoạn code:
#include <REG2051.H>
#define lcd_port P3
//LCD Registers addresses
#define LCD_EN 0x80
#define LCD_RS 0x20
//LCD Commands
#define LCD_CLS 0x01
#define LCD_HOME 0x02
#define LCD_SETMODE 0x04
#define LCD_SETVISIBLE 0x08
#define LCD_SHIFT 0x10
#define LCD_SETFUNCTION 0x28
#define LCD_SETCGADDR 0x40
#define LCD_SETDDADDR 0x80
#define FALSE 0
#define TRUE 1
#ifndef __DELAY__
#define __DELAY__
void delayus(unsigned char);
void delayms(unsigned char);
void lcd_init();
void lcd_reset();
void lcd_cmd (char);
void lcd_data(unsigned char);
void lcd_str (unsigned char*);
#define keyport P1
#define col1 P1_0
#define col2 P1_1
#define col3 P1_2
#define lockpin P1_3
#define FALSE 0
#define TRUE 1
#define RETRY 2
#define EXIT 3
#define LOCK 0
#define UNLOCK 1
#define EX 2
#define OK 3
/***************************LCD******************** *******/
bit check(unsigned char *,unsigned char *,unsigned char);
void setulock();
char getinput(unsigned char);
void store_code();
unsigned char code lockicon[]={0xe, 0xa, 0x1f, 0x1f, 0x1b, 0x1b, 0xe, 0x0};
unsigned char code unlockicon[]={0xe, 0x2, 0x1f, 0x1f, 0x1b, 0x1b, 0xe, 0x0};
unsigned char code ex[]={0x1f, 0x1b, 0x1b, 0x1b, 0x1b, 0x1f, 0x1b, 0x1f};
unsigned char code ok[]={0x0, 0x1, 0x3, 0x16, 0x1c, 0x8, 0x0, 0x0};
void lcd_reset()
{
lcd_port = 0xFF;
delayms(20);
lcd_port = 0x03+LCD_EN;
lcd_port = 0x03;
delayms(10);
lcd_port = 0x03+LCD_EN;
lcd_port = 0x03;
delayms(1);
lcd_port = 0x03+LCD_EN;
lcd_port = 0x03;
delayms(1);
lcd_port = 0x02+LCD_EN;
lcd_port = 0x02;
delayms(1);
}
void lcd_init ()
{
unsigned char i;
lcd_reset();
lcd_cmd(LCD_SETFUNCTION); // 4-bit mode - 1 line - 5x7 font.
lcd_cmd(LCD_SETVISIBLE+0x04); // Display no cursor - no blink.
lcd_cmd(LCD_SETMODE+0x02); // Automatic Increment - No Display shift.
lcd_cmd(LCD_SETCGADDR);
for(i=0;i<8;i++)
lcd_data(lockicon[i]);
for(i=0;i<8;i++)
lcd_data(unlockicon[i]);
for(i=0;i<8;i++)
lcd_data(ex[i]);
for(i=0;i<8;i++)
lcd_data(ok[i]);
lcd_cmd(LCD_SETDDADDR); // Address DDRAM with 0 offset 80h.
}
void lcd_cmd (char cmd)
{
lcd_port = ((cmd >> 4) & 0x0F)|LCD_EN;
lcd_port = ((cmd >> 4) & 0x0F);
lcd_port = (cmd & 0x0F)|LCD_EN;
lcd_port = (cmd & 0x0F);
delayus(200);
delayus(200);
}
void lcd_data (unsigned char dat)
{
lcd_port = (((dat >> 4) & 0x0F)|LCD_EN|LCD_RS);
lcd_port = (((dat >> 4) & 0x0F)|LCD_RS);
lcd_port = ((dat & 0x0F)|LCD_EN|LCD_RS);
lcd_port = ((dat & 0x0F)|LCD_RS);
delayus(200);
delayus(200);
}
void lcd_str (unsigned char *str)
{
while(*str){
lcd_data(*str++);
}
}
/***************************KEYPAD***************** **********/
bit keystatus = FALSE;
void keypad_init(){
keyport &=0x0F;
}
unsigned char getkey(){
unsigned char i,j,k,key=0,temp;
k=1;
for(i=0;i<4;i++){
keyport &=~(0x80>>i);
temp = keyport;
temp &= 0x07;
if(7-temp){
if(!col1){
key = k+0;
while(!col1);
return key;
}
if(!col2){
key = k+1;
while(!col2);
return key;
}
if(!col3){
key = k+2;
while(!col3);
return key;
}
j++;
}
k+=3;
keyport |= 0x80>>i;
delayms(10);
}
return FALSE;
}
unsigned char translate(unsigned char keyval){
if(keyval<10)
return keyval+'0';
else if(keyval==10)
return 'x';
else if(keyval==11)
return '0';
else if(keyval==12)
return 'e';
}
/***************************LOCK******************* ********/
unsigned char code masterlock[10]="0123456789", defaultulock[5]="54321";
unsigned char userlock[5], input[10];
extern bit newlock;
bit check(unsigned char *first, unsigned char *second, unsigned char len){
unsigned char i=0;
for(i=0;i<len;i++){
if(first[i]!=second[i])
return FALSE;
}
return TRUE;
}
void setulock(){
char status;
retry:
lcd_cmd(LCD_CLS);
lcd_cmd(LCD_SETDDADDR);
lcd_str("Hay nhap ma chu");
lcd_cmd(0xC0);
lcd_data(LOCK);
lcd_data(':');
status = getinput(10);
if(status == TRUE){
if(check(input,masterlock,10)){
retry1:
lcd_cmd(LCD_CLS);
lcd_str(" Nhap ma so moi");
lcd_cmd(0xC0);
lcd_data(LOCK);
lcd_data(':');
status = getinput();
if(status == TRUE){
lcd_cmd(LCD_CLS);
lcd_data(OK);
lcd_str(" Da luu!");
newlock = TRUE;
store_code();
delayms(250);
delayms(250);
delayms(250);
delayms(250);
goto exit;
}
else if(status == RETRY)
goto retry1;
else if(status == EXIT)
goto exit;
}
else{
lcd_cmd(LCD_CLS);
lcd_str(" Ma so sai!");
delayms(250);
delayms(250);
delayms(250);
delayms(250);
goto exit;
}
}
else if(status == RETRY)
goto retry;
else if(status == EXIT)
goto exit;
exit:;
}
char getinput(unsigned char max){
unsigned char i,key;
i=0;
while(1){
while(!(key=getkey()));
key = translate(key);
input[i]=key;
if(key=='x'){
if(i==0)
return EXIT;
i--;
lcd_cmd(0xC2+i);
lcd_data(' ');
lcd_cmd(0xC2+i);
}
else if(key=='e'){
return TRUE;
}
else{
i++;
lcd_data(key);
}
}
}
void store_code(){
unsigned char i;
for(i=0;i<5;i++)
userlock[i]=input[i];
}
/***************************MAIN******************* ********/
extern unsigned char input[10], userlock[5];
extern unsigned char code defaultulock[5],masterlock[10];
bit newlock=FALSE;
unsigned char retrycount=3;
void main(){
unsigned char status,i=0;
bit lockstatus;
lcd_init();
keypad_init();
while(1){
lcd_cmd(LCD_CLS);
lcd_str(" Nhap ma so");
lcd_cmd(0xC0);
lcd_data(LOCK);
lcd_data(':');
status = getinput();
if(check(input,"12345",5)){
setulock();
goto done;
}
if(status == TRUE){
if(newlock)
lockstatus = check(input,userlock);
else
lockstatus = check(input,defaultulock);
if(lockstatus){
retrycount = 3;
lockpin = 0;
lcd_cmd(LCD_CLS);
lcd_data(OK);
lcd_str(" Ma so");
lcd_cmd(0xC0);
lcd_str(" Dung!");
delayms(250);
delayms(250);
delayms(250);
delayms(250);
lcd_cmd(LCD_CLS);
lcd_str("Se khoa lai");
lcd_cmd(0xC0);
lcd_str(" sau 30 giay");
delayms(250);
delayms(250);
delayms(250);
delayms(250);
delayms(250);
delayms(250);
delayms(250);
delayms(250);
lcd_cmd(LCD_CLS);
lcd_str("Se khoa lai");
lcd_cmd(0xC0);
lcd_str(" sau 30 giay");
while(getkey());
lockpin = 1;
lcd_cmd(LCD_CLS);
lcd_data(OK);
lcd_str(" Da khoa!");
delayms(250);
delayms(250);
delayms(250);
delayms(250);
}
else{
retrycount--;
lcd_cmd(LCD_CLS);
lcd_data(EX);
lcd_str(" Ma so sai!");
lcd_cmd(0xC0);
lcd_str(" so lan nhap = ");
lcd_data('0'+retrycount);
delayms(250);
delayms(250);
delayms(250);
delayms(250);
if(retrycount==0){
blocked:
lcd_cmd(LCD_CLS);
lcd_data(EX);
lcd_str("DA HAN CHE");
lcd_data(EX);
lcd_cmd(0xC0);
lcd_data(LOCK);
lcd_data(':');
status = getinput(10);
if(check(input,masterlock,10)){
retrycount=3;
lcd_cmd(LCD_CLS);
lcd_data(EX);
lcd_str("KHONG HAN CHE");
lcd_data(EX);
delayms(250);
delayms(250);
delayms(250);
delayms(250);
}
else{
lcd_cmd(LCD_CLS);
lcd_data(EX);
lcd_str(" Ma so sai");
lcd_data(EX);
delayms(250);
delayms(250);
delayms(250);
delayms(250);
goto blocked;
}
}
}
}
done:;
}
}
/***************************DELAY****************** *********/
void delayus(unsigned char delay){
while(delay--);
}
void delayms(unsigned char delay){
while(delay--)
delayus(149);
}
Mong các bạn giúp mình với, xin chan thành cảm ơn các bạn
Comment
-
Các bạn cho mình hỏi: mình đang làm chương trình giao tiếp giữa com và Ethernet. Mình định dùng UART để giao tiếp với COM và giao tiếp với Ethernet qua giao thức TCP/IP. Nhưng mình chưa biết cách tính Buffer làm sao để đạt đc tốc độ baud của COM là 9600 còn chuẩn Ethernet là 10M. Mong các bạn giúp đỡ!!!
Comment
-
Xin lôi mấy bác vì e đã "chen ngang" nguồn cảm hứng của mấy bác, nhưng xin các bác giúp đỡ e trc rồi "xử tội" em sau nhe. E mới vào nghề VDK, nên muốn có một chương trình "dịch" vừa dễ vừa tốt để lập trình cho VDK. Các bác có thì share cho e với. Cảm ơn các bác.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho tìm mua đồng hồ vạn năngbởi nhathung1101Đa năng còn chưa dùng hết, nếu không biết cách dùng.
200k thì hơi khó mua, nhưng 50k chắc là có. Cứ bảo bán cho tôi cái đồng hồ hỏng.-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 23:21 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi nhathung1101Lão Đinh Vặn học giải phương trình hồi đi trẻ mà. Mẫu giáo học lập trình AI rồi. Lớp lão ấy gần lớp em nên em biết....
-
Channel: Điện tử công suất
Hôm qua, 23:11 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Vậy chú đã hỏi hãng SIEMEN chưa? Tại sao cái PLC S7-200 cổ lỗ mà họ vẫn thiết kế riêng cho thị trường TQ với chữ SMART? Thậm chí phần mềm riêng để đọc file ngu.smart?
Vấn đề không còn là công nghệ "cốt lõi" nữa, mà là giá thành quyết định. Ham rẻ là trả giá mà....-
Channel: Điện tử công suất
Hôm qua, 23:01 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi vi van phamĐồng ý với Bqv.
50 năm làm nghề, tôi đã chứng kiến 3 lần máy x quang mới nhập từ nước ngoài về bị lỗi.
- Lần thứ 1 máy xq của Pháp được ks Pháp lằp đặt bị lỗi 1 con didode, đưa cho ks Pháp con didode khác cùng mã số, ông...-
Channel: Điện tử công suất
Hôm qua, 08:09 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi mèomướpDạ chú dinh... muốn sửa lỗi cho hãng thì chú cứ gửi những hình ảnh, video cho họ đi ạ, chú có thể tìm thông tin của những lãnh đạo bên ấy để gửi thì sẽ hiệu quả hơn ạ. Về tổng quan thì họ sẽ ko phản hồi rõ ràng đâu ạ, vì nhận...
-
Channel: Điện tử công suất
Hôm qua, 06:19 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietCuối năm bàn thêm chuyện to hơn chút, đấy là 2 vụ rơi đám 737 đời mới và trục trặc ở cả tá chiếc khác. Ngay cả những thứ tưởng như cao siêu sang xịn thật thì vẫn có thể gặp trường hợp oái oăm như thường. Từ hồi đó bqv đã thấy khó hiểu làm sao lại đẻ ra đám MCAS quái thai đến thế được. Rồi...
-
Channel: Điện tử công suất
24-01-2025, 19:40 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietBqv phải vào ngay để tán đồng với bài viết trên của bạn. Chỉ bàn về kỹ thuật, thiết bị máy móc của hãng dù danh tiếng vẫn có thể xảy ra những chuyện ngoài dự kiến, thậm chí những chuyện tưởng như không bao giờ có thể xảy ra....
-
Channel: Điện tử công suất
24-01-2025, 19:31 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80(ĐT chia sẻ MPPT này, với mong muốn rằng, chúng ta hãy tự tin lên, hãy tự hào là người VN, đừng quá tin vào người khác, đừng quá thần tượng họ, cần kiểm tra thực chứng chứ không nên cứ cho các thiết bị thông minh, cao siêu là hoàn hảo)
-
Channel: Điện tử công suất
24-01-2025, 12:08 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80Dưới đây là hình ảnh thực:
(bị phạm con tụ pi C17 (phía trên IC U3/DIP08: văng mất xác!)
(hàn vào vị trí C17 tụ pi 27nF ( giá trị phỏng đoán từ 10-100nF!), mạch vẫn chạy như trước khi cạy keo)...-
Channel: Điện tử công suất
24-01-2025, 12:05 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80ĐT đã mạnh dạn mail thử cho hãng SRNE, họ trả lời là nó dùng nhiệt điện trở ở bên trong mạch như sau:
"Our street light controller product triggers high temperature protection based on internal thermistor sampling''
Thấy hơi lo lắng vì kiến thức điện tử...-
Channel: Điện tử công suất
24-01-2025, 11:39 -
Comment