#include <stdio.h>
#include <math.h>
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void initasPC();
uchar inport(unsigned int adr);
void outport(unsigned int adr, unsigned char b);
void Delayms(unsigned int ms);
sbit Key1=P3^2;
sbit Key2=P3^3;
sbit E=P3^4; //1602使能引脚
sbit RW=P3^5; //1602读写引脚
sbit RS=P3^0;
uint volt=86;
unsigned long value;
uint a,b,c;
void DA1210(int da) //输出数字量
{
outport(0x0000, da);
// outport(0x0000, da<<4);
}
void Scankey() //按键扫描
{
if(Key1==0)
{
Delayms(20);
if(Key1==0)
{
while(Key1==0);
volt=volt+3;
while(volt>256)
volt=256;
}
}
if(Key2==0)
{
Delayms(20);
if(Key2==0)
{
while(Key2==0);
volt=volt-3;
while(volt<86)
volt=86;
}
}
}
/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间大概为5US。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
/********************************************************************
* 名称 : bit Busy(void)
* 功能 : 这个是一个读状态函数,读出函数是否处在忙状态
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
bit Busy(void)
{
bit busy_flag = 0;
RS = 0;
RW = 1;
E = 1;
delay();
busy_flag = (bit)(P0 & 0x80);
E = 0;
return busy_flag;
}
/********************************************************************
* 名称 : wcmd(uchar del)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void wcmd(uchar del)
{
while(Busy());
RS = 0;
RW = 0;
E = 0;
delay();
P1 = del;
delay();
E = 1;
delay();
E = 0;
}
/********************************************************************
* 名称 : wdata(uchar del)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/
void wdata(uchar del)
{
while(Busy());
RS = 1;
RW = 0;
E = 0;
delay();
P1 = del;
delay();
E = 1;
delay();
E = 0;
}
/********************************************************************
* 名称 : L1602_init()
* 功能 : 1602初始化,请参考1602的资料
* 输入 : 无
* 输出 : 无
***********************************************************************/
void L1602_init(void)
{
wcmd(0x38);
Delayms(5);
wcmd(0x38);
Delayms(5);
wcmd(0x38);
Delayms(5);
wcmd(0x38);
wcmd(0x08);
wcmd(0x0c);
wcmd(0x04);
wcmd(0x01);
}
/********************************************************************
* 名称 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
L1602_char(1,5,'b')
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
wcmd(a);
wdata(sign);
}
/********************************************************************
* 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
L1602_string(1,5,"ab cd ef;")
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_string(uchar hang,uchar lie,uchar *p)
{
uchar a,b=0;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
while(1)
{
wcmd(a++);
if((*p == '\0')||(b==16)) break;
b++;
wdata(*p);
p++;
}
}
void main()
{
initasPC();
Delayms(200);
L1602_init();
//printf("Hello World\n");
while(1)
{
//DA1210(volt); //调用输出数字量 子程序
P0=volt;
Scankey(); //按键扫描
value=100*(long)volt*9.0/256;//电压值*100
// printf("value=%d\n",(int)value);
a=(value/100)%10+48; //baiwei
b=(value/10)%10+48; //shiwei
c=value%10+48; //gewei
L1602_string(1,1,"volt:"); //在1602中显示volt:
L1602_char(1,8,a); //显示百位
L1602_char(1,9,46); //显示小数点
L1602_char(1,10,b); //显示十位
L1602_char(1,11,c); //显示个位
L1602_char(1,12,118); //显示V
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Programmable-voltage-source.zip_稳压源 仿真
共39个文件
bak:10个
dbk:3个
uvproj:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 29 浏览量
2022-09-21
19:28:00
上传
评论
收藏 173KB ZIP 举报
温馨提示
基于51单片机的可编程稳压源,C程序以及软仿真,1602液晶显示。
资源详情
资源评论
资源推荐
收起资源包目录
Programmable-voltage-source.zip (39个子文件)
Programmable voltage source
程序
123
xw.LST 2KB
123_uvopt.bak 61KB
xw.OBJ 3KB
lesson_Opt.Bak 996B
Last Loaded 123.DBK 105KB
123.lnp 49B
lesson.uvproj 13KB
123.uvproj 13KB
123.Uv2.bak 2KB
lesson_Uv2.Bak 2KB
ISIS.dmp 33KB
123.c 4KB
lesson.lnp 41B
123 14KB
123_Opt.Bak 1KB
lesson.opt.bak 1KB
123_uvproj.bak 13KB
xw.c 415B
123.LST 9KB
123.PWI 869B
123.M51 16KB
123_Uv2.Bak 2KB
123.plg 2KB
123.uvopt 61KB
123.opt.bak 1KB
lesson.plg 2KB
123.DSN 108KB
123.OBJ 11KB
lesson.M51 11KB
123.hex 5KB
lesson.Uv2.bak 2KB
lesson 8KB
lesson.hex 10KB
lesson.uvopt 55KB
123.uvgui.Administrator 135KB
simulation
Last Loaded 123.DBK 112KB
Last Loaded 001.DBK 3KB
123.PWI 951B
123.DSN 123KB
共 39 条
- 1
JaniceLu
- 粉丝: 85
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0