⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 主程序.c

📁 基于51单片机的CA1602A液晶显示,串行传输,键盘编码等源代码
💻 C
字号:

#include <REG51.H>
#include<absacc.h>
#include <stdio.h>
#include <STRING.H>
#include <MATH.H>
#define DB P0

#define uchar unsigned char
#define uint  unsigned int

#include "Lcd1602.h"




//以上代码保留不要删除

uchar revlen ;   //目前收到的字符的数目
//单片机初始化:
void InitialCpu()   
{
   //开串行中断 
    ET0=0;    //关定时中断0
    ET1=0;    //关定时中断1
    ES=1;     //开串行中断
    EX0=0;    //开外部中断0
    EX1=0;    //开外部中断1
    EA=1;     //中断允许
    IP=0x00;  //中断优先级

  //串行中断设置:
  SCON=0x50;   //SM0 SM1 SM2 REN =0101,模式1,允许接收;


    //假设波特率19.2k,晶震为11.059M.
      PCON=PCON | 0x80; //SMOD=1;
      TMOD=0x20 ; //定时器1工作模式2,8位自动重装.当溢出后自动装载TH1到TL1.
      TL1=0xFD;
      TH1=0xFD;   //初值
      TR1=1;      //启动订时器

}



//接收时要响应串行中断(向量号4),并判断是发送中断还是接收中断.
void uart() interrupt 4
      {
	     uchar row;
		 uchar col;
		 
         if(RI==1)
            {
             
             RI=0;   //软件清零
             if(revlen>=32)
			    {
				 revlen=0;
  			     
				}
			 if(revlen==0)  
			   {
			    configure(0x01);
				msec(100);
			   }

             if(revlen<16)
			     {
				   row=0;
				   col=revlen;
				 }
			 else{
			       row=1;
				   col=revlen-16;
			     }
             
             printchar(row,col, SBUF );
			 revlen=revlen+1;

            }
         if(TI==1)
            {
             TI=0;  //软件清零
             

            }
      }



//接收时要响应串行中断(向量号4),并判断是发送中断还是接收中断.

/////
main()
{
    unsigned char display=0x01;
    unsigned char P2Copy;
    unsigned char KeyNo;
    InitialCpu();
    msec(200);
    LcdIni();

    print(0,0,"hello world", strlen("hello world"));
    msec(100);
	print(1,0,"51MPU study"  , strlen("51MPU study"));

    SBUF='a';
    revlen =0;
    while(1)
      {
        //跑马灯
	    P1=display;
		msec(50);
	    if(display<128)
	      display=display*2;
	    else display=0x01;

        //按键:
        P2Copy=P2;
        P2Copy=P2Copy & 0xf8 ;
        if(P2Copy !=0xf8)
         {

            //判断键盘编码
            KeyNo=P2Copy & 0x08; 
            if(KeyNo==0)
              {
                 configure(0x01);
			   	 msec(50);
                 print(0,0,"Key 1 Press", strlen("Key 1 Press"));
              }


            KeyNo=P2Copy & 0x10; 
            if(KeyNo==0)
              {
                 configure(0x01);
			   	 msec(50);
                 print(0,0,"Key 2 Press", strlen("Key 2 Press"));
              }


            KeyNo=P2Copy & 0x20; 
            if(KeyNo==0)
              {
                 configure(0x01);
			   	 msec(50);
                 print(0,0,"Key 3 Press", strlen("Key 3 Press"));
              }


            KeyNo=P2Copy & 0x40; 
            if(KeyNo==0)
              {
                 configure(0x01);
			   	 msec(50);
                 print(0,0,"Key 4 Press", strlen("Key 4 Press"));
              }

            KeyNo=P2Copy & 0x80; 
            if(KeyNo==0)
              {
                 configure(0x01);
			   	 msec(50);
                 print(0,0,"Key 5 Press", strlen("Key 5 Press"));
              }
              
            //等待弹起
            while(1)
            {
            P2Copy=P2;
            P2Copy=P2Copy & 0xf8 ;
            if(P2Copy ==0xf8)  break;
            }
            
         }
    
      }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -