LCD12232串行显示C51程序

发布者:dong125612最新更新时间:2015-07-21 来源: eechina关键字:LCD12232  串行显示  C51程序 手机看文章 扫描二维码
随时随地手机看文章

这个程序包含三个方面的知识:
1。4*4按键的部份--完成(0~9)数字键,功能键,字母键的输入;按键抬起后才能作用;
2。LCD12232的显示部份;串行显示,只用两根线,显示中英文字母及数字;
3。TTL系列芯片与CMOS系列芯片的知识,及做库;这部份还没完成;
我想第三步完成了,MM还符合一名合格的大学毕业生的;
哈!直接上代码了,下载地址:http://www.51hei.com/f/12232ch.rar
#include
 #define uint unsigned int
 #define uchar unsigned char
 sbit SID = P0^5 ;
 sbit SCK = P0^6 ;
 sbit BUZ = P0^7;
 
 sbit A0 = P3^0;
 sbit A1 = P3^1;
 sbit A2 = P3^2;
 sbit A3 = P3^3;
 sbit A4 = P3^4;
 sbit A5 = P3^5;
 sbit B0 = P0^0;
 sbit B7 = P1^7;
 sbit B6 = P1^6;
 sbit B5 = P1^5;
 sbit B4 = P1^4;
 sbit B3 = P1^3;
 sbit B2 = P1^2;
 uchar Key_Select,Key_Mode;
 uchar code Disp_1[]={"浙江师范大学行"};
 uchar code Disp_2[]={"知学院电子信息"};
 uchar code Disp_3[]={"工程08级毛梦超"};
 uchar code Disp_4[]={"的毕业设计--集"}; 
 uchar code Disp_5[]={"成电路测试系统!"};
 uchar code Disp_6[]={"指导老师:丁宇"}; 
 uchar code Disp_7[]={"请插入芯片后按"};
 uchar code Disp_8[]={"确认键进行测试!"};
 uchar code Disp_9[]={"请选择芯片类型:"};
 uchar code Disp_10[]={"1-CMOS; 2-TTL;"};
 uchar code Disp_11[]={"请输入CMOS系列"};
 uchar code Disp_12[]={"请输入TTL 系列"};
 uchar code Disp_13[]={"IC型号:"};
//-----------------Delay_*2us------------------- 
 void Delay_us(uchar x2us)
 {
  while(--x2us);
 }
 
 void Delay_ms(uint xms)
 {
   uint i,j;
   for(i=xms;i>0;i--)
   for(j=122;j>0;j--)
   {} 
 }
//-------------4KHz------------------- 
 void Buz(void)
 {
  uint i;
  for(i=200;i>0;i--)
  {
   BUZ=1;
   Delay_us(120);
   BUZ=0;
  }
  BUZ=0;
 }
//-------------LCD Part-------------------- 
//LCD显示部份之写地址
//-----------------------------------------
 void Lcd_Wr_Command(uchar com_data)
 {
  uchar i;
  uchar i_data;
  i_data=0xf8;
  SCK=0;
  for(i=0;i<8;i++)
  {
    SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
  }
  i_data=com_data;
  i_data&=0xf0;
  for(i=0;i<8;i++)
  {
   SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
  }
   i_data=com_data;
   i_data<<=4;
   for(i=0;i<8;i++)
   {
    SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
   }
   Delay_ms(1);
 }
//-------------LCD Part-------------------- 
//LCD显示部份之写数据
//-----------------------------------------
 void Lcd_Wr_Data(uchar com_data)
 {
  uchar i;
  uchar i_data;
  i_data=0xfa;
  
  for(i=0;i<8;i++)
  {
    SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
  }
  i_data=com_data;
  i_data&=0xf0;
  for(i=0;i<8;i++)
  {
   SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
  }
   i_data=com_data;
   i_data<<=4;
   for(i=0;i<8;i++)
   {
    SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
   }
   Delay_ms(1);
 }
//-------------LCD Part-------------------- 
//LCD显示部份之初始化
//-----------------------------------------
 void Lcd_init()
 {
  Delay_ms(100);
  Lcd_Wr_Command(0x30);
  Delay_ms(5);
  Lcd_Wr_Command(0x02);
  Delay_ms(5);
  Lcd_Wr_Command(0x06);
  Delay_ms(5);
  Lcd_Wr_Command(0x0c);
  Delay_ms(5);
  Lcd_Wr_Command(0x01);
  Delay_ms(5);
  //Lcd_Wr_Command(0x80);
 }
 void Posit(uchar x,uchar y,uchar *String)
 {
  uchar Posit,Addr;
  if(y==1)
  Addr=0x80;
  if(y==2)
  Addr=0x90;
  Posit=Addr+x;
  Lcd_Wr_Command(Posit);
  while(*String!='')
  {
   Lcd_Wr_Data(*String++);
   Delay_ms(250);
  } 
 
 }
//-------------------------------------------------
//4*4键盘扫描部份;按键释放后才返回键值
//------------------Key_Scan-----------------------
 uchar s_scan(void)
 {
  
  P2=0xf0;
  if((P2&0xf0)!=0xf0)
  {
   P2=0xf0;
   Delay_ms(30);
   if((P2&0xf0)!=0xf0)
   { 
     P2=0xfe ;  //第一列开始,逐行扫描
    if((P2&0xf0)!=0xf0)
    {
     P2&=0xf0;
     if(P2==0xe0)
     {Buz();while(!(P2==0xf0));return(16);}    //取消键
     if(P2==0xd0)
     {Buz();while(!(P2==0xf0));return(15);}    //确认键`
     if(P2==0xb0)
     {Buz();while(!(P2==0xf0));return(14);}    //选择键
     if(P2==0x70)
     {Buz();while(!(P2==0xf0));return(13);}    //测试键
    } 
      P2=0xfd; //第二列开始,逐行扫描
    if((P2&0xf0)!=0xf0)
    {
     P2&=0xf0;
     if(P2==0xe0)
     {Buz();while(!(P2==0xf0));return(12);}    //“LS”字母输入键
     if(P2==0xd0)
     {Buz();while(!(P2==0xf0));return(11);}    //“CD”字母输入键
     if(P2==0xb0)
     {Buz();while(!(P2==0xf0));return(10);}    //“0”键
     if(P2==0x70)
     {Buz();while(!(P2==0xf0));return(9);}    //“9”键
    }
     P2=0xfb;    //第三列开始,逐行扫描
    if((P2&0xf0)!=0xf0)
    {
     P2&=0xf0;
     if(P2==0xe0)
     {Buz();while(!(P2==0xf0));return(8);}   //“8”键
     if(P2==0xd0)
     {Buz();while(!(P2==0xf0));return(7);}   //“7”键
     if(P2==0xb0)
     {Buz();while(!(P2==0xf0));return(6);}   //“6”键
     if(P2==0x70)
     {Buz();while(!(P2==0xf0));return(5);}   //“5”键
    }  
      P2=0xf7; //第四列开始,逐行扫描
    if((P2&0xf0)!=0xf0)
    {
     P2&=0xf0;
     if(P2==0xe0)
     {Buz();while(!(P2==0xf0));return(4);}  //“4”键
     if(P2==0xd0)
     {Buz();while(!(P2==0xf0));return(3);}  //“3”键
     if(P2==0xb0)
     {Buz();while(!(P2==0xf0));return(2);}  //“2”键
     if(P2==0x70)
     {Buz();while(!(P2==0xf0));return(1);}  //“1”键
    }
   } 
  }
  return 0;
 }[page]
//------------------main part-----------------
//主函数部份
//-----------------------------------------
 void main()
 {
  uchar key_code;
  Lcd_init();
//-------------------------------
//浙江师范大学行知学院电子信息
//------------------------------- 
  Posit(0,1,Disp_1);
  Posit(0,2,Disp_2);
  Delay_ms(1000);
  Lcd_Wr_Command(0x01);
  Delay_ms(5);
  Lcd_Wr_Command(0x02);
  Delay_ms(5);
//-------------------------------
//工程08级毛梦超的毕业设计-集
//-------------------------------
  Posit(0,1,Disp_3);
  Posit(0,2,Disp_4);
  Delay_ms(1000);
//-------------------------------
  Lcd_Wr_Command(0x01);
  Delay_ms(5);
  Lcd_Wr_Command(0x02);
  Delay_ms(5);
//-------------------------------
//成电路测试系统!指导老师:丁宇
//-------------------------------
  Posit(0,1,Disp_5);
  Posit(0,2,Disp_6);
  Delay_ms(5000);
//-------------------------------
  Lcd_Wr_Command(0x01);
  Delay_ms(5);
  Lcd_Wr_Command(0x02);
  Delay_ms(5);
//-------------------------------
//请插入芯片后按确认进行测试!
//-------------------------------
  Posit(0,1,Disp_7);
  Posit(0,2,Disp_8);
  Delay_ms(100);
  while(1)
  {
   key_code=s_scan();
//------------------------------------------------------
//键值处理程序,包含数字输入键和字母输入键以及功能键操作
//------------------------------------------------------
   switch(key_code)
   {
    case 1:
      {
       Lcd_Wr_Data('1');
       Delay_ms(300);
      }break;
    case 2:
      {
       Lcd_Wr_Data('2');
       Delay_ms(300);
      }break;
    case 3:
      {
       Lcd_Wr_Data('3');
         Delay_ms(300);
      }break;
    case 4:
      {
       Lcd_Wr_Data('4');
       Delay_ms(300);
      }break;
    case 5:
      {
       Lcd_Wr_Data('5');
       Delay_ms(300);
      }break;
    case 6:
      {
       Lcd_Wr_Data('6');
       Delay_ms(300);
      }break;
    case 7:
      {
       Lcd_Wr_Data('7');
       Delay_ms(300);
      }break;
    case 8:
      {
       Lcd_Wr_Data('8');
       Delay_ms(300);
      }break;
    case 9:
      {
       Lcd_Wr_Data('9');
       Delay_ms(300);
      }break;
    case 10:
      {
       Lcd_Wr_Data('0');
       Delay_ms(300);
      }break;
    case 11:
      {
       Posit(5,2,"CD");
       Delay_ms(300);
      }break;
    case 12:
      { 
       Posit(5,2,"LS");
       Delay_ms(300);
      }break;
    case 13:
      {
       P3=0x00;
       if(Key_Select==1)  //CMOS芯片型号CD4053
       {
       
       }
       if(Key_Select==2)  //TTL 芯片型号74LS00
       {
          P3=0x00;
        P1=0x00;
        B4=0x00;
 
        B6=0;B7=0;
        B3=0;B4=0;
         if((A0&0x01)&&(A3&0x01)&&(B0&0x01)&&(B5&0x01))
          {
         Buz();
         Buz();Delay_ms(500);
         Lcd_Wr_Command(0x01);
         Posit(0,1,"测试结果:");
         Posit(4,2,"OK!");
         Buz();Delay_ms(100);
         Buz();Delay_ms(300);
         Buz();Delay_ms(500);
         Buz();Delay_ms(800);
         Buz();Delay_ms(1000);
         Buz();Delay_ms(800);
         Buz();Delay_ms(500);
         Buz();Delay_ms(300);
         Buz();Delay_ms(100);
        }
        else
        {
         Buz();
         Lcd_Wr_Command(0x01);
         Posit(0,1,"测试结果:");
         Posit(4,2,"FAIL!");
         while(Key_Select)
         {
          Buz();
         }
        }
       }
       Delay_ms(300);
      } break;
    case 14: //选择键
      {
       Key_Select++;
       if(Key_Select==1)
       {
        Lcd_Wr_Command(0x0f);
        Lcd_Wr_Command(0x90); 
       }
       if(Key_Select==2)
       {
        Lcd_Wr_Command(0x0f);
        Lcd_Wr_Command(0x94); 
       }
       if(Key_Select==3)
       {
        Lcd_Wr_Command(0x0c);
        Key_Select=0; 
       }
       Delay_ms(300);
      }break;
    case 15: //确认键
      {
       Key_Mode++;
       if(Key_Mode==3)
       {
        Key_Mode=0;
        Key_Select=0;
        Lcd_Wr_Command(0x0c);
        Lcd_Wr_Command(0x01);
        Lcd_Wr_Command(0x02);
        Posit(0,1,Disp_7);
        Posit(0,2,Disp_8); 
       }
       if(Key_Mode==1)
       {
        Lcd_Wr_Command(0x01);
        Posit(0,1,Disp_9);
        Posit(0,2,Disp_10);
       }
       if(Key_Mode==2)
       {
         if(Key_Select==1)
         {
          Lcd_Wr_Command(0x01);
        Lcd_Wr_Command(0x02);
          Posit(0,1,Disp_11);
        Posit(0,2,Disp_13);
        //Lcd_Wr_Command(0x95); 
         }
         if(Key_Select==2)
          {
          Lcd_Wr_Command(0x01);
        Lcd_Wr_Command(0x02);
          Posit(0,1,Disp_12);
        Posit(0,2,Disp_13);
        //Lcd_Wr_Command(0x95); 
         }
       }
       Delay_ms(300);
      }break;
    case 16: //取消键
      {
       if(Key_Select==1)
       {
        Lcd_Wr_Command(0x0c);
        Lcd_Wr_Command(0x01);
        Lcd_Wr_Command(0x02);
        Lcd_Wr_Command(0x0f);
        Posit(0,1,Disp_11);
        Posit(0,2,Disp_13);
        //Lcd_Wr_Command(0x95);
       }
       if(Key_Select==2)
       {
        Lcd_Wr_Command(0x0c);
        Lcd_Wr_Command(0x01);
        Lcd_Wr_Command(0x02);
        Lcd_Wr_Command(0x0f);
        Posit(0,1,Disp_12);
        Posit(0,2,Disp_13);
        //Lcd_Wr_Command(0x95);
       }
       Delay_ms(300);
      }break;
    default:P0=0xff;
   }  
    }
 }
关键字:LCD12232  串行显示  C51程序 引用地址:LCD12232串行显示C51程序

上一篇:基于8位数码管的可调时钟时钟课程设计
下一篇:轻松搞定独立键盘控制与4*4行列式矩阵键盘扫描

推荐阅读最新更新时间:2024-03-16 14:25

C51学习心得体会,static和extern在程序中的应用
1、用stat IC 、extern可以声明变量 1.1 可用static声明全局变量和局部变量(包括数组)。 (1)用static声明的局部变量只能被定义该变量的函数识别,在退出函数时该局部变量仍然保持其值, e.g. void temp() { static int array ;//静态局部变量 ...... } 用static声明局部数组可以避免在每次调用函数时都建立和初始化数组,以及在每次退出函数时撤销数组,缩短程序执行时间。 (2)用static声明静态外部变量,可以限定外部变量只被本文件引用,不会被其他文件引用.为文件的模块化、通用性提供方便. e.g. file1.c(file1文件) static int A;/
[单片机]
PID算法调节C51程序(5)
typedef struct PIDValue { uint32 Ek_Uint32 ; //差值保存,给定和反馈的差值 uint8 EkFlag_Uint8 ; //符号,1则对应的Ek 为负数,0为对应的Ek 为正数 uint8 KP_Uint8; uint8 KI_Uint8; uint8 KD_Uint8; uint8 B_Uint8; //死区电压 uint8 KP; //显示修改的时候用 uint8 KI; // uint8 KD; // uint8 B; // uint16 Uk_Uint
[单片机]
C51外中断程序
没有中断时以流水灯显示,外中断0使左右4个LED交替闪烁,外中断1使LED闪亮, #include reg51.h unsigned char code design ={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00}; void Delay(unsigned int i){ unsigned int j; for(;i 0;i--) for(j=0;j 125;j++); } void main(){ unsigned char i; EA=1; EX0=1; EX1=1; IT0=1; //脉冲触发方式 IT1=0; //使用电平触发 PX0
[单片机]
C51教程 第四个51程序:中断控制--外部中断0
内部资源之外部中断 中断类型 中断入口地址 中断序号 外部中断0(INT0)P3.2 0003H 0 外部中断1(INT1)P3.3 0013H 2 定时计数器0(T0) 16bit 000BH 1 定时计数器1(T1) 001BH 3 定时计数器2(T2) 002BH 5 异步串行通信口(UART) 0023H 4 CPU外围模块的掌握方法: (1)相关口线 (2)相关控制字 (3)模块的工作方式 一、外部中断 (1)相关口线 P3.2:int0,外部
[单片机]
<font color='red'>C51</font>教程 第四个51<font color='red'>程序</font>:中断控制--外部中断0
通过日期算星期的C51程序
#include reg52.h #define uint unsigned int #define uchar unsigned char uchar code monthday ={31,28,31,30,31,30,31,31,30,31,30,31}; uchar month_n_day(uint y,uchar m) //算出某年某月有多少天 { if(m==2) return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28); else return(monthday ); } //**************
[单片机]
用PWM控制渐变七彩灯C51程序
一、硬件介绍: (采用5050LED 2W) RGB三色LED控制引脚分别为单片机P1.2 、 P1.1 、 P1.0。LED正极接主电源(24V)正极,负极接驱动3颗三极管的集电极,单片机控制脚分别接3颗NPN三极管,三极管发射极接地,而单片机的供电是来自三端稳压器7805,祥细原理如下: 二、实物图片: 三、软件部分: 1、/*原理: 先亮红灯(保持一会儿)----红绿过度(绿加1、红减1循环240次)------ 绿灯亮起(保持一会儿)----绿兰过度(兰加1、绿减1循环240次) -----兰灯亮起(保持)-----兰白过度(绿加1、红加1循环240次、兰不变) ---白红过度,技术支持网站:
[单片机]
用PWM控制渐变七彩灯<font color='red'>C51</font><font color='red'>程序</font>
I2C总线规范与I2C器件C51读写程序(一)
1、I2C总线简介: I2C 总线是一双线串行总线,它提供一小型网络系统,为总线上的电路共享公共的总线。总线上的器件有单片机、LCD 驱动器以及上E2PROM 器等等。自从菲利普公司提出I2C总线规范以来,I2C器件得到了广泛的应用。I2C器件的应用大大减少了电路间连线,减小了电路板尺寸,降低了硬件成本,并提高了系统可靠性。 2、I2C规范: I2C总线规范可以参考有关资料,本文仅给出有关硬件操作的基本概念。 2.1、I2C 总线名词解释: 发送器:发送数据到总线上的器件 接收器:从总线上接收数据的器件 主器件:启动数据传送并产生时钟信号的器件 从器件:被主器件寻址的器件 2.2、I2C总线时序定义: 起始位:SCL=1时,在SDA
[单片机]
C51单片机矩阵键盘扫描去抖程序
  这段有1个C51的项目,用的是新华龙的C51 F020单片机。项目中要使成为事实4*5的矩阵键盘。矩阵电路图如次如示      此中,四条列线接在 F020的P2~P5口线上,5条行线接在P5口线上(F020的P5口是差别于平凡C51的扩大接口,不克不及位寻址)。同时4条列线接在一四输入与非门(74LS20)上,门输出接F020的外间断1,如许,不论什么一键按下,都会孕育发生间断,报信程序举行键盘电子扫描。   托1个新手给写了键盘的电子扫描程序,基本功效都能使成为事实,但对键盘的去抖措置惩罚老是做欠好,体现是或不克不及去抖,或按钮相应太卡,或采集到纰缪键值。看来新手对矩阵键盘电子扫描原理掌握较好(网上资料多)
[单片机]
<font color='red'>C51</font>单片机矩阵键盘扫描去抖<font color='red'>程序</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved