#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P1^0; //端口定义
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit rs=P1^4;
sbit en=P1^5;
sbit w1=P1^6;
sbit w2=P1^7;
sbit DAC_CS=P3^2;
sbit DAC_WR=P3^6;
uchar code table1[]=" Jinchaoqiang";
uchar code table2[]=" voltage:0.0V ";
uchar ge,shifen,keynum,volt;
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //写指令到1602
{
rs=0;
en=0;
P0=com;
delay(5);
w1=1;
en=1;
delay(5);
en=0;
}
void write_date(uchar date) //写数据到1602
{
rs=1;
en=0;
P0=date;
delay(5);
w1=1;
en=1;
delay(5);
en=0;
}
void Init() //初始化
{
uchar num;
en=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)
{
write_date(table1[num]);
delay(50);
}
write_com(0x80+0x40);
for(num=0;num<14;num++)
{
write_date(table2[num]);
delay(50);
}
}
void write_voltage(uchar add,uchar dat) //写电压到1602
{
write_com(0x80+0x40+add);
write_date(0x30+dat);
}
void da0832out(uchar dadata) //写电压数据到DAC0832
{
w1=0;
w2=1;
DAC_CS=0;
P0=dadata;
DAC_WR=0;
delay(5);
DAC_WR=1;
DAC_CS=1;
w2=0;
}
void keyscan() //键盘扫描
{
if(key1==0)
{
delay(5);
if(key1==0)
{
keynum++;
while(!key1);
if(keynum==1)
{
write_com(0x80+0x40+12);
write_com(0x0f);
}
}
if(keynum==2)
{
write_com(0x80+0x40+10);
write_com(0x0f);
}
if(keynum==3)
{
keynum=0;
write_com(0x0c);
}
}
if(keynum!=0)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
if(keynum==1)
{
shifen++;
if(shifen==10)shifen=0;
write_com(0x80+0x40+11);
write_com(0x0c);
write_voltage(12,shifen);
}
if(keynum==2)
{
ge++;
if(ge==10)ge=0;
write_com(0x80+0x40+9);
write_com(0x0c);
write_voltage(10,ge);
}
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
if(keynum==1)
{ shifen--;
if(shifen==-1)shifen=9;
write_com(0x80+0x40+11);
write_com(0x0c);
write_voltage(12,shifen);
}
if(keynum==2)
{
ge--;
if(ge==-1)ge=9;
write_com(0x80+0x40+9);
write_com(0x0c);
write_voltage(10,ge);
}
}
}
if(key4==0)
{
delay(5);
if(key4==0)
{
while(!key4);
volt=10*ge+shifen;
da0832out(volt);
}
}
}
}
void main() //主函数
{
w1=0;
w2=0;
Init();
ge=0;
shifen=0;
while(1)
{
keyscan();
}
while(1);
}
基于51单片机的数控电源
5星 · 超过95%的资源 需积分: 11 171 浏览量
2012-04-07
17:28:20
上传
评论 5
收藏 994KB RAR 举报
a598325223
- 粉丝: 1
- 资源: 21