STCAD转换 晶联讯1353(5VLCD)显示

/***晶联讯1353(5VLCD)显示调节电位器参数变化***/     
/******2018 6 30 08:50*L252   CODE 1339 ******/
/***变频器 PWM2017 5 6板测试AD+晶联讯1353*****/    
               #include <reg52.h>          //
               #define  uint unsigned int  
               #define  uchar unsigned char
               #define  VCC 4.970
               sfr      ADC_LOW2=0xBE;          //ADC低2位结果
               sfr      P1ASF=0x9D;             //P1口第2功能控制寄存器
               uchar    code disdt[11]={0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xa3};
               uchar    code disds[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
               sbit     cs1=P3^3;                  //PIN14
               sbit     reset=P3^4;                  //PIN15
               sbit     rs=P3^5;                  //PIN16
               sbit     sda=P3^6;                  //PIN17
               sbit     sck=P3^7;                  //PIN18
               uint     val;
               sbit     key1=P1^2;   //
               sbit     key2=P1^5;   //
               sbit     key3=P5^4;   //
               uint     m,n,l,s;                  /****个十百代码缓冲**/
               uchar    m1,n1,l1,s1;
/****************************************************/
               void delay(uint x)
               {
               int i, j;
               for (i=0; i<x; i++)
               for (j=0; j<1500; j++);
               }
               uchar     code dian[]=
{0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00};/*"电",0*/
uchar     code liu[]=
{0x10,0x60,0x01,0x86,0x60,0x04,0x44,0x64,0x55,0x4E,0x44,0x64,0xC4,0x04,0x04,0x00,
0x04,0x04,0xFC,0x03,0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x3F,0x40,0x40,0x70,0x00};/*"流",1*/
/* (16 X 16 , 宋体 )*/

uchar code mao_hao[]={
/*-- 文字: : (冒号) --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};
char code num[]={
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00
};
/*写指令到LCD 模块*/
              void transfer_command(int data1)
              {
              char i;
              cs1=0;
              rs=0;
               for(i=0;i<8;i++)
               {
               sck=0;
               if(data1&0x80) sda=1;
               else sda=0;
               sck=1;
               data1=data1<<=1;
               }
              }
/*写数据到LCD 模块*/
              void transfer_data(int data1)
              {
              char i;
              cs1=0;
              rs=1;
               for(i=0;i<8;i++)
               {
               sck=0;
               if(data1&0x80) sda=1;
               else sda=0;
               sck=1;
               data1=data1<<=1;
               }
              }
/************LCD 模块初始化***************/
              void initial_lcd()
              {
              cs1=0;                                                                                                      
              delay(100);
              reset=0; /*低电平复位*/
              reset=1; /*复位完毕*/
              delay(20);
              transfer_command(0xe2); /*软复位*/
              delay(5);
              transfer_command(0x2c); /*升压步聚1*/
              delay(5);
              transfer_command(0x2e); /*升压步聚2*/
              delay(5);
              transfer_command(0x2f); /*升压步聚3*/
              delay(5);
              transfer_command(0x23); /*粗调对比度,可设置范围0x20~0x27*/
              transfer_command(0x81); /*微调对比度*/
              transfer_command(0x28); /*0x1a,微调对比度的值,可设置范围0x00~0x3f*/
              transfer_command(0xa2); /*1/9 偏压比(bias)*/
              transfer_command(0xc8); /*行扫描顺序:从上到下*/
              transfer_command(0xa0); /*列扫描顺序:从左到右*/
              transfer_command(0x40); /*起始行:第一行开始*/
              transfer_command(0xaf); /*开显示*/
              cs1=1;
              }
              void lcd_address(uchar page,uchar column)
              {
              cs1=0;
              column=column-1; //我们平常所说的第1 列,在LCD 驱动IC 里是第0 列。所以在这里减去
              page=page-1;
              transfer_command(0xb0+page); /*设置页地址。每页是8 行。一个画面的64 行被分成8 个页。我们平常所说的
第1 页,在LCD 驱动IC 里是第0 页,所以在这里减去1*/
              transfer_command(((column>>4)&0x0f)+0x10); //设置列地址的高4 位
              transfer_command(column&0x0f); //设置列地址的低4 位
              }
/*全屏清屏*/
              void clear_screen()
              {
              unsigned char i,j;
              cs1=0;
               for(i=0;i<9;i++)
               {
               lcd_address(1+i,1);
                for(j=0;j<132;j++)
                {
                transfer_data(0x00);
                }
               }
              cs1=1;          //
              }
/*显示16x16 点阵图像、汉字、生僻字或16x16 点阵的其他图标*/
              void display_graphic_16x16(uchar page,uchar column,uchar *dp)
              {
              uchar i,j;
              cs1=0;
               for(j=0;j<2;j++)
               {
               lcd_address(page+j,column);
                for (i=0;i<16;i++)
                {
                transfer_data(*dp); /*写数据到LCD,每写完一个8 位的数据后列地址自动加1*/
                dp++;
                }
               }
              cs1=1;
              }
/*显示8x16 点阵图像、ASCII, 或8x16 点阵的自造字符、其他图标*/
              void display_graphic_8x16(uchar page,uchar column,uchar *dp)
              {
              uchar i,j;
              cs1=0;
               for(j=0;j<2;j++)
               {
               lcd_address(page+j,column);
                for (i=0;i<8;i++)
                {
                transfer_data(*dp); /*写数据到LCD,每写完一个8 位的数据后列地址自动加1*/
                dp++;
                }
               }
              cs1=1;
              }
/*--------UART 中断服务程序----Buff=SBUF---------------*/
               void Uart() interrupt 4 using 1
               {
                if(RI)
                {
                val=SBUF;           //数组下标位置的数据等于j
                RI=0;
               }    
               }
/****************************************************/
               void Dis_Data()
               {
               display_graphic_8x16(1,(89),num+m1*16); /*在第5 页,第89 列显示单个数字"0"*/
               display_graphic_8x16(1,(89+8*1),num+n1*16); /*在第5 页,第97 列显示单个数字"0"*/
               display_graphic_8x16(1,(89+8*2),num+l1*16); /*在第5 页,第97 列显示单个数字"0"*/
               display_graphic_8x16(1,(89+8*3),num+s1*16); /*在第5 页,第97 列显示单个数字"0"*/
               }
/*--------------数据转换------------------------*/
              void datachuange(uint S)
              {
               m=S/1000;                 /*减t1x1000再减t2X100*/
               n=(S-m*1000)/100;               /*分离千 百 十 个三位*/  
               l=(S-m*1000-n*100)/10;
               s=S-m*1000-n*100-l*10;
               m1=m;
               n1=n;
               l1=l;
               s1=s;
              }
/**************************************/
              uint ADC_P11()
              {
               uint i;
               uchar status=0;    //用于判断AD转换结束标志
               uint ADC_Dat=0;     //10位AD转换值
               ADC_CONTR|=0X80;   //开AD转换器电源,第一次使用时要打开内部模拟电源
               for(i=0;i<10000;i++)//适当延时等待ADC转换供电稳定,一般延时1ms以内即可
               P1ASF|=0X02;//选择P1.1作为AD    转换通道
               ADC_CONTR=0XE1; //最高转换速度,清转换完成标志
               for(i=0;i<1000;i++)//如果是多通道模拟量进行转换,则更换AD转换通道后,需延时200us
               ADC_CONTR|=0X08;//启动AD转换,ADC_START=1
               while(status==0)//等待AD转换结束
                {
                status=ADC_CONTR&0X10;//判断ADC_FLAG是否等于1,0X10=0001 0000B
                }
                ADC_CONTR&=0XE7;//将ADC_FLAG清零 1110 0111 ADC_FLAG=0  ADC_START=0
                ADC_Dat=(ADC_RES<<2)|(ADC_RESL&0X03);//高低字节拼接成一个10位数
                return ADC_Dat;//返回AD转换值
               }
/****************************************************/
               void main()
               {
               uint ADvalue;//存放A/D转换返回的结果
               P0M0=0;
               P0M1=0;
               P1M0=0;
               P1M1=0;
               P2M0=0;
               P2M1=0;
               P3M0=0;
               P3M1=0;
               P5M0=0;
               P5M1=0;
               AUXR=0X80;            //STC系列的1T 设置
               TMOD=0X01;
               TH0=0X53;
               TL0=0X32;
               ET0=1;
               TR0=1;
               EA=1;
               ES=1;
               val=0;
               initial_lcd();
               clear_screen(); //clear all dots    清除所有显示点
               display_graphic_16x16(1,1,dian); /*在第5 页,第1 列显示单个汉字"电"*/
               display_graphic_16x16(1,(1+16),liu); /*在第5 页,第17 列显示单个汉字"流"*/
               display_graphic_8x16(1,(1+16*2),mao_hao); /*在第5 页,第25 列显示单个字符":"*/
               while(1)
               {
                ADvalue=ADC_P11();//采样P1.1口模拟输入电压
                val=ADvalue;//
                datachuange(val);
                Dis_Data();
                delay(2000);       //m,n,l,s
                }
               }

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

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

相关文章

[实验]Keil 4下仿真三星2440A芯片的汇编及CPIO控制实验

一、安装Keil uVision4 (详细安装过程忽略) 点击finish完成安装 二、新建项目&#xff0c;导入项目文件 选择对应的芯片&#xff0c;此处我们选择三星的S3C2440A&#xff0c;点击OK 在Source Group 1处右键&#xff0c;点击Add Files to "Sourcce Group 1’…将下图…

Linux之ebpf(1)基础使用

Linux之ebpf(1)基础使用 Author: Once Day Date: 2024年4月20日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可以参考专栏&#xff1a;Linux基础知识_Once-D…

非对称渐开线齿轮学习笔记分享

最近有小伙伴遇到了非对称渐开线齿轮的加工问题,花了些时间学习了解一下,下面是总结的学习笔记,有兴趣的朋友可以瞅瞅: 目录: 为什么要采用非对称? 非对称有什么优点? 非对称齿形如何加工? 非对称齿轮怎么测量? 非对称齿轮建模 为什么要采用非对称? 现在的传动要求…

关于浏览器360导航无法更改

当前环境场景&#xff1a; 浏览器&#xff1a;Microsoft Edge 版本 121.0.2277.106 (正式版本) (64 位) 系统&#xff1a;Windows 11 家庭中文版 23H2 问题描述 首先出现这种情况会让我们非常的气愤但是又束手无策&#xff0c;看到这个页面简直就恨的牙根痒痒&#xff0c;但是…

14.MMD导入Blender及贴图步骤

MMD导出.abc文件 在MMD十周年桥版本导入一个人物模型&#xff0c;这里导入仆人 注意MMD的路径不能有中文 点击上面的MMDBridge 设定 第一个选择blender by 第二个选择实行 这里是选择帧数范围和帧率 帧率一定要是30&#xff0c;不然后面可能会出问题 点击文件导出视频…

宁夏回族自治区工程技术系列专业技术职称评审条件

宁夏回族自治区工程技术系列专业技术职称评审条件链接http://222.75.70.73:8001/zcps/HomepageNotices.do?methodfwdPageNotice&strbm90aWNlaWQ9MjcxMjAyMDAzMTMwNjAxMjk2NTc类别基本条件业绩成果备注助理工程师1.本专业&#xff08;或相近专业&#xff09;中专毕业&#…

C/C++开发,opencv-ml库学习,支持向量机(SVM)应用

目录 一、OpenCV支持向量机&#xff08;SVM&#xff09;模块 1.1 openCV的机器学习库 1.2 SVM&#xff08;支持向量机&#xff09;模块 1.3 支持向量机&#xff08;SVM&#xff09;应用步骤 二、支持向量机&#xff08;SVM&#xff09;应用示例 2.1 训练及验证数据获取 2…

Gin+WebSocket实战——在线聊天室WebSocketDemo详细使用教程

文章目录 仓库地址项目简介如何使用 仓库地址 Github&#xff1a;https://github.com/palp1tate/WebsocketDemo 欢迎star&#xff01;&#x1f60e; 项目简介 利用 GinWebSocket 实现的在线聊天室Demo项目&#xff0c;支持加入/离开聊天室广播、给其他用户发送消息等。 如何…

STL——List常用接口模拟实现及其使用

认识list list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素…

【C++】抽象类 与 C++

基础 C中没有抽象类的概念C中通过纯虚函数实现抽象类纯虚函数只是定义原型的成员函数一个类中存在纯虚函数就成为了抽象类 纯虚函数语法 class Shape {public:virtual double area() 0;// 0 用于告诉编译器当前是声明纯虚函数&#xff0c;因此不需要定义函数体 };抽象类与纯虚…

系统思考—心智模式

如果你总是做你过去一直做的事&#xff0c;你将永远得到你一直得到的结果。——托尼罗宾斯 在1980年代早期&#xff0c;美国汽车公司的高层主管定期前往日本参观&#xff0c;想要了解日本汽车行业为何能超越美国。这些主管返回后常说&#xff1a;“他们没有让我们看到真正的工…

工作任务管理平台作品集源文件 figma格式UX/UI设计师作品集

交付文件&#xff1a;作品集源文件项目源文件包装样机源文件字体文件 交付格式&#xff1a;figma、psd 作品集文件页数&#xff1a;28页 项目文件页数&#xff1a;12页&#xff08;Web&#xff09;12页&#xff08;App&#xff09; 以下重点哦&#xff0c;请认真阅读&#…

碰撞检测与相交测试-unity碰撞检测和相交测试的实现原理

Unity中的碰撞检测和相交测试是通过物理引擎来实现的。Unity使用了基于迭代的动态物理引擎&#xff0c;其中包含了一些常用的碰撞检测算法和相交测试算法。 碰撞检测是指判断两个物体是否发生了碰撞&#xff0c;而相交测试是指判断两个物体是否有交集。 在Unity中&#xff0c…

Halcon 3D 使用3D ROI截取模型

Halcon 3D 使用3D ROI截取模型 链接:https://pan.baidu.com/s/1UfFyZ6y-EFq9jy0T_DTJGA 提取码:ewdi * 1.读取图片 ****************

《R语言与农业数据统计分析及建模》学习——方差分析

方差分析是研究一种或多种因素的变化对试验结果的观测值是否有显著影响&#xff0c;从而找到较优试验条件或生产条件的一种常用数理统计方法。 方差分析根据平方和的加和原理&#xff0c;利用F检验&#xff0c;进而判断试验因素对试验结果的影响是否显著。 分为&#xff1a;单因…

CMake+qt+Visual Studio

#使用qt Creator 创建Cmake 项目,使用Cmake Gui 生成sln 工程&#xff0c;使用Visual Studio 开发 ##使用qt Creator 创建CMake项目 和创建pro工程的步骤一致&#xff0c;只是在选择构建系统的步骤上选择CMake,接下来步骤完全相同 工程新建完成之后&#xff0c;构建cmake 项…

公司服务器中的kafka消息中间件挂了,我是如何修复的?

今天的公司的system系统服务在运行过程中&#xff0c;提示连接不上kafuka的消息中间件。但是负责kafka的同事已经离职了&#xff0c;询问公司开发也不知道如何处理&#xff0c;我是如何重启kafka消息中间件使system系统服务正常运行&#xff1f; 查看kafka的安装位置 在下面的…

Java基础:设计模式之原型模式

原型模式是一种创建型设计模式&#xff0c;它允许我们通过复制现有的对象来创建新的对象&#xff0c;而不是每次都通过构造函数新建。这种模式适用于那些创建新对象成本较高或者构造过程复杂的情况。在原型模式中&#xff0c;一个对象通过实现Cloneable接口并重写其clone()方法…

WPF —— MVVM架构

1 什么是MVVM&#xff1f; MVVM是一种软件架构模式&#xff0c;它将应用程序分为三个层次 model&#xff08;数据模型&#xff09;&#xff0c;view&#xff08;视图&#xff09;&#xff0c;viewmodel&#xff08;视图模型&#xff09; model&#xff1a;表示应用程序当中数…

什么是RabbitMQ,RabbitMQ基本概念,RabbitMQ的使用场景

目录 面试官:什么是RabbitMQ,RabbitMQ的使用场景什么是RabbitMQ?RabbitMQ基本概念RabbitMQ的使用场景举例该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:什么是RabbitMQ,RabbitMQ的使用场景 …