stc单片机吧 关注:1,643贴子:1,902
  • 11回复贴,共1

再次点亮1602,看程序就能知道IO接法

只看楼主收藏回复

视频来自:百度贴吧


回复
1楼2018-07-16 21:37
    我自己都看不到录像什么样的,发个图片吧!


    回复
    来自Android客户端2楼2018-07-16 21:48
      看到很多同学不会点亮1602,很替你们着急,写个例程供参考吧
      程序里没有加很复杂的功能,下面三个led类似流水灯吧
      简单有源蜂鸣器报警
      定时器T0的简单应用
      lcd1602第一行静态显示 第二行动态显示
      晶振11.0592
      这些程序对初学者有用,大神请绕道而行,谢谢!
      以后不再发视频贴了,还需要审核很麻烦的,发图片好了。


      回复
      3楼2018-07-16 21:56
        #include<reg52.h>
        #define LCD1602_DB P0 //data bus
        #define u8 unsigned char
        #define u16 unsigned int
        sbit LCD1602_RS = P2^0;
        sbit LCD1602_RW = P2^1;
        sbit LCD1602_EN = P2^2;
        sbit moto =P1^5;
        sbit relay =P1^7;
        sbit red =P1^6;
        sbit green =P1^4;
        sbit yellow =P1^2;
        sbit echo =P1^1;
        sbit tr =P1^0;
        sbit beep =P3^5;
        sbit K1 =P3^7;
        sbit K2 =P3^6;
        sbit K3 =P3^4;
        sbit K4 =P3^3;


        u8 code asc[15]={'0','1','2','3','4','5','6','7','8','9','.','-','M'};
        u16 ms;
        u8 ss;


        void Read_Busy()
        {
        u8 sta; //
        LCD1602_DB = 0xff;
        LCD1602_RS = 0;
        LCD1602_RW = 1;
        do
        {
        LCD1602_EN = 1;
        sta = LCD1602_DB;
        LCD1602_EN = 0;
        }while(sta & 0x80);
        }


        void Lcd1602_Write_Cmd(u8 cmd)
        {
        Read_Busy();
        LCD1602_RS = 0;
        LCD1602_RW = 0;
        LCD1602_DB = cmd;
        LCD1602_EN = 1;
        LCD1602_EN = 0;
        }


        void Lcd1602_Write_Data(u8 dat)
        {
        Read_Busy();
        LCD1602_RS = 1;
        LCD1602_RW = 0;
        LCD1602_DB = dat;
        LCD1602_EN = 1;
        LCD1602_EN = 0;
        }


        void LcdSetCursor(u8 x,u8 y)
        {
        unsigned char addr;
        if(y == 0)
        addr = 0x00 + x;
        else
        addr = 0x40 + x;

        Lcd1602_Write_Cmd(addr|0x80);
        }


        void LcdShowStr(u8 x,u8 y,u8 *str)
        {
        LcdSetCursor(x,y);
        while(*str != '\0')
        {
        Lcd1602_Write_Data(*str++);
        }
        }


        void InitLcd1602()
        {
        Lcd1602_Write_Cmd(0x38);
        Lcd1602_Write_Cmd(0x0c);
        Lcd1602_Write_Cmd(0x06);
        Lcd1602_Write_Cmd(0x01);
        }


        void Timer0Init(void)//@11.0592MHz
        {
        TMOD &= 0xF0;
        TMOD |= 0x01;
        TL0 = 0x66;
        TH0 = 0xFC;
        TF0 = 0;
        TR0 = 1;
        ET0 = 1;
        EA = 1;
        }




        void main()
        {
        u8 str[] = "1234567890";
        u8 str2[] = " ";
        InitLcd1602();
        Timer0Init();
        beep=0;


        while(1)
        {

        LcdShowStr(0,0,str);


        str2[4]=asc[ss/100];
        str2[5]=asc[ss%100/10];
        str2[6]=asc[ss%10];
        LcdShowStr(3,1,str2);
        }
        }


        void tm0_isr() interrupt 1 using 1
        {
        TL0 = 0x66;
        TH0 = 0xFC;
        if (ms-- == 0) //1ms * 1000 -> 1s
        {
        ms = 1000; //reset counter
        ss++;
        switch(ss%3)
        {
        case 0:red=1,green=1,yellow=0;break;
        case 1:red=0,green=1,yellow=1;break;
        case 2:red=1,green=0,yellow=1;break;
        }
        }
        }


        回复
        4楼2018-07-16 21:58
          1602是6800总线,51自带的8080总线+一个74系列的逻辑芯片,程序上仅需1行即可完成读或者写操作,不用模拟时序这么麻烦。


          回复(2)
          来自Android客户端5楼2018-07-16 23:30
            不好意思啊,不会用啊!


            回复
            来自Android客户端6楼2018-07-16 23:34
              改天我發個我的代碼


              收起回复
              来自Android客户端7楼2018-07-19 17:42
                我挺小妖:美女,STC15F2K602S的特殊功能寄存器和SCT89C52特殊功能寄存器兼容吗,否则还要重新熟悉一遍,有些麻烦


                回复(1)
                来自手机贴吧8楼2018-09-22 09:12