用5110显示的数控稳压电源.docx
- 文档编号:5695090
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:14
- 大小:19.12KB
用5110显示的数控稳压电源.docx
《用5110显示的数控稳压电源.docx》由会员分享,可在线阅读,更多相关《用5110显示的数控稳压电源.docx(14页珍藏版)》请在冰豆网上搜索。
用5110显示的数控稳压电源
#include
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
#include"5616.c"
#include"549.c"
#include"key.c"
#include"5110.c"
uintj;
uintmoni,dat1=512,caiji=0;//dat1为发送的电压值,moni为设定值*******************************************************
uintmoni1,caiji1;
//********************timer0中断服务函数
voidtimer0_isr(void)interrupt1
{
TL0=(65536-3000)%256;
TH0=(65536-3000)/256;
key();
moni=da_dat*0.463;//设定值
caiji=tlc549_ad();//采集值
if(moni>(caiji+1))
{
dat1=dat1+1;
if(dat1>=1023)
dat1=1023;
}
if(moni<(caiji-1))
{
dat1=dat1-1;
if(dat1<=0)
dat1=0;
}
tlc5615(dat1);
}
//*********************timer0中断初始化函数
voidtimer0_init(void)
{
TMOD=0x01;
TL0=(65536-3000)%256;
TH0=(65536-3000)/256;
ET0=1;
EA=1;
TR0=1;
}
//******************主函数
voidmain(void)
{
uchark;
timer0_init();
res=0;
for(k=0;k<250;k++);
res=1;
LCD_init();
LCD_clear();
write_hanzi_12_16(0,4,6,DA);
delayms(1000);
LCD_write_hanzi_12_16(0,0,DA[6]);
LCD_write_hanzi_12_16(1,0,DA[7]);
LCD_write_hanzi_12_16(2,0,DA[8]);
LCD_write_shu(6,0,zifu[12]);
LCD_write_hanzi_12_16(0,2,DA[9]);
LCD_write_hanzi_12_16(1,2,DA[10]);
LCD_write_hanzi_12_16(2,2,DA[11]);
LCD_write_shu(6,2,zifu[12]);
while
(1)
{
caiji1=caiji+2;
moni1=moni+2;
LCD_write_shu(7,0,zifu[caiji1/100]);
LCD_write_shu(8,0,zifu[10]);
LCD_write_shu(9,0,zifu[caiji1/10%10]);
LCD_write_shu(10,0,zifu[caiji1%10]);
LCD_write_shu(11,0,zifu[11]);
LCD_write_shu(7,2,zifu[moni1/100]);
LCD_write_shu(8,2,zifu[10]);
LCD_write_shu(9,2,zifu[moni1/10%10]);
LCD_write_shu(10,2,zifu[moni1%10]);
LCD_write_shu(11,2,zifu[11]);
}
}
//****************************一下为按键检测程序
//******************************按键端口定义
uintup_cu_state,down_cu_state,up_xi_state,down_xi_state;//按键按下状态
intda_dat=512;//按键设定电压值
sbitup_cu=P3^6;
sbitdown_cu=P3^7;
sbitup_xi=P3^4;
sbitdown_xi=P3^5;
//******************延时函数
voiddelay(uintx)
{
uinti,j;
for(i=0;i<=x;i++)
for(j=0;j<=110;j++);
}
//**************按键检测及动作函数
voidkey(void)
{
if(up_xi==0)//细调加
{
up_xi=1;
delay(5);
if(up_xi==0)
up_xi_state=1;
}
if(up_xi==1&&up_xi_state==1)
{
up_xi_state=0;
da_dat=da_dat+4;
if(da_dat>=1024)
da_dat=1024;
}
if(down_xi==0)//细调减
{
down_xi=1;
delay(5);
if(down_xi==0)
down_xi_state=1;
}
if(down_xi==1&&down_xi_state==1)
{
down_xi_state=0;
da_dat=da_dat-4;
if(da_dat<=216)
da_dat=216;
}
if(up_cu==0)//粗调加
{
up_cu=1;
delay(5);
if(up_cu==0)
up_cu_state=1;
}
if(up_cu==1&&up_cu_state==1)
{
up_cu_state=0;
da_dat=da_dat+64;
if(da_dat>=1024)
da_dat=1024;
}
if(down_cu==0)//粗调减
{
down_cu=1;
delay(5);
if(down_cu==0)
down_cu_state=1;
}
if(down_cu==1&&down_cu_state==1)
{
down_cu_state=0;
da_dat=da_dat-64;
if(da_dat<=216)
da_dat=216;
}
}
//**********************以下为tlc549模块
sbitsd=P1^1;//数据线
sbitcs1=P1^2;//片选
sbitsclk=P1^0;//时钟
//*******************读取TLC549转换后的数据、
uinttlc549_ad()
{
uchari;
uintdata_ad=0;
cs1=1;//初始化,启动
sclk=0;
cs1=0;
_nop_();
for(i=0;i<8;i++)//读取采集数据,读取的是上一次采集数据
{
data_ad=data_ad<<1;
sclk=1;
if(sd)data_ad|=0x01;
sclk=0;
}
cs1=1;
sclk=1;
data_ad=data_ad*1.946*2;
return(data_ad);//用char型接收数据也可以,但变为整数后要赋给int型变量,否则溢出
}
//************一下为tlc5615模块
//****************DA5615端口定义
sbitdin=P1^6;
sbitscl=P1^5;
sbitcs=P1^4;
//********************DA5615处理函数
voidtlc5615(uintdat)//由于TLC5615是十位转换,所以在这里要定义一个两字节的变量
{
uchari;
dat=dat<<6;//两个字节有十六位,去掉高六位剩下十位有效位
scl=0;
cs=0;//初始化
for(i=0;i<12;i++)//根据PDF文档可知,要送的只有十位数但是后面要跟着多加两位零才能将一个数据送出去
{
din=(bit)(dat&0x8000);//当dat与0x8000相与然后强制转换后有一位,这时只就只可以直接送给DA端进行发送
scl=1;//前面一句亦可用DA=CY来代替,但后面的顺序要调换才行
dat<<=1;
scl=0;
}
cs=1;
scl=0;
}
//***********一下为5110模块
/*****************5110是一个48行*84的点阵*******************************/
/************12列*16的汉字只能显示3行(48/16=3)**************************/
/*************12*12的汉字可以显示4行(48/12=4)*****************/
/**********将图片取模可以显示出图片*****************************/
//LCD_write_byte(0x09,0);//黑屏命令LCD_write_byte(0x0D,0);//反映射输出(反白显示命令)
#include
sbitres=P0^0;//复位,0复位
sbitsce=P0^1;//片选端,低电平有效
sbitdc=P0^2;//数据命令选择端,1写数据,0写指令
sbitsdin=P2^0;//数据
sbitclk=P2^1;//时钟
ucharl;
//***************************取模汉字是12列*16的汉字********************************/
ucharcodeDA[12][24]={
{0x00,0x84,0x68,0xFC,0x24,0xE4,0x60,0x9C,0x20,0xE0,0x10,0x00,0x00,0x00,0x4C,0x33,0x1C,0xA7,0x40,0x27,0x1C,0x23,0x40,0x00},//数
{0x00,0x10,0xFE,0x90,0xA0,0x98,0x70,0x0C,0x10,0x70,0x98,0x00,0x00,0x42,0x7F,0x00,0x41,0x40,0x44,0x3C,0x44,0x42,0x41,0x00},//控
{0x00,0x20,0xFC,0xA4,0x22,0x30,0xAC,0xAA,0xB8,0xA4,0xE0,0x00,0x00,0x06,0x3F,0x00,0x33,0x32,0x4A,0x46,0x62,0x4A,0x13,0x00},//稳
{0x00,0x00,0xFC,0x04,0x04,0x0C,0xF4,0x04,0x04,0x84,0x04,0x00,0x00,0x38,0x47,0x41,0x41,0x41,0x3F,0x41,0x45,0x4C,0x20,0x00},//压
{0x00,0x00,0xF0,0x90,0x90,0xFE,0x90,0x90,0x90,0xF0,0x00,0x00,0x00,0x00,0x0F,0x08,0x08,0x7F,0x48,0x48,0x48,0x47,0x78,0x00},//电
{0x20,0xC0,0xCC,0x20,0xFC,0x04,0xE4,0x94,0xAC,0xE4,0x04,0x00,0x00,0x7C,0x43,0x38,0x27,0x10,0x0B,0x42,0x7E,0x0B,0x30,0x00},//源
{0x00,0x30,0x90,0x10,0x50,0x0A,0xF4,0x10,0x10,0x30,0x18,0x00,0x00,0x84,0x84,0x47,0x24,0x14,0x0F,0x14,0x24,0x64,0x04,0x00},//实
{0x00,0xFC,0x64,0x9C,0x04,0x44,0x44,0xC4,0x44,0x44,0x44,0x00,0x00,0x7F,0x08,0x0F,0x18,0x06,0x42,0x7F,0x00,0x06,0x18,0x00},//际
{0x00,0x80,0xF8,0x06,0x08,0xC8,0x3C,0x48,0x48,0xE8,0x08,0x00,0x01,0x00,0xFF,0x80,0x80,0x7F,0x95,0x95,0x95,0x7F,0x40,0x00},//值
{0x00,0x40,0xC4,0xC0,0x40,0x3C,0x04,0x04,0x3E,0xA0,0x20,0x00,0x00,0x00,0x0F,0x90,0x88,0x41,0x2F,0x19,0x27,0x41,0x40,0x00},//设
{0x00,0x40,0x5C,0x54,0x4C,0xF4,0x4C,0x54,0xD4,0x5C,0x20,0x00,0x00,0x00,0x40,0x7F,0x6B,0x6A,0x6B,0x6B,0x7F,0x40,0x40,0x00},//置
{0x00,0x80,0xF8,0x06,0x08,0xC8,0x3C,0x48,0x48,0xE8,0x08,0x00,0x01,0x00,0xFF,0x80,0x80,0x7F,0x95,0x95,0x95,0x7F,0x40,0x00}//值
};
//**************************取模字符6列*16的字符
ucharcodezifu[13][12]={
{0xF0,0x08,0x08,0x18,0xE0,0x00,0x1F,0x20,0x20,0x30,0x0F,0x00},//0
{0x00,0x10,0xF8,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00},//1
{0x70,0x08,0x08,0x08,0xF0,0x00,0x30,0x2C,0x22,0x21,0x30,0x00},//2
{0x30,0x08,0x88,0x88,0x70,0x00,0x18,0x20,0x20,0x31,0x1E,0x00},//3
{0x00,0x80,0x60,0xF0,0x00,0x00,0x06,0x05,0x24,0x3F,0x24,0x04},//4
{0xF8,0x08,0x88,0x88,0x08,0x00,0x19,0x21,0x20,0x31,0x1F,0x00},//5
{0xE0,0x18,0x88,0x98,0x00,0x00,0x0F,0x31,0x20,0x20,0x1F,0x00},//6
{0x38,0x08,0x08,0xE8,0x18,0x00,0x00,0x00,0x3F,0x00,0x00,0x00},//7
{0x70,0x88,0x08,0x88,0x70,0x00,0x1E,0x21,0x21,0x21,0x1E,0x00},//8
{0xF0,0x08,0x08,0x18,0xE0,0x00,0x01,0x32,0x22,0x31,0x0F,0x00},//9
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00},//"."
{0x08,0xF8,0x00,0x80,0xF8,0x08,0x00,0x03,0x3C,0x0F,0x00,0x00},//V
{0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00}//":
"
};
//*******************1ms延时函数
voiddelayms(uintii)
{
uinti,x;
for(x=0;x { for(i=0;i<200;i++); } } /*-------------------------------------------- *************液晶写命令和写数据函数*********** com0dat1: 写数据/命令选择;0是命令1是数据 编写日期: 20080918 ----------------------------------------------*/ voidLCD_write_byte(uchardt,ucharcom0dat1) { uchari; sce=0;//片选,低电平有效 dc=com0dat1;//DC为低表示输入命令,为高表示输入数据 for(i=0;i<8;i++) { clk=0;//sdin在时钟正边沿取样 sdin=(bit)(dt&0x80);//先送入字节高位 clk=1; dt=_crol_(dt,1);//dt左移一位 } dc=1; sce=1;//片选,低电平有效 sdin=1; } /*--------------------------------------- LCD_init: 3310LCD初始化 -----------------------------------------*/ voidLCD_init(void) { res=0;//复位脉冲复位寄存器,因为接电源后内部寄存器和RAM的值不确定 delayms(10);//最多是100ms res=1; LCD_write_byte(0x21,0);//初始化Lcd,功能设定使用扩充指令 LCD_write_byte(0xd0,0);//设定液晶偏置电压 LCD_write_byte(0x20,0);//使用基本指令 LCD_write_byte(0x0C,0);//设定显示模式,正常显示 //LCD_write_byte(0x08,0);//设定显示为空白显示屏蔽为白屏 //LCD_write_byte(0x09,0);//设定显示为全部显示屏幕为黑屏 //LCD_write_byte(0x0d,0);//设定显示是反映射的底部是黑的字是白的 //LCD_write_byte(0x0C,0);//设定显示是正常模式,底部是白的字是黑的 } /*------------------------------------------- LCD_set_XY: 设置LCD坐标函数 输入参数: X: 0-83Y: 0-5 ---------------------------------------------*/ voidLCD_set_XY(ucharX,ucharY)//X为列Y为行 { LCD_write_byte(0x40|Y,0);//0x40|Y是由于设置行的命令中有0x40,而行取值为0-5,不会出现0x40,所以要|上 LCD_write_byte(0x80|X,0);//0x80|X是由于设置列的命令中有0x80,而列取值为0-83,不会出现0x80,所以要|上 } /*------------------------------------------ LCD_clear: LCD清屏函数 --------------------------------------------*/ voidLCD_clear(void) { uchart; uchark; LCD_set_XY(0,0); for(t=0;t<6;t++)//因液晶可自动向前推进,所以写 {//一次地址即可 for(k=0;k<84;k++) { LCD_write_byte(0x00,1); } } } /*--------------------------------------------------------------------------------------------------------------------- LCD_write_shu: 显示6(宽)*16(高)点阵数字、字母函数 输入参数: c: 显示的字符; -----------------------------------------------------------------------------------------------------------------------*/ voidLCD_write_shu(ucharx,uchary,ucharc[])//x: 列上第几个字y: 行 { uchari; LCD_set_XY(x*6,y);//列上第几个字符,行 for(i=0;i<6;i++)//写入字符上半部分 { LCD_write_byte(c[i],1); } LCD_set_XY(x*6,y+1); for(i=6;i<12;i++)//写入字符下半部分 { LCD_write_byte(c[i],1); } } /*--------------------------------------------------------------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 5110 显示 数控 稳压电源