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

/****先定义数组类型再赋值**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.mzph.cn/web/7398.shtml

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

相关文章

读字库写FM24C04

/*PCB机板增加读写24C64函数PAST 2017 12 26 08:10 CODE 7382*/ /*按11键进入手动选择&#xff0c;按12键进入参数设定界面 按1存1 2存2 3存3 15存0 16存1236 17读EEPROM显示正确 L1008 13775061792 ******/ #include <reg52.h>…

多链路聚合设备是什么

多链路聚合设备属于通信指挥装备。 乾元通多链路聚合设备&#xff0c;它能够将多个网络链路聚合成一个逻辑链路&#xff0c;以实现高速、稳定、可靠的数据传输。多链路聚合设备的核心技术包括链路聚合、负载均衡、故障切换等&#xff0c;能够智能管理和优化利用不同网络链路&a…

websevere服务器从零搭建到上线(二)|Linux上的五种IO模型

文章目录 阻塞 blocking非阻塞 non-blockingIO复用 IO multiplexing信号驱动 signal-driven异步 asynchronous拓展知识 看过上篇文章英国基本能理解本文五张图的内容websevere服务器从零搭建到上线&#xff08;一&#xff09;&#xff5c;阻塞、非阻塞、同步、异步 本文要能够在…

【postgresql初级使用】可以存储数据的视图-物化视图,加速大数据下的查询分析

物化视图 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 物化视图概述 …

HIVE统计WordCount

HIVE WORDCOUNT 目录 HIVE WORDCOUNT 一、WORDCOUNT 1.我们先创建一个新的数据库 2.创建表并插入数据 3.统计WORDCOUNT 4.UNION ALL 用法 5.WITH AS 用法 1.WORDCOUNT 1&#xff09;我们先创建一个新的数据库 create database learn3;use learn3; 2&#xff09;创建表…

知识图谱融入RAG模型:LinkedIn重塑智能客服新范式【附LeCun哈佛演讲PPT】

原文&#xff1a;Retrieval-Augmented Generation with Knowledge Graphs for Customer Service Question Answering 一、研究背景与问题 在客服领域,快速准确地匹配用户问题与历史工单,是提供优质回答的关键。传统的检索增强生成(Retrieval-Augmented Generation, RAG)方法虽…

分享5款PDF编辑软件

PDF编辑不易&#xff0c;有需要的朋友可以试试这5款专业软件&#xff0c;每一个都能直接在PDF文件上编辑&#xff0c;不同的软件对PDF可编辑的范围不同&#xff0c;大家可以按需求选用。 1.edge浏览器 Edge浏览器不仅是浏览网页的得力助手&#xff0c;还悄然成为了轻量级PDF管…

微信小程序开发秘籍:解锁音频录制与录音功能的奥秘

微信小程序开发秘籍&#xff1a;解锁音频录制与录音功能的奥秘 在微信小程序的开发旅程中&#xff0c;音频功能的集成可以极大地丰富用户体验&#xff0c;特别是在教育、娱乐、社交等领域。本文将引领你深入了解如何在微信小程序中实现音频录制和播放功能&#xff0c;从基本概…

2024蓝桥杯RSA-Theorem

方法1&#xff1a;直接使用工具yafu解题 yafu的使用方法 安装&#xff1a;解压后直接使用即可&#xff0c;在文件包内&#xff0c;执行命令终端&#xff0c;输入命令行 1、如果数比较小&#xff0c;进入该文件的目录后可以直接使用: yafu-x64 factor(n) 如果是powershell&…

Element-UI快速入门:构建优雅的Vue.js应用界面

Element-UI是一套基于Vue.js的组件库&#xff0c;提供了丰富的UI组件和交互效果&#xff0c;帮助开发者快速构建出美观、功能丰富的Web应用界面。本文将介绍如何快速入门Element-UI&#xff0c;并搭建一个简单的示例界面。 步骤一&#xff1a;安装Element-UI 首先&#xff0c…

Embeddings原理、使用方法、优缺点、案例以及注意事项

Embeddings是一种将高维数据映射到低维空间的技术&#xff0c;常用于处理自然语言处理&#xff08;NLP&#xff09;和计算机视觉&#xff08;CV&#xff09;任务。Embeddings可以将复杂的高维数据转换为低维稠密向量&#xff0c;使得数据可以更容易地进行处理和分析。本文将介绍…

张家界(24-17)

目录 总路线酒店&#xff1a;深圳北->张家界西&#xff08;day1 07:14~13:45&#xff09;张家界西&#xff08;酒店&#xff09;->张家界森林公园东门&#xff08;day2 早上&#xff09;张家界森林公园东门->张家界西&#xff08;day2 19:48分的高铁&#xff09;张家界…

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

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

树和二叉树:二叉树的基本运算算法的实现

一.前言 当前版本仅供笔者复盘 二.二叉树 2.1题目 编写一个程序&#xff0c;实现二叉树的基本运算&#xff0c;具体要求如下&#xff1a;&#xff08;指定示范实例1&#xff1a;图1。指定示范实例2&#xff1a;图2 &#xff09; 1&#xff0c;先序遍历输出该树&#xff08…

Qt QInputDialog详解

1.简介 QInputDialog是一个对话框类&#xff0c;用于从用户那里获取一个单一的值。这个值可以是字符串、数字、或者一个列表中的选项。QInputDialog提供了一个方便的方式来快速创建一个输入对话框&#xff0c;无需自己从头开始构建。 QInputDialog支持多种输入类型&#xff1…

【CTF Web】XCTF GFSJ0475 get_post Writeup(HTTP协议+GET请求+POST请求)

get_post X老师告诉小宁同学HTTP通常使用两种请求方法&#xff0c;你知道是哪两种吗&#xff1f; 解法 用 Postman 发送一个 GET 请求&#xff0c;提交一个名为a,值为1的变量。 http://61.147.171.105:65402/?a1用 Postman 发送一个 POST 请求&#xff0c;提交一个名为b,值为…

【吊打面试官系列】Java高并发篇 - 可以直接调用 Thread 类的 run ()方法么?

大家好&#xff0c;我是锋哥。今天分享关于 【可以直接调用 Thread 类的 run ()方法么&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 可以直接调用 Thread 类的 run ()方法么&#xff1f; 当然可以。但是如果我们调用了 Thread 的 run()方法&#xff0c;它的行…

自定义指令基本用法

自定义指令基本用法 1.自定义指令案例一&#xff1a;输入框自动聚焦2.自定义指令生命周期和参数-修饰符3.封装全局自定义指令3.1 创建directive目录&#xff0c;创建index.js&#xff0c;创建format-xx文件3.1 main.js文件引入并传入全局对象3.3 组件中引用 自定义指令 Vue可以…

VSCode通过SSH连接虚拟机Ubuntu失败

问题说明 最近使用VSCode通过SSH连接Ubuntu&#xff0c;通过VSCode访问Ubuntu进行项目开发&#xff0c;发现连接失败 在VSCode中进行SSH配置 这些都没有问题&#xff0c;但在进行连接时候出现了问题&#xff0c;如下&#xff1a; 出现了下面这个弹窗 解决方法 发现当…

【c1】数据类型,运算符/循环,数组/指针,结构体,main参数,static/extern,typedef

文章目录 1.数据类型&#xff1a;编译器&#xff08;compiler&#xff09;与解释器&#xff08;interpreter&#xff09;&#xff0c;中文里的汉字和标点符号是两个字节&#xff0c;不能算一个字符&#xff08;单引号&#xff09;2.运算符/循环&#xff1a;sizeof/size_t3.数组…