佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

楼主: gabrielloy

问问关于atmelAT89c51的program问题!

[复制链接]
发表于 26-2-2009 10:39 PM | 显示全部楼层
原帖由 gabrielloy 于 26-2-2009 10:08 PM 发表
pic大大说的“pin 3 要接 1K~10K 的VR“,VR是指voltage regulator吗?

VR=variable resistor,
你可以买Trim pot , 可变电阻。

回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 26-2-2009 10:56 PM | 显示全部楼层
不好意思,没看清楚图。现在才看到时可变电阻。除了pin1,2,3外,还有什么不对的吗?例如ICchip的pin circuit,reset circuit等等。还有IC chip 的pin9是直接接GND还是接5V?还有pin 31
回复

使用道具 举报

发表于 26-2-2009 11:10 PM | 显示全部楼层
原帖由 gabrielloy 于 26-2-2009 10:56 PM 发表
不好意思,没看清楚图。现在才看到时可变电阻。除了pin1,2,3外,还有什么不对的吗?例如ICchip的pin circuit,reset circuit等等。还有IC chip 的pin9是直接接GND还是接5V?还有pin 31


这个图不完整。我在之前有讲过。还给过你一个reference.
我的reset circuit像你一样直接接到ground就可以了吗?
-〉http://www.freewebs.com/maheshwankhede/basic.html. 我也是拿它的设计。manual reset

你自己检查看。 改正所有错误。 还是不能走才上来发问。
回复

使用道具 举报

发表于 1-3-2009 01:56 PM | 显示全部楼层
原帖由 gabrielloy 于 26-2-2009 10:56 PM 发表
不好意思,没看清楚图。现在才看到时可变电阻。除了pin1,2,3外,还有什么不对的吗?例如ICchip的pin circuit,reset circuit等等。还有IC chip 的pin9是直接接GND还是接5V?还有pin 31


怎样?可以了吗?
回复

使用道具 举报

 楼主| 发表于 2-3-2009 09:28 AM | 显示全部楼层
还是不可以run,我已经照着接了,也检查了好几次,但是就是不会run,我的pin3接了一个10k的variable resistor可变电阻,reset circuit pin9,接一个10K的resistor去GND,在接一个capacitor去voltage supply 5V.可是就是不可以run。我问了我的classmate,也是有做lcd display的,他说用4 bits mode display 会有问题,他叫我用8 bit mode 的,那8 bit mode 的program 该改哪里呢?还有就是大大,你觉得应该改吗?是这样的问题吗?
回复

使用道具 举报

发表于 2-3-2009 10:41 AM | 显示全部楼层
原帖由 gabrielloy 于 2-3-2009 09:28 AM 发表
还是不可以run,我已经照着接了,也检查了好几次,但是就是不会run,我的pin3接了一个10k的variable resistor可变电阻,reset circuit pin9,接一个10K的resistor去GND,在接一个capacitor去voltage supply 5V.可是就是 ...


你的schematics, pcb layout有吗??
要你的。不是我的。 这样比较容易看出问题在那里。
回复

使用道具 举报

Follow Us
发表于 2-3-2009 11:06 AM | 显示全部楼层
原帖由 gabrielloy 于 2-3-2009 09:28 AM 发表
还是不可以run,我已经照着接了,也检查了好几次,但是就是不会run,我的pin3接了一个10k的variable resistor可变电阻,reset circuit pin9,接一个10K的resistor去GND,在接一个capacitor去voltage supply 5V.可是就是 ...


就如fritlizt所说的,先澈底檢查接线。很多时候是焊接不良,或线路接错了(如:LCD的D4~D7线接反了,即D4接到D7,D5接到D6......等等)。

如果可以,就拍些照片传上來看看。
回复

使用道具 举报

 楼主| 发表于 2-3-2009 08:02 PM | 显示全部楼层
检查完了,还是run不了,我的pin9接一个resistor到GND,和接一个capacitor到supply.33pF的capacitor和12MHZ的crystal.是不是program的问题?
#include<at89x51.h>

#define     CLR_DISP        0x01      
#define     DISP_ON         0x0C      
#define     DISP_OFF        0x08      
#define     CUR_HOME        0x02
#define     CUR_OFF         0x0C
#define     CUR_ON_UNDER    0x0E
#define     CUR_ON_BLINK    0x0F
#define     CUR_LEFT        0x10
#define     CUR_RIGHT       0x14
#define     CUR_UP          0x80      
#define     CUR_DOWN        0xC0
#define     ENTER           0xC0
#define     DD_RAM_ADDR     0x80      
#define     DD_RAM_ADDR2    0xC0

sbit D7 = P2^6;
sbit D6 = P2^5;
sbit D5 = P2^4;
sbit D4 = P2^3;
sbit EN = P2^2;
sbit RW = P2^1;
sbit RS = P2^0;
sbit a = P1^0;

void system_init (void);
void delay_ms (unsigned int milisec);
void lcd_init (void);
void lcd_write_cmd (unsigned char cmd);
void lcd_write_data (unsigned char character);
void lcd_print (char *string);
void lcd_busy (void);

int main (void)
{
        system_init ();
        while (1){
                if (a == 1)
           lcd_print ("CO inside car in\n@danger level");
        else
           lcd_print ("CO inside car in\n@safety level");
        delay_ms(10);
                }

                while (1);
        return 0;
}

void system_init (void)
{
        P0 = 0xFF;          //port initialization
        P1 = 0xFF;
        P2 = 0xFF;
        P3 = 0xFF;
        TMOD = 0x21;        // set timer 1 to 8bit auto reload mode.
        lcd_init();
}

void delay_ms (unsigned int milisec)
{  
        unsigned int i;

        for (i = 1; i <= milisec; i++){
                TH0 = 0xFC;
                TL0 = 0x18;
                TR0 = 1;
               
                while (!TF0);
                TF0 = 0;
                TR0 = 0;
        }
}

void lcd_init (void)
{
        unsigned char i;
        delay_ms (15);
        RS = 0;
        RW = 0;
      
        for (i = 0; i < 3; i++){
                EN = 1;
                D7 = 0;
                D6 = 0;
                D5 = 1;
                D4 = 1;
                EN = 0;
                delay_ms (5);
        }
      
        EN = 1;
        D7 = 0;
        D6 = 0;
        D5 = 1;
        D4 = 0;
        EN = 0;
        delay_ms (5);
      
        lcd_write_cmd (0x28);                                   //4 bit mode
        lcd_write_cmd (CUR_ON_BLINK);                //display on, curser on, curcor blink on
        lcd_write_cmd (CLR_DISP);                         //Clear Display
        lcd_write_cmd (0x06);                                //increment cursor position
}

void lcd_write_cmd (unsigned char cmd)
{
        lcd_busy();
        RW = 0;
        RS = 0;         
        EN = 1;
      
        D7 = cmd & 0x80;
        D6 = cmd & 0x40;
        D5 = cmd & 0x20;
        D4 = cmd & 0x10;
        EN = 0;
      
        EN = 1;         
        D7 = cmd & 0x08;
        D6 = cmd & 0x04;
        D5 = cmd & 0x02;
        D4 = cmd & 0x01;
        EN = 0;
}

void lcd_write_data (unsigned char character)
{
        lcd_busy();
        RW = 0;
        RS = 1;
        EN = 1;
      
        D7 = character & 0x80;
        D6 = character & 0x40;
        D5 = character & 0x20;
        D4 = character & 0x10;
        EN = 0;
      
        EN = 1;                 
        D7 = character & 0x08;
        D6 = character & 0x04;
        D5 = character & 0x02;
        D4 = character & 0x01;
        EN = 0;
}

void lcd_print (char *string)
{
        unsigned char temp, i = 1;
        lcd_write_cmd (CLR_DISP);
        for (temp = 0; string[temp]!= 0; temp++){
                if (string[temp] == '\n'){
                        i++;
                        if(i > 2)
                                i = 1;
                        switch (i){
                                case 1:
                                        lcd_write_cmd (CUR_UP);
                                        break;
                                case 2:
                                        lcd_write_cmd (CUR_DOWN);
                                        break;      
                                default:
                                        break;
                        }
                }
                else
                        lcd_write_data (string[temp]);
        }
}

void lcd_busy (void)
{
        bit busy = 1;
        RS = 0;
        RW = 1;
        D7 = 1;
        D6 = 1;
        D5 = 1;
        D4 = 1;
        while (busy){
                EN = 0;
                EN = 1;
                EN = 1;
                busy = D7;
                EN = 0;
                EN = 1;
        }
        EN = 0;
}
回复

使用道具 举报


ADVERTISEMENT

发表于 2-3-2009 08:47 PM | 显示全部楼层
reset听起来没问题 。
EA 有没有接去5v.?
有没有比较清楚地照片?
最好是多角度清楚的照片。 看到的东西比较多。
你的照片, 老实讲。 看不到什么的。pin1是哪里, pin40是那里我都看不到。
只看到有一个lcd, mcu, vr, crystal, 还有一个应该是voltage reg得咚咚。
回复

使用道具 举报

发表于 2-3-2009 10:48 PM | 显示全部楼层
对於照片的建义:
(1) 如fritlizt所说,要『多角度清楚的照片』,且其中一張要从正上方拍。
(2) 所有接线要排列整齊,可以清楚看到它是插proiject board的那一个洞。
(3) LCD电板的焊接脚要拍出來,可以清楚看到它的脚號码(pin1~pin14)。

还有,你的project board是新的吗?若是用过多次的,那么,有些洞的接脚已经弹性疲乏,造成接不良。换用更粗的铜线试试看。
回复

使用道具 举报

发表于 3-3-2009 11:36 AM | 显示全部楼层
换一个LCD试看。
之前我有一个,就是 contrast 那里没放resistor, 先去ground, 不能然后换 Vcc, 然后还是不能, 在放resistor, 然后还是不能, 最后换 LCD 就好。可能是没放resistor 时弄坏了。  因为在proteus 没问题。
情况和你一样, 一黑一白。*烧焊没有问题。
回复

使用道具 举报

发表于 3-3-2009 01:44 PM | 显示全部楼层
原帖由 chan1314 于 3-3-2009 11:36 AM 发表
换一个LCD试看。
之前我有一个,就是 contrast 那里没放resistor, 先去ground, 不能然后换 Vcc, 然后还是不能, 在放resistor, 然后还是不能, 最后换 LCD 就好。可能是没放resistor 时弄坏了。  因为在proteus 没问题。
情况和你一样, 一黑一白。*烧焊没有问题。


对,若电路沒接错,換个LCD试试看。我也燒过LCD,换了就OK了。
回复

使用道具 举报

 楼主| 发表于 3-3-2009 03:35 PM | 显示全部楼层
检查了电路没问题,可是就是不行。我只是想知道之前我该的fritlizt大大的program有没有问题?就port initial的时候,我把P1set成0xFF,对不对?
int main (void)
{
        system_init ();
        while (1){
                if (a == 1)
           lcd_print ("CO inside car in\n@danger level");
        else
           lcd_print ("CO inside car in\n@safety level");
        delay_ms(10);
                }

                while (1);
        return 0;
}

void system_init (void)
{
        P0 = 0xFF;          //port initialization
        P1 = 0xFF;
        P2 = 0xFF;
        P3 = 0xFF;
        TMOD = 0x21;        // set timer 1 to 8bit auto reload mode.
        lcd_init();
}
回复

使用道具 举报

发表于 3-3-2009 04:37 PM | 显示全部楼层
原帖由 gabrielloy 于 3-3-2009 03:35 PM 发表
检查了电路没问题,可是就是不行。我只是想知道之前我该的fritlizt大大的program有没有问题?就port initial的时候,我把P1set成0xFF,对不对?
int main (void)
{
        system_init ();
        while (1){
...


其实你有读我的program的话。 不难发觉到我的lcd是接P2的。 不管P1,是什么。 lcd也不会受到影响。
回复

使用道具 举报

 楼主| 发表于 3-3-2009 04:44 PM | 显示全部楼层
这个我知道,可是我最后要达到的效果是port1有input,5V,然后就会从port2display,所以我才要搞清楚p1的initial,对了大大,我看到你有写lcd check busy的subfunction,那之前define的p1,p2,p3,p0的0xFF会不会变,send data去Lcd的时候,不是要set成00的吗?
回复

使用道具 举报

 楼主| 发表于 3-3-2009 04:46 PM | 显示全部楼层



回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 3-3-2009 06:41 PM | 显示全部楼层
我想请问大大,R/Wpin,要怎么接?是直接接GND这样吗?

之前pic大大的图也是这样,
回复

使用道具 举报

发表于 3-3-2009 09:48 PM | 显示全部楼层
原帖由 gabrielloy 于 3-3-2009 06:41 PM 发表
我想请问大大,R/Wpin,要怎么接?是直接接GND这样吗?

之前pic大大的图也是这样,


不如你画schematics, 你的circuit怎样接。再post上来。
你用pic大大的这个图?还是我的图?不一样的。
我的是4 bit interface, read busy flag
这个8 bit interface, 用delay.
现在你用哪一个?
回复

使用道具 举报

 楼主| 发表于 3-3-2009 10:19 PM | 显示全部楼层
我用你的4bits mode的program和circuit,但是就是不能run.是不是delay的问题,不同的lcd的delay都不同不是吗?我的很多classmate之前多是用4bits mode的,但是也是不成功,所以全部换成8bits mode的了,如果是8bits mode 的话,大大你的program要改哪里?可以直接发上来吗?我没有多少时间了,真的对不起,真的很需要,要交报告了
回复

使用道具 举报

发表于 4-3-2009 11:27 AM | 显示全部楼层
原帖由 gabrielloy 于 3-3-2009 10:19 PM 发表
我用你的4bits mode的program和circuit,但是就是不能run.是不是delay的问题,不同的lcd的delay都不同不是吗?我的很多classmate之前多是用4bits mode的,但是也是不成功,所以全部换成8bits mode的了,如果是8bits m ...


1。接你朋友的lcd来试试看。
先关掉backlight, 不要开. backlight很耗电。

2。如果还不能。 要查看power是否接对。用multimeter 查看。 pin40, pin31是不是5v. pin20是不是gnd. 如果没有reset.你的pin9应该会是接近0v.

3.如果都没问题, 还是不能。 看program有没有run.前提是burn 一个很简单的program进去89s51. P1 = 0xAA, P2 = 0x55.什么都不要。
  1. int main (void)
  2. {
  3.     P1 = 0xAA;
  4.     P2 = 0x55;
  5.     while (1);
  6. }
复制代码

过后用meter查看P1 是不是10101010,p2是不是01010101.如果这个不能, 也就是说你的program没有跑。
mcu坏了,crsytal电路接错或者不稳(因为你用面包板),还是crystal真的坏了(这个是最坏结果, crystal很少坏的。换一个crystal看看)。

结果告诉我。
如果要lcd跑,你的3一定要run到。

我的除了start up,没有用delay.我用check busy flag 的。startup delay应该不会影响。

[ 本帖最后由 fritlizt 于 4-3-2009 11:40 AM 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 11-2-2025 12:35 AM , Processed in 0.152283 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表