C++字模软件发送 单片机接收显示

news2024/12/27 5:11:25

/****先定义数组类型再赋值**L310*********/     

/*2014 8 21 10:01**PAST*CODE1000**TEST**/     

               #include<reg51.h>    

               #define  uint unsigned int  

               #define  uchar unsigned char

  sfr      AUXR=0x8e;              //辅助寄存器

               sfr      SADDR=0xA9;             //从机地址寄存器

               sfr      SADEN=0xB9;             //从机地址屏蔽寄存器

  typedef  uchar BYTE;

               typedef  uint  WORD;

               #define  SLAVE 1                 //定义从机编号,0 为从机 1, 1 为从机 2

               #if      SLAVE==0

               #define  SAMASK 0x33             //从机 1 地址屏蔽位

               #define  SERADR 0x55             //从机 1 的地址为 xx01,xx01

               #define  ACKTST 0x78             //从机 1 应答测试数据

               #else

               #define  SAMASK 0x3C             //从机 2 地址屏蔽位

               #define  SERADR 0x5A             //从机 2 的地址为 xx01,10xx

               #define  ACKTST 0x49             //从机 2 应答测试数据

               #endif

               #define  URMD 2                  //0:使用定时器 2 作为波特率发生器

      int      x,a,y,j;                //待放入数组的数据

               int      k,m,*p=&k;              //数组下标位变量

               uint     aa=0;            //

  uint     val,Buff;

               sfr      P4=0xc0;

               sfr      P5=0xc8;

      sbit     out=P5^5;    //

      sbit     CS=P3^5; //12864 PIN4

               sbit     SID=P3^6;    //12864 PIN5

               sbit     SCLK=P3^7;   //12864 PIN6

  sbit     key1=P3^2;   //

               sbit     key2=P3^3;   //

  sbit     key3=P3^4;   //

  uint     array[32],i; //定义数组a 循环总变量i 

  uchar    code zk[]=

      {

      0x41,0x00,0x21,0x00,0x31,0x00,0x21,0xFC,

               0x02,0x20,0x02,0x20,0xF4,0x20,0x10,0x20,

               0x17,0xFE,0x10,0x20,0x10,0x20,0x10,0x20,

               0x14,0x20,0x18,0x20,0x10,0x20,0x00,0x20,

      };

/*------------------延时子程序----------------------*/ 

               void delay_1ms(uint x) 

               {

               int i, j;

               for (i=0; i<x; i++)

               for (j=0; j<1500; j++);

               }

/*------------------延时子程序----------------------*/ 

              void delay(unsigned int t) 

              {  

 unsigned int i,j; 

              for(i=0;i<t;i++) 

              for(j=0;j<100;j++); 

              } 

/*------------------写命令到LCD---------------------*/ 

               void write_com(unsigned char cmdcode) 

               { 

               uchar i; 

               uchar i_data,temp_data1,temp_data2; 

               i_data=0xf8; 

               delay(10); 

               CS=1; 

               SCLK=0; 

                for(i=0;i<8;i++) 

                { 

                SID=(bit)(i_data&0x80); 

                SCLK=0; 

                SCLK=1; 

                i_data=i_data<<1; 

                } 

               i_data=cmdcode; 

               i_data&=0xf0; 

                for(i=0;i<8;i++) 

                { 

                SID=(bit)(i_data&0x80); 

                SCLK=0; 

                SCLK=1; 

                i_data=i_data<<1; 

                } 

               i_data=cmdcode; 

               temp_data1=i_data&0xf0; 

               temp_data2=i_data&0x0f; 

               temp_data1>>=4; 

               temp_data2<<=4; 

               i_data=temp_data1|temp_data2; 

               i_data&=0xf0; 

                for(i=0;i<8;i++) 

                { 

                SID=(bit)(i_data&0x80); 

                SCLK=0; 

                SCLK=1; 

                i_data=i_data<<1; 

                } 

               CS=0; 

               } 

/*-------------------写数据到LCD--------------------*/ 

               void write_data(unsigned char Dispdata) 

               { 

               uchar i; 

               uchar i_data,temp_data1,temp_data2; 

               i_data=0xfa; 

               delay(10); 

               CS=1; 

                for(i=0;i<8;i++) 

                { 

                SID=(bit)(i_data&0x80); 

                SCLK=0; 

                SCLK=1; 

                i_data=i_data<<1; 

                } 

               i_data=Dispdata; 

               i_data&=0xf0; 

                for(i=0;i<8;i++) 

                { 

                SID=(bit)(i_data&0x80); 

                SCLK=0; 

                SCLK=1; 

                i_data=i_data<<1; 

                } 

               i_data=Dispdata; 

               temp_data1=i_data&0xf0; 

               temp_data2=i_data&0x0f; 

               temp_data1>>=4; 

               temp_data2<<=4; 

               i_data=temp_data1|temp_data2; 

               i_data&=0xf0; 

                for(i=0;i<8;i++) 

                { 

                SID=(bit)(i_data&0x80); 

                SCLK=0; 

                SCLK=1; 

                i_data=i_data<<1; 

                } 

               CS=0; 

               } 

/*------------------初始化LCD屏---------------------*/ 

  void lcd_init() 

               { 

               uchar comdata; 

               delay_1ms(100); 

               comdata=0x30; 

               write_com(comdata);   /*功能设置:一次送8位数据,基本指令集*/ 

               comdata=0x04; 

               write_com(comdata);   /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/ 

  comdata=0x0f; 

               write_com(comdata);   /*显示设定:开显示,显示光标,当前显示位反白闪动*/ 

               comdata=0x01; 

               write_com(comdata);   /*清DDRAM*/ 

               comdata=0x02; 

               write_com(comdata);   /*DDRAM地址归位*/ 

               comdata=0x80; 

               write_com(comdata);   /*把显示地址设为0X80,即为第一行的首位*/ 

               }

/*------------初始化串口---------------------*/

               void InitUart()

               {

               SADDR=SERADR;

               SADEN=SAMASK;

               SCON=0x50;     //8位数据,可变波特率允许接收

               #if URMD==0

               T2L=0xDF;             //设置波特率重装值

               T2H=0xFE;             //9600bps(65536-11059200/4/9600)

               AUXR &=0x40;     //定时器1时钟为Fosc/12,即12T

          AUXR&=0xFE;     //串口1选择定时器1为波特率发生器

               #elif URMD==1

               AUXR=0x40;            //定时器 1 为 1T 模式

               TMOD=0x20;     //设定定时器1为16位自动重装方式

          TL1=0xDF;     //设定定时初值

          TH1=0xFE;     //设定定时初值

          ET1=0;         //禁止定时器1中断

          TR1=1;         //启动定时器1

               #else

               TMOD=0x20;            //设置定时器 1 为 8 位自动重装载模式

               AUXR=0x40;            //定时器 1 为 1T 模式

      TL1=TH1=0xDB;         //9600 bps(256 - 11059200/32/9600)

               TR1=1;

               #endif

               }

/****************************************************/

               void timer0() interrupt 1

               { 

               aa=aa+1;

               TH0=0X53;

               TL0=0X32;

               if(aa==500)

               out=!out,

               aa=0;

               }  

/*--------UART 中断服务程序----Buff=SBUF---------------*/

               void Uart() interrupt 4 using 1

               {

                if(RI)

                {

array[i]=SBUF;           //数组下标位置的数据等于j

                i++;                     //m加一

                RI=0;

       }  

               }

/*--------显示     程序-------------------*/

              void uartdisp() 

              {

   a=0;

x=0;

   for(y=0;y<=16;)

{

                if(x==0)

       {

write_com(0x36); //写入数据的地址 

       write_com(y+0X80);   //起始地址加计数地址80->8F

                write_com(0X80);     //列地址

         write_com(0x30); //扩充指令

       write_data(zk[a]);    //一个字符的左半部 前一个字节

a++;

       }

       else

       {

                write_data(zk[a]); //一个字符的右半部 后一个字节

a++;

       y++;

       }

       x=~x;

       if(y>=16)

                {

        write_com(0x34); 

                 write_com(0x36);

       }

}

               }

/*--------显示     程序-------------------*/

              void disp() 

              {

   a=0;

x=0;

   for(y=0;y<=16;)

{

                if(x==0)

       {

       write_com(0x36); //写入数据的地址 

                write_com(y+0X80);   //起始地址加计数地址80->8F

                write_com(0X80);     //列地址

         write_com(0x30); //扩充指令

       write_data(array[a]);//一个字符的左半部 前一个字节

a++;

       }

       else

       {

                write_data(array[a]);//一个字符的右半部 后一个字节

a++;

       y++;

       }

       x=~x;

       if(y>=16)

                {

        write_com(0x34); 

                 write_com(0x36);

       }

}

               }

/****************************************************/

               void send(unsigned temp) 

              { 

               unsigned serial;

      serial=temp;

      SBUF=(unsigned char)temp;

               while(TI!=1);

      TI=0;

              }          

/****************************************************/

               void main()

               { 

  lcd_init(); //初始化LCD屏

  AUXR=0X80;            //STC系列的1T 设置

               TMOD=0X01;

               TH0=0X53;

               TL0=0X32;

  ET0=1;

               TR0=1; 

  i=0; 

  m=0;

  InitUart();           //初始化串口

  EA=1;

  ES=1;

  while(1)

  {

            if(!key1)

    {

 i=0;

     disp();

}

    if(!key2)

    {

 i=0;

 out=0;

 for(k=0;k<32;k++) // zk[]

 {

 send(array[k]); 

 delay(200);

 }

 delay(2000);

     out=1;

}

if(!key3)         //

{

 uartdisp();

}

}

               }

           

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1647343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

后台启动HIVE的JDBC连接

后台启动HIVE的JDBC连接 生活就像一杯咖啡&#xff0c;有时苦涩&#xff0c;有时香甜&#xff0c;但都是值得品味的经历。无论遇到什么挑战&#xff0c;记住在每一天的开始&#xff0c;你都有机会给自己倒上一杯清新的力量&#xff0c;为心灵添一抹温暖。勇敢地面对生活的苦与甜…

aardio爬虫) 实战篇:逆向有道翻译web接口

前言 之前的文章把js引擎(aardio封装库) 微软开源的js引擎(ChakraCore))写好了&#xff0c;这篇文章整点js代码来测一下bug。测试网站&#xff1a;https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻译js逆向&#xff08;MD5加密&#xff0c;AES加密&…

Ubuntu上使用audit2allow解决Android Selinux问题

1.安装工具 sudo apt install policycoreutils 2.运行命令 提前用dmesg或者串口抓取kernel log 遇到错误&#xff0c;提示需要用-p指定policy file&#xff0c;然偶尝试创建一个policy空文件&#xff0c;用-p选项&#xff0c;遇到如下错误 3.规避问题 首先跟进错误log的堆栈…

【copilot 使用指南 - @workspace】

为什么需要workspace 默认情况下&#xff0c;copilot只能分析当前文件中的代码内容&#xff0c; 那么如何让copliot 跨文件分析&#xff0c;分析整个项目&#xff0c;分析整个代码目录下的代码&#xff0c;就要用到workspace&#xff0c;举例 &#xff1a;假设如下代码 index…

【图书推荐】《图神经网络基础、模型与应用实战》

本书目的 详解PyTorch 图神经网络基础理论、模型与十多个应用案例&#xff0c;带领读者掌握图神经网络在自然语言处理、计算机视觉、推荐系统、社交网络4个领域的应用开发方法&#xff0c;丰富读者利用深度学习算法解决实际问题的能力。 本书案例 图卷积网络实现图注意力网络…

【状态压缩 动态规划 数论】1799. N 次操作后的最大分数和

本文涉及知识点 状态压缩 动态规划 数论 动态规划汇总 LeetCode1799. N 次操作后的最大分数和 给你 nums &#xff0c;它是一个大小为 2 * n 的正整数数组。你必须对这个数组执行 n 次操作。 在第 i 次操作时&#xff08;操作编号从 1 开始&#xff09;&#xff0c;你需要&a…

UE5 UMG

锚点 参考链接&#xff1a;虚幻5UI系统&#xff08;UMG&#xff09;基础&#xff08;已完结&#xff09;_哔哩哔哩_bilibili

专注 APT 攻击与防御—基于UDP发现内网存活主机

UDP简介&#xff1a; UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的协议&#xff0c;在第四层-传输层&#xff0c;处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点&#xff0c;也就是说&#xff0c;当报文发送之后&#xf…

【Linux】冯·诺依曼体系结构

要想谈进程&#xff0c;我们就不能只谈进程&#xff0c;我们如果想搞清楚什么是进程&#xff0c;就要从操作系统讲起。我们现在的不管是Linux或是Windows或是安卓等操作系统&#xff0c;它们都有一个相同点&#xff0c;那就是遵循冯诺依曼体系结构&#xff0c;我们看一下冯诺依…

Docker-harbor

一、搭建本地私有仓库 1.1 下载Registry镜像 1.2 添加本地私有仓库配置 1.3 重启服务并运行Registry容器 1.4.容器的操作 1.4.1 拉取Nginx镜像并为镜像打标签 1.4.2 上传到私有仓库 1.4.3 列出私有仓库所有镜像 1.4.4 列出私有仓库的镜像的所有标签 1.4.5 先删除原有…

leetcode-没有重复项的全排列-97

题目要求 思路 1.递归&#xff0c;如果num和n的元素个数一样就可以插入res中了&#xff0c;这个作为递归的结束条件 2.因为这个题是属于排列&#xff0c;并非组合&#xff0c;两者的区别是排列需要把之前插入的元素在回退会去&#xff0c;而组合不需要&#xff0c;因此会存在一…

5.Git

Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;Java类、xml文件、html文件等&#xff09;。通过Git仓库来存储和管理这些文件&#xff0c;Git仓库分为两种 本地仓库&#xff1a;开发人员自己电脑上的Git仓库远程仓库&#xff1a;远程…

leetcode-有重复数字的全排列-98

题目要求 思路 1.同【没有重复项的全排列-97】这个题一样&#xff0c;都是递归的题&#xff0c;区别在于这个可能会包含重复的数字&#xff0c;因此&#xff0c;不能只是简单的通过两个值是否相等然后用标志位标记&#xff0c;而是新增了一个数组&#xff0c;这个数组专门用于…

Springboot工程创建

目录 一、步骤 二、遇到的问题及解决方案 一、步骤 打开idea,点击文件 ->新建 ->新模块 选择Spring Initializr&#xff0c;并设置相关信息。其中组为域名&#xff0c;如果没有公司&#xff0c;可以默认com.example。点击下一步 蓝色方框部分需要去掉&#xff0c;软件包…

Liunx磁盘管理(下)

中篇&#xff1a;https://blog.csdn.net/Lzcsfg/article/details/138355036 一.逻辑卷 逻辑卷&#xff08;Logical Volume&#xff09;是逻辑卷管理 (LVM) 中的一个概念&#xff0c;它为 Linux 系统中的存储管理提供了更大的灵活性和可扩展性。LVM 允许你将物理存储设备&…

Linux:进程概念(二.查看进程、父进程与子进程、进程状态详解)

Linux&#xff1a;进程概念&#xff08;二.查看进程、父进程与子进程、进程状态详解&#xff09; 上次讲了一下:Linux&#xff1a;冯诺依曼体系结构、操作系统、初识进程 文章目录 1.查看进程1.1准备工作1.2 指令&#xff1a;ps—显示当前系统中运行的进程信息1.3查看进程属性…

Adobe Illustrator 2024 for Mac:矢量图形设计软件

Adobe Illustrator 2024 for Mac是一款专为Mac用户设计的行业标准矢量图形设计软件。该软件以其卓越的性能和丰富的功能&#xff0c;为设计师和艺术家们提供了一个全新的创意空间。 作为一款矢量图形软件&#xff0c;Adobe Illustrator 2024 for Mac支持创建高质量的矢量图形&a…

这是用VS写的一个tcp客户端和服务端的demo

服务端&#xff1a; 客户端&#xff1a; 其实这里面的核心代码就两行。 客户端的核心代码&#xff1a; //套接字连接服务端 m_tcpSocket->connectToHost(_ip,_port);//通过套接字发送数据m_tcpSocket->write(ui.textEditSend->toPlainText().toUtf8());//如果收到信…

代码本地化

目的 代码本地化&#xff08;Localization&#xff09;是指将软件应用程序中的文本、图形、声音和其他内容翻译成特定语言的过程&#xff0c;同时确保这些内容在目标文化中适当地呈现。本地化不仅仅是对文本进行翻译&#xff0c;还包括对日期、时间、数字、货币、排序顺序、文本…

Linux网络—PXE高效批量网络装机

目录 一、部署PXE远程安装服务 1、搭建PXE远程安装服务器 1&#xff09;安装并启用 TFTP 服务 2&#xff09;安装并启用 DHCP 服务 3&#xff09;准备 Linux 内核、初始化镜像文件 4&#xff09;准备 PXE 引导程序 5&#xff09;安装FTP服务&#xff0c;准备CentOS 7 安…