这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 开始

共7条 1/1 1 跳转至

开始

菜鸟
2011-11-23 23:04:01     打赏
很久不用Protel软件了,也没有设计硬件了,今天把Protel安装到了电脑上,打开了EEPW给的51单片机原理图,发现原理图上根本没有使用STC单片机的内部资源,所以使用我压在箱底的AT89S52就可以了,嘿嘿!又可以省钱了。



关键词: 开始    

菜鸟
2011-11-27 09:39:04     打赏
2楼

开发板今天到了,居然都是贴片的,很久以前剩下的元器件都不能用了,还要重新买。悲剧!


菜鸟
2011-12-01 20:47:06     打赏
3楼
等待原件中!

菜鸟
2011-12-12 22:13:01     打赏
4楼

菜鸟
2011-12-12 22:22:49     打赏
5楼
#include "include/1602.h"
#include < AT89X52.H >
#include < intrins.h >

#define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ;

sbit LCD_RS = P2^4 ;             
sbit LCD_RW = P2^5 ;
sbit LCD_EN = P2^6 ;

U_8b code  MyDef[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};


//P0 为LCD数据口
/******************************************************************/
/*检查LCD忙状态                                                   */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。   */
/******************************************************************/
bit LCD_Busy()
 {                          
    bit result ;
    LCD_RS = 0 ;
    LCD_RW = 1 ;
    LCD_EN = 1 ;
    delayNOP() ;
    result = (bit)(P0&0x80) ;
    LCD_EN = 0 ;
    return(result) ;
 }


void LCD_CMD(U_8b cmd)
{
    while(LCD_Busy()) ;
    LCD_RS = 0 ;
    LCD_RW = 0 ;
       LCD_EN = 0;

    P0 = cmd ;

    delayNOP() ;
    LCD_EN = 1 ;
    delayNOP() ;
    LCD_EN = 0 ;      
}

void Init_LCD()
{
    delay_ms(15);
    LCD_CMD(0x01);      //清除LCD的显示内容            
    LCD_CMD(0x38);      //16*2显示,5*7点阵,8位数据
    delay_ms(5);
    LCD_CMD(0x38);         
    delay_ms(5) ;
    LCD_CMD(0x38);
    delay_ms(5);
    LCD_CMD(0x0c);
    delay_ms(5);
    LCD_CMD(0x06);
    delay_ms(5);
    LCD_CMD(0x01);
    delay_ms(5);        //地址自增 光标不显示
        
}

void PutChar(U_8b set_x,U_8b set_y,U_8b LCD_data )
{
    while(LCD_Busy()) ;
    if (set_y == 0)
    {
        LCD_CMD((0x80 | set_x));
        }else{
        LCD_CMD((0xC0 | set_x));
    }
    while(LCD_Busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    P0 = LCD_data;
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;
    delayNOP();
}

/*自定义字符写入CGRAM  */
void LCD_Write_Def()  
{  
    U_8b i;
    LCD_CMD(0x40) ;            //写CGRAM
    for (i = 0 ; i< 8 ; i++)       
    {
        while(LCD_Busy());
        LCD_RS = 1;
        LCD_RW = 0;
        LCD_EN = 0;
        P0 = MyDef[i];
        delayNOP() ;
        LCD_EN = 1 ;
        delayNOP() ;
        LCD_EN = 0 ;
    }        
}

专家
2011-12-12 22:24:51     打赏
6楼
照片不是很清楚!!!

菜鸟
2011-12-13 23:31:39     打赏
7楼
手机照的,身边没有数码相机!呵呵!
LCD1602上面就是显示了下温度,硬件单片机没有使用STC的我用的是原来剩下的AT89S52单片机。

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]