#include <STC12C5A60S2.H>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER 0x80 //ADC 电源控制位 10000000 0X80 /
#define ADC_FLAG 0x10 //ADC 完成标志 00010000 0x10
#define ADC_START 0x08 //ADC 启动ADC开关 00001000 0x08 /
#define ADC_SPEEDLL 0x00 //420 转换速度 00000000 0x00 /
#define ADC_SPEEDL 0x20 //280 转换速度 00100000 0x20
#define ADC_SPEEDH 0x40 //140 转换速度 01000000 0x40
#define ADC_SPEEDHH 0x60 //70 转换速度 01100000 0x60
/*----------------------------------------------------------------------------------------------
meidangzuidivoltage:表示AD最高电压5V对应10bit_AD转换的最小电压是多少 5/1024= 0.00488V 也就是AD在
//10bit下测量的最小电压,
//那么在计算AD电压值的时候将公式 “GetADCResult(ch)*5/1024”分两步进行 方便后面对数据分离显示到
//1602上面 先计算ADC_jiancedaozuidivoltage=5*10000000/1024 先将这个数放大100万倍
//最后在算AD_jie_guo=(ADC_jiancedaozuidivoltage*GetADCResult(ch);
----------------------------------------------------------------------------------------------*/
ulong ADC_jiancedaozuidivoltage,temp,AD_jie_guo; //长整形数据 16bit
float OVP; //定义一个浮点数 以保留小数点 提高进度
uint num,i,vlue;//ADC_mV,ADC_RESX,VCC_V=5.2;
sbit lcden = P2^7;
sbit rs = P2^6;
sbit rw = P2^5;
sbit LED = P3^0;
void Delay(uint n); //延时函数
uint GetADCResult(uchar ch); // ad转换函数
void InitADC(); //ad初始化函数
void OCP_1(); //过压 欠压 提醒函数声明
float count(uchar ch); //AD值100次平均值函数
//ulong count(uchar ch); //ad计算函数测量0-5V时候用的
uchar code table[20]= {" Shu Kong QuDong"}; // 开机画面的布置
uchar code table2[20]={" CQDZ Alan V1.01"};
/*-----------------
延时函数
-----------------*/
void delayms(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for (j=960;j>0;j--);
}
/*--------------------
写命令
---------------------*/
void lcd_write_com(uchar com)
{
rw=0;
rs=0; //写命令状态
P0=com;
lcden=1;
delayms(5);
lcden=0;
}
/**-----------------
写数据
--------------- ***/
void write_date_(uchar date)
{
rw=0; //写数据
rs=1; //写数据状态
P0=date;
delayms(5);
lcden=1; //使能
delayms(5);
lcden=0;
}
/*---------------
初始化显示屏
---------------*/
void lcd_init(void)
{
lcden=0;
lcd_write_com(0x38); //设置8位格式,2行,5*7
lcd_write_com(0x0c); //整体显示,关光标,不显示
lcd_write_com(0x06); // 设定输入方式,增量不移位
lcd_write_com(0x01);//清屏幕
delayms(5); //延?
}
/*-----------------------
函数名称 格式定义
函数的介绍 在某个屏幕位置上显示一个字符,X(0-16),y(1-2)
X:表示字的格式 一共16个 Y:表示行 一共2行
-------------------------*/
//格式定义
void lcd_disp_char(uchar y,uchar x, uint dat)
{
uint address;
if(y==1) //y为1 在第一行
address=0x80+0x10+4+x; //整屏左移动以后 从新定义新的起始位置 但是要加上之前移动后的地址
else
address=0xc0+0x10+x; //y为2 在第二行 X显示字的位置 0XC0是 0x80+0x40的结果
lcd_write_com(address); //写入要写的位置
write_date_( dat); //写入你要写的数据
}
/*------------------
显示函数2
-------------------*/
void disp()
{
AD_jie_guo = count(0); //经过上面的计算求出来100次的平均值存放在AD_jie_guo里面
/*-------------------------------------------------------------------------------
//扩大电压 我的量程是0-30V 分压电阻是 10k 2k 电阻比的6 反推 当测试电压为5v
//的时候 最高电压为30V 测量后调试OK 因电阻误差 调整了数据为6.02
//同时这里也可以用(temp/0.167)/100 这个是电压比也就是30V分压为5V
//然后5/30=0.167的结果也是一样的
---------------------------------------------------------------------------------*/
temp=((ADC_jiancedaozuidivoltage*AD_jie_guo)*6.02)/100;
// temp=(temp*6.02)/100; //备用算法 这样太占用位置 我把这步合并到上面了
//0x30是显示数字 0-9 30表示第一个数0
lcd_disp_char(1,0, temp%10000000/1000000+0x30 ); //十位
lcd_disp_char(1,1, temp%1000000/100000+0x30); //个位
lcd_disp_char(1,2,'.' ); // 小数点
lcd_disp_char(1,3, temp%100000/10000+0x30 ); //个分位
lcd_disp_char(1,4, temp%10000/10000+0x30 ); //百分位
lcd_disp_char(1,5,'V' );
}
//count(0)
/*-----------------------------------
名称 开机画面
功能 开机的时候显示一下铭牌
for来完成 屏幕左移动
----------------------------------*/
void init()
{
// lcd_write_com(0x80+0x10); //定义显示的位置 起始地址
lcd_write_com(0x80); //定义显示的位置 起始地址
for(num=0;num<20;num++)
{
write_date_(table[num]); //初始化屏幕的初始数字“0000”
delayms(5);
}
// lcd_write_com(0x80+0x40+0x10); //定义第二排,显示的地址 0x80是显示屏寄存器第一排起始地址
lcd_write_com(0xc0); //定义显示的位置 起始地址
for(num=0;num<20;num++) //0x40是第二排起始地址
{
write_date_(table2[num]);
delayms(5);
}
for(num=0;num<20;num++) //整屏左移动 这里的21就是指可以移动多少格
{ //可以是100可以是1000 相当于是电子屏幕一样
上一篇:蓝牙定时开关APP软件(附51单片机参考程序)
下一篇:LED8x8点阵显示屏设计报告+PCB原理图与单片机程序
推荐阅读
史海拾趣
东科半导体(DK)公司自创立之初,就专注于电源管理芯片的研发与生产。公司初期面临资金紧张、技术储备不足等挑战,但凭借对技术的执着追求和对市场的敏锐洞察,东科逐步在行业中崭露头角。公司创始人带领团队夜以继日地研发,成功推出了一系列具有竞争力的电源管理芯片产品,赢得了市场的认可。
在微电子器件领域,Chip Supply Micro Devices凭借一项创新技术,成功打破了市场格局。公司研发出了一种新型低功耗芯片,不仅提高了电子设备的性能,还降低了能源消耗。这一技术突破使得Chip Supply Micro Devices迅速获得了市场的认可,产品销量激增。公司借此机会扩大生产规模,加大研发投入,进一步巩固了其在微电子器件市场的地位。
ARCOTRONICS公司一直将产品质量视为企业的生命线。公司建立了严格的质量管理体系,从原材料采购到生产过程的每一个环节都进行严格把控。同时,公司还注重售后服务,为客户提供及时、专业的技术支持和解决方案。这些举措使ARCOTRONICS公司的产品赢得了客户的广泛信赖和好评。
随着市场竞争的加剧,思博科技意识到只有不断创新才能在市场中立足。于是,公司加大了研发投入,不断推出具有创新性的产品。其中,一款名为“MaxPower”的高效能电源芯片在市场上引起了广泛关注。这款芯片不仅性能卓越,而且具有极高的能效比,为客户节省了大量能源成本。这一创新产品的成功推出,使思博科技在行业中树立了良好的口碑。
随着全球电子科技行业的快速发展,Aptos也开始积极布局全球市场。公司在多个国家和地区设立了分支机构或研发中心,以更好地服务全球客户。同时,Aptos还加大了对新兴技术的研发投入,积极探索未来可能的发展机遇。展望未来,Aptos将继续致力于技术创新和市场拓展,努力成为全球电子科技行业的领军企业。
请注意,这些故事是基于一般性的行业趋势和公司可能的发展路径构建的,并非Aptos Technology公司的实际发展历程。如需了解该公司更具体的发展故事,建议查阅相关新闻报道或公司官方资料。
随着产品线的不断丰富,AMP开始积极寻求市场拓展的机会。公司通过与国内外知名企业的战略合作,成功将产品打入更广阔的市场。同时,AMP还积极参加各类行业展会和论坛,与业界同仁交流学习,不断提升自身的市场竞争力。
3 A/D转换寄存器 这里摘录一段笔者从网上下载的用PIC16F877单片机芯片(带Flash存储器的)完成有关A/D转换的源程序部分指令,并用它说明有关A/D转换寄存器在指令中的用法。这里先引用部分源程序,源程序中的注释是笔者按照指令在程序中的作用所加 ...… 查看全部问答∨ |
|
联华众科CPLD开发板 CA127 北京联华众科科技有限公司 http://www.lianhua-zhongke.com.cn Abstract 摘 要:联华众科CPLD开发板CA127核心器件为 Altera MAX II系列的EPM1270,CA127具有丰富的板载资源,由于板载有51 ...… 查看全部问答∨ |
|
MSP430F5529 USB实验板TI官网资料https://bbs.eeworld.com.cn/thread-366160-1-1.html SEED-EXP430F5529 USB实验板 及相关资料(2楼还有)https://bbs.eeworld.com.cn/thread-366435-1-1.html… 查看全部问答∨ |
上面的是发送程序,下面的是接收协议; 通过示波器得到的波形如下,为什么收不到数据?貌似关键在 I2CReadInit(); UCB0CTL1 |= UCTXSTT;这两句,但是应该没错啊,为什么读不出来数据呢… 查看全部问答∨ |