#include

#define SC P0

void delay_ms(int n);

void AN();

void XSJ(unsigned char SJ);//写数据

void XZL(unsigned char ZL);//写指令

void CSH();//初始化

void SZZH();//转换

void TLC_5651(int buf);

unsigned int A_D();

sbit key1 = P2^3; //左1

sbit key2 = P2^4;

sbit key3 = P2^5;

sbit key4 = P2^6;

sbit RS = P2^0; //数据h/命令L

sbit RW = P2^1; //读H/写L

sbit E = P2^2; //使能

sbit CS_5615=P1^5; //定义片选信号IO口

sbit CLK_5615=P1^6; //定义时钟信号IO口

sbit DAT_5615=P1^7; //定义数据输入IO口

sbit CS=P1^4; //定义片选信号IO口

sbit CLK=P1^5; //定义时钟信号IO口

sbit DIO=P1^6; //定义数据输入IO口

unsigned int U = 0;//电压

unsigned int I = 0;//电流

char uu[3];

char ii[3];

int main()

{

CSH();

while(1)

{

AN();

SZZH();

XZL(0x82);

XSJ(uu[0]);

XZL(0x83);

XSJ(uu[1]);

XZL(0x84);

XSJ('.');

XZL(0x85);

XSJ(uu[2]);

XZL(0xc2);

XSJ(ii[0]);

XZL(0xc3);

XSJ(ii[1]);

XZL(0xc4);

XSJ('.');

XZL(0xc5);

XSJ(ii[2]);

TLC_5651(U);

if(U>999)

U=0;

I=A_D();

}

}

void CSH()//初始化

{

int wz =0x82,i;

XZL(0X38);

XZL(0X0F);

//XZL(0X06);

//XZL(0X80);

XZL(0x80);

XSJ('V');

XZL(0x81);

XSJ('=');

XZL(0x8f);

XSJ('V');

XZL(0xc0);

XSJ('I');

XZL(0xc1);

XSJ('=');

XZL(0xCf);

XSJ('A');

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

{

XZL(wz++);

XSJ(' ');

}

wz = 0xc2;

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

{

delay_ms(5);

XZL(wz++);

XSJ(' ');

}

}

void XZL(unsigned char ZL)//写指令

{

E=0;

RS=0;

RW=0;

SC = ZL;

E=1;

delay_ms(5);

E=0;

}

void XSJ(unsigned char SJ)//写数据

{

E=0;

RS=1;

RW=0;

SC = SJ;

E=1;

delay_ms(5);

E=0;

}

void AN() //按钮控制电压数

{

if(key1 == 0)

{

delay_ms(20);

if(key1 == 0)

U+=2;

}

if(key2 == 0)

{

delay_ms(20);

if(key2 == 0)

U-=2;

}

if(key3 == 0)

{

delay_ms(20);

if(key3 == 0)

U = 50;

}

if(key4 == 0)

{

delay_ms(20);

if(key4 == 0)

U = 0;

}

}

void delay_ms(int n) //阻塞延时

{

int i = 0,j = 0;

for(i = 0;i

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

}

void SZZH()//转换

{

uu[0] = 0x30+U/100;

uu[1] = 0x30+(U/10)%10;

uu[2] = 0x30+U%10;

ii[0] = 0x30+I/100;

ii[1] = 0x30+(I/10)%10;

ii[2] = 0x30+I%10;

}

void TLC_5651(int buf) //电压

{

int a,c; //定义变量

c=buf*2; //要输出的数据赋值

CS_5615=0; //引脚拉低

for(a=16;a>0;a--) //循环16次

{

DAT_5615=c>>15; //把数据串行输入进da芯片(把数据右移15位得到最高位数据,赋值给数据脚)

c=c<<1; //将数据左移一位,下次循环时就是传输第二位数据了

CLK_5615=1; //拉高

CLK_5615=0; //拉低

}

CLK_5615=1;

CLK_5615=0;

CLK_5615=1;

CLK_5615=0;

CS_5615=1;

}

unsigned int A_D()

{

unsigned char i,dat;

CS=1; //一个转换周期开始

CLK=0; //为第一个脉冲作准备

CS=0; //CS置0,片选有效

DIO=1; //DIO置1,规定的起始信号

CLK=1; //第一个脉冲

CLK=0; //第一个脉冲的下降沿,此前DIO必须是高电平

DIO=1; //DIO置1, 通道选择信号

CLK=1; //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0

CLK=0; //第二个脉冲下降沿

DIO=0; //DI置0,选择通道0

CLK=1; //第三个脉冲

CLK=0; //第三个脉冲下降沿

DIO=1; //第三个脉冲下沉之后,输入端DIO失去作用,应置1

CLK=1; //第四个脉冲

for(i=0;i<8;i++) //高位在前

{

CLK=1; //第四个脉冲

CLK=0;

dat<<=1; //将下面储存的低位数据向右移

dat|=(unsigned char)DIO; //将输出数据DIO通过或运算储存在dat最低位

}

CS=1; //片选无效

return dat-25; //将读出的数据返回

}

51单片机数控电源c语言设计,单片机数控电源设计,含源代码,原理图相关推荐

  1. 单片机电子密码锁C语言程序,单片机电子密码锁的设计(汇编语言).doc

    word格式整理版 文档可编辑 一.设计总说明 ? 随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别.IC卡辨认)已在国内外相继面世.但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保 ...

  2. 基于51单片机的霓虹灯c语言,基于单片机控制的霓虹灯控制器056

    基于单片机控制的霓虹灯控制器 摘要:本设计采用AT89S51单片机实现对霓虹灯的控制.系统由单片机控制部分和显示部分组成.显示部分的128个发光二极管成8行16列矩阵式分布.单片机I/O口输出的信号经 ...

  3. 自学python单片机编程-用Python语言控制单片机

    早年,虽然Python是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言.遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼.本文引用地址:ht ...

  4. 自学python单片机编程-用Python语言控制单片机-可编程逻辑-与非网

    早年,虽然 Python 是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言.遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼. 然而今时不同 ...

  5. 单片机发射红外c语言程序,单片机模拟红外发射源程序IR-send

    单片机模拟红外遥控器发射的C语言程序 //********************************************单片机红外发射**************************** ...

  6. 单片机最小系统c语言报告,单片机最小系统实验报告.doc

    长沙学院 电子工艺实习报告 姓名: 潘舟 学号: 2009044211 系别: 电子与通信工程 时间: 2011.11.14-2011.11.25 专业: 电子信息工程 指导老师:龙英.刘辉.王新辉. ...

  7. 大学生考勤系统C语言代码,C++学生考勤系统(含源代码)

    <C++学生考勤系统(含源代码)>由会员分享,可在线阅读,更多相关<C++学生考勤系统(含源代码)(26页珍藏版)>请在人人文库网上搜索. 1.C+吾言程序设计课程设计报告书题 ...

  8. 单片机节日彩灯c语言程序,单片机课程设计简易节日彩灯

    <单片机课程设计简易节日彩灯>由会员分享,可在线阅读,更多相关<单片机课程设计简易节日彩灯(7页珍藏版)>请在人人文库网上搜索. 1.单片机课程设计节日彩灯一. 需求分析:1. ...

  9. 基于单片机的血压计c语言,基于单片机血压计的设计

    基于血压计的设计(18000字) 摘 要 本设计制作了一台智能血压计.该血压计采用了STC12C5A60S2作为主控制器,利用专用的血压传感器作为数据采集,通过三运放仪用放大电路将信号放大,整形,将模 ...

  10. 单片机编码电位器c语言,基于单片机的数字电位器的设计

    分辨率扩展 Ra和Rb同时并联在输入信号Vin的两端,其抽头数均为32.Ra和Rb的输出作Rc端口电压VH和VL设置,Ra始终比Rb高一个位置间隔,这样就可以将1/32Vi-31/32Vi共31种输入 ...

最新文章

  1. discard connection丢失数据_python kafka 生产者发送数据的三种方式
  2. StringBuffer类的常用方法
  3. lisp删除块中图元_DeleteBlocks
  4. c++餐饮管理系统_扎哈·哈迪德建筑事务所赢得深圳湾超级总部基地C塔项目国际竞赛...
  5. Android学习笔记(18):编辑框EditText
  6. 浏览器插件 - Chrome 对 UserScript 的声明头(metadata)兼容性一览
  7. linux dd winpe,winpe/linux多重启动
  8. 微型计算机的硬件系统主要核心软件,计算机硬件系统最核心的是什么
  9. Kafka高频面试题:夺命10连问
  10. GPIO 使用 — Rockchip
  11. 不努力做事,隔壁老王 可想而知您将来必然是艰难的
  12. 【105】百度脑图-在线思维导图工具
  13. 微信机器人服务器成本,微信机器人案例汇总
  14. 2019年2月1日训练日记
  15. 计算机无法启动 一直在启动修复需要多久,关于电脑总是卡机蓝屏启动修复~...
  16. 基于kotlin实现的简单个人账户管理APP
  17. 贴片式T卡的测试与应用
  18. 贴片式T卡可以解决传统T卡的那些问题?
  19. 端到端的神经网络(end-to-end)
  20. 一些中文自然语言处理工具包

热门文章

  1. 20个使用 Java CompletableFuture的示例,不服不行
  2. 看看华为 Java 编程的军规...
  3. 杭州29岁IT男凌晨突发脑出血!老父亲面对医生急的差点跪下
  4. JAVA面试之互联网、经验篇
  5. Android 热补丁之 Tinker 原理解析
  6. shell基础之变量及表达式
  7. @link标签 实现注释里面的类跳转
  8. 转载:HTML5及移动端BUG
  9. 提权获取进程路径并获取进程列表
  10. 【BZOJ 2306】 2306: [Ctsc2011]幸福路径 (倍增floyd)