微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 硬件电路设计讨论 > 创意电子密码锁程序分享

创意电子密码锁程序分享

时间:10-02 整理:3721RD 点击:
#include <reg51.h>
#define lcd_data      P0
  sbit RS      = P2^0;
  sbit RW      = P2^1;
  sbit E       = P1^6;
  sbit PSB     = P2^2;

void delay(unsigned int k)
{  
      unsigned int i;
      unsigned char j;
      for(i=0;i<k;i++)
      {
           for(j=0;j<10;j++);
       }
}
//********************************************************
//延时1ms函数
//********************************************************
void delay_ms(unsigned int k)//延时0.994us,晶振12M
{
    unsigned int x,y;
    for(x=k;x>0;x--)
         for(y=121;y>0;y--);
}
//********************************************************
//写命令函数
//********************************************************
void LcdWcom(unsigned char WCom)
{
      delay(1);
      RS=0;  //指明操作对象为指令寄存器
      RW=0; //指明为写操作
      E=1;
      lcd_data=WCom; //将命令写入总线
      E=0;
}
//********************************************************
//写数据函数
//********************************************************
void LcdWdata(unsigned char WData)
{
     delay(1);
     RS=1; //指明操作对象为数据寄存器
     RW=0; //指明为写操作
     E=1;
     lcd_data=WData; //将数据写入总线
     E=0;
}
//********************************************************
//显示初始化函数
//********************************************************
void Display_Init(void)
{
      delay_ms(45); //延时45ms
      PSB=1; //8位并行口
      //功能设定
      LcdWcom(0x30); //设置为8位并行口,基本指令集
      delay(10);
      LcdWcom(0x30); //再次设置为8位并行口,基本指令集
      delay(5);
//    //显示开关控制
//    LcdWcom(0x0c); //游标显示关,正常显示,整体显示开
//    delay(10);
      //清除显示
      LcdWcom(0x01);  
      delay_ms(12); //延时12ms
      //进入点设置
      LcdWcom(0x06); //设置为游标右移,DDRAM位地址加1,画面不移动
      delay(5);
      LcdWcom(0x0C); //开显示
}
  //********************************************************
//设置光标函数
//参数说明:x为行号,y为列号
//********************************************************
void Set_Cursor(unsigned char x, unsigned char y)
{
    unsigned char i;
    switch(x)//确定行号
    {
        case 0x00: i=0x80; break;//第一行
        case 0x01: i=0x90; break;//第二行
        case 0x02: i=0x88; break;//第三行
        case 0x03: i=0x98; break;//第四行
        default : break;
    }
    i = y+i;//确定列号
    LcdWcom(i);//写地址
}
//********************************************************
//显示字符函数
//********************************************************
void Display_Char(unsigned char Alphabet)
{
      delay(1);
      LcdWdata(Alphabet); //写入需要显示字符的显示码
}
/**********************显示单个字符*************************/
void main()
{
        while(1)
        {
         Set_Cursor(0,0); //光标地址设定
Display_Char(0x21); //显示字符!
        }
}

学习                                                

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top