历史上的今天
返回首页

历史上的今天

今天是:2024年09月23日(星期一)

正在发生

2020年09月23日 | STC15F2K60S2单片机数字电压表制作(不用外围A/D换换)

2020-09-23 来源:51hei

最近做了一个用STC15系列单片机内部A/D转换做的数字电压表,1602显示。就想着实现硬件很少,就做着玩玩。

制作出来的实物图如下:

实物图

实物图

`TWJXOWH`_H3}A)A@AK6~]W.png?imageView2/2/w/550 @2DCKK]3GZ6Z0R2`W[[Y@VF.png?imageView2/2/w/550 8~MX)U[69SU0EJZE80XA)QB.png?imageView2/2/w/550

#include

#include

#define uchar unsigned char

#define uint unsigned int

unsigned char data adc_datah; //定义保存AD转换结果的绝对地址

unsigned char data adc_datal;


#define LCD1602_DB P2

sbit LCD1602_RS = P4^1;

sbit LCD1602_RW = P4^2;

sbit LCD1602_E = P4^4;


unsigned long int mn0,mn1,mn3,mn4,mn5,mn6,mn7;


void InitLcd1602();

void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);

uchar *tab0[10]={"0","1","2","3","4","5","6","7","8","9"};


  /*** 等待液晶准备好***/

void LcdWaitReady()

        {

            unsigned char sta;

            LCD1602_DB = 0xFF;

            LCD1602_RS = 0;

            LCD1602_RW = 1;

            do         {

                LCD1602_E = 1;

                sta = LCD1602_DB;                 //读取状态字

                LCD1602_E = 0;

                    }while (sta & 0x80);         //bit7 等于 1 表示液晶正忙,重复检测直到其等于 0 为止

        }

/* 向 LCD1602 液晶写入一字节命令,cmd-待写入命令值 */

void LcdWriteCmd(unsigned char cmd)

        {

            LcdWaitReady();

            LCD1602_RS = 0;

            LCD1602_RW = 0;

            LCD1602_DB = cmd;

            LCD1602_E = 1;

            LCD1602_E = 0;

        }

/* 向 LCD1602 液晶写入一字节数据,dat-待写入数据值 */

void LcdWriteDat(unsigned char dat)

        {

            LcdWaitReady();

            LCD1602_RS = 1;

            LCD1602_RW = 0;

            LCD1602_DB = dat;

            LCD1602_E = 1;

            LCD1602_E = 0;

        }

/* 设置显示 RAM 起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */

void LcdSetCursor(unsigned char x, unsigned char y)

        {

            unsigned char addr;

            if (y == 0){ //由输入的屏幕坐标计算显示 RAM 的地址

                addr = 0x00 + x; //第一行字符地址从 0x00 起始

            }else{

                addr = 0x40 + x; //第二行字符地址从 0x40 起始

            }

            LcdWriteCmd(addr | 0x80); //设置 RAM 地址

        }

/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */

void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)

        {

            LcdSetCursor(x, y); //设置起始地址

            while (*str !=0)

                { //连续写入字符串数据,直到检测到结束符

                LcdWriteDat(*str++); //先取 str 指向的数据,然后 str 自加 1

            }

        }

/* 初始化 1602 液晶 */

void InitLcd1602()

        {

            LcdWriteCmd(0x38); //16*2 显示,5*7 点阵,8 位数据接口

            LcdWriteCmd(0x0C); //显示器开,光标关闭

            LcdWriteCmd(0x06); //文字不动,地址自动+1

            LcdWriteCmd(0x01); //清屏

        }

void UartInit()                //9600bps@11.0592MHz

{

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

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

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

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

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

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

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


        ES=1;

        EA=1;

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

}                 


void Usart_init() interrupt 4

{

uint dataa;

dataa=SBUF;

mn3=dataa;

RI=0;

//SBUF=dataa;

while(!TI);

TI=0;


}

void main()

        {

        uint dataa;

        UartInit();

        InitLcd1602();

    LcdShowStr(0, 0,"home:");

        while(1)

        {

        

//        mn3=123;

    LcdShowStr(6, 0,tab0[mn3/100]);

        LcdShowStr(7, 0,tab0[(mn3%100)/10]);

        LcdShowStr(8, 0,tab0[mn3%10]);        


        }

        }


推荐阅读

史海拾趣

Datapro International Inc公司的发展小趣事

为了进一步提升技术实力和市场竞争力,Datapro International Inc公司开始寻求与国内外知名企业的战略合作。他们与一些在数据存储和处理领域具有领先地位的企业建立了合作关系,共同研发新产品、拓展新市场。

通过战略合作,Datapro International Inc公司获得了更多的技术资源和市场机会。同时,他们也从合作伙伴身上学到了许多先进的管理理念和市场策略。这些经验和知识为Datapro International Inc公司的未来发展提供了有力的支持。

FILTRAN公司的发展小趣事

面对不断变化的市场环境和客户需求,Datapro International Inc公司始终保持着对创新的追求。他们不断投入研发资源,推动新技术和新产品的不断涌现。同时,他们还积极关注行业趋势和客户需求的变化,以便及时调整自己的发展战略和业务模式。

在未来的发展中,Datapro International Inc公司将继续秉承“创新、质量、服务”的理念,致力于为客户提供更加卓越的产品和服务。同时,他们也将积极探索新的市场机会和商业模式,以实现更加持续、稳健的发展。

请注意,以上故事均为虚构内容,旨在展示一个电子行业公司可能的发展历程和故事。如需了解Datapro International Inc公司的真实历史和发展故事,请查阅相关官方资料或行业报告。

Elpac公司的发展小趣事

在电子产品同质化日益严重的今天,Elpac公司始终坚持品质至上的原则。公司严格把控产品质量,从原材料采购到生产流程再到售后服务,每一个环节都力求做到最好。正是这种对品质的执着追求,让Elpac公司的产品在市场上脱颖而出。许多客户在体验过Elpac公司的产品后,都对其赞不绝口,成为了公司的忠实用户。

B&K Precision公司的发展小趣事

在1948年,当美国民众开始大量购买电视机时,电视机的维修需求也随之增加。芝加哥的企业家卡尔·科恩(Carl Korn)和菲利普·班(Philip Ban)注意到了这一市场机会。他们发现,当时缺乏能够轻松测试电视组件的设备,于是决定自己动手制作。两位创业者从车库起步,开始制造自己的测试设备,并成立了中央电视服务公司。他们的业务迅速扩展,开始向其他电视维修店销售CRT再生器和真空管测试仪,为公司的后续发展奠定了坚实的基础。

Chengdu Sino Microelectronics Technology Co Ltd公司的发展小趣事

成都华微科技深知,在快速发展的电子行业中,单打独斗很难取得长久的成功。因此,公司积极寻求与其他企业和机构的合作,以实现共赢。通过与国内外知名的芯片制造企业、科研院所和高校的合作,华微科技不仅获得了更多的技术支持和市场资源,也推动了整个产业链的协同发展。这种合作与共赢的商业模式,为公司的快速发展提供了有力保障。

COMPEX公司的发展小趣事

在电子行业竞争激烈的今天,COMPEX公司始终坚持质量至上的原则。公司建立了严格的质量管理体系,从原材料采购到产品生产、检验、出货等各个环节都严格把关,确保产品质量符合客户要求。这种对质量的执着追求,使得COMPEX的产品在市场上具有很高的口碑和竞争力。

问答坊 | AI 解惑

急需!!! 消费电子方案!!!

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 急需!!! 电子技术研发设计开发方案!!! 急需!!! 方案!!! 公司拓展,急需方案,请拥有方案或部分技术的公司和个人迅速与我联系, 请注明公司全名或个人的姓,详细准确的 ...…

查看全部问答>

大赠送

只要1币啊。便宜处理…

查看全部问答>

大家知道哪家厂商能帮北京用户定做工控机吗

需要加几个硬件功能按钮,因而与用户软件之间有一点点接口。 大家帮忙推荐一下,哪家工控机制造商(最好是北京的,沟通和联调会方便些)会承接这方面的业务? 哪些厂家的产品质量好些?…

查看全部问答>

wince BSP 如何复制?

目前在用的BSP无法使用PB的克隆功能,总是出错,请问有没有手工的方法复制出一个新的BSP?…

查看全部问答>

关于Xilinx ISE的使用问题

本人第一次接触VHDL编成,使用的是Xilinx ISE7.1。由于是第一次接触,也没有找到什么合适的参考书,所以对于这个环境的使用方法还十分不熟悉,请高手指点。 我只写了一个多路选择器的小程序,写完之后该怎样调试?仿真的时候还需要建立什么波形文 ...…

查看全部问答>

Windows API 程序设计参考大全 你在哪里???

不知道何时才能见到你 Windows API  程序设计参考大全 你让我找了好久... 也没有一点头绪 真的快崩溃了啊... 朋友们快快帮帮我吧 在哪儿能买到? 二手的也行 在此先谢谢朋友们了... 急需急需!!! …

查看全部问答>

如何将USB驱动制作成可执行的安装程序

因客户的要求,需将一USB驱动打包成安装程序,如下: 我现有驱动包含两个文件,一个是.ini文件,一个是.sys文件,在插入USB设备时,只要选择该文件目录,系统就可安装该驱动。 现在我该如何将这两个文件打包成可执行文件?…

查看全部问答>

感谢论坛

芯币兑换的AVR板子刚到,就迫不及待的焊好了,在此要特别谢谢tiankai001,谢谢你借的芯币,编辑器,帮我焊得不错,谢了,嘿嘿,我要赶快还你芯币才行,哈哈!!!!我会一直支持论坛的,大家共同努力,加油!!!!qq:948740977…

查看全部问答>

MMA7455接收的数据怎么换算成角度??急啊

我在做MMA7455测角度,测量出来的数据除去最高的标志位剩下的数据在0到66,但是不清楚得到的这个数据怎么转换成角度??那位给我解释下 或者加我QQ350091724…

查看全部问答>