一个简单的单片机直流可调稳压电源设计
data >> result >> for(i=0xff;i> /********************************************** SCS=0; for (i=0;i<12;i++) SCS=1; if (SUB == 0) //SUB 按键的键盘处理函数 if (Pre_read == 0) //预读数据的 键盘处理函数 if (Store == 0) //保存数值 按键的键盘处理函数 /********************************************** P0=0xff; //与j对应,P2输出数码管的位选信号
函数名称:TLC5615_DA(uint da)
函数作用:TLC5615_DA 将da转换后模拟输出
函数参数:da
函数返回值:无
**********************************************/
void TLC5615_DA(uint da) // TLC5615 的DA 转换函数
{
uchar i;
da<=6;
SCLK=0;
{
SDATA=(bit)(da&0x8000);
SCLK=1;
da<=1;
SCLK=0;
}
SCLK=0;
for (i=0;i<12;i++);
}
/**********************************************
函数名称:key_scan()
函数作用:处理那些独立键盘
函数参数:无
函数返回值:无
**********************************************/
void key_scan()
{
if (ADD == 0) // ADD 按键的键盘处理函数
{
delay(10);
if (ADD == 0)
{
add_stat = 1;
num ++;
}
else
{
add_stat = 0;
num = 0;
}
//此处判断是不是长按,长按的话 使其步进值 加大
if (ADD == 0 && add_stat == 1 && num >= 300)
{
val += 5;
num = 0;
}
if (ADD == 1 && add_stat == 1)
{
val ++;
num = 0;
add_stat = 0;
}
if (val >= 1024)
{
val = 1023;
}
}
{
delay(10);
if (SUB == 0)
{
sub_stat = 1;
num ++;
}
if (SUB == 0 && sub_stat == 1 && num >= 300)
{
val -= 5;
num = 0;
}
if (SUB == 1 && sub_stat == 1)
{
val --;
num = 0;
sub_stat = 0;
}
if (val <= 0)
val = 0;
}
{
delay(100);
if (Pre_read == 0)
{
pre_flag = 1;
}
if (Pre_read == 1 &&pre_flag == 1 )
{
pre_flag = 0;
val = read_24C04(20); //从AT24C04中的地址20 中读出预存储的数据
}
}
{
delay(100);
if (Store == 0)
{
st_flag = 1;
}
if (Store == 1 && st_flag == 1)
{
st_flag = 0;
write_24C04(20,val); //向AT24C04中的地址20 写入存储的数据
}
}
}
/**********************************************
函数名称:timer0_init (void)
函数作用:初始化定时器0,并设置
函数参数:无
函数返回值:无
**********************************************/
void timer0_init (void) // timer0中断初始化函数
{
EA = 0;
TMOD = 0x01;
TR0 = 0;
TL0 = (65536-5000)%256; //设置计数器初值
TH0 = (65536-5000)/256;
PT0 = 1;
ET0 = 1;
EA = 1;
TR0 = 1;
}
/**********************************************
函数名称:main(void)
函数作用:main主函数入口
函数参数:无
函数返回值:无
**********************************************/
void main(void) //主程序
{
timer0_init(); //初始化定时器0
init_24C04(); //初始化AT24C04
while(1)
{
key_scan(); //调用键盘扫描函数
TLC5615_DA(val); //处理键盘发送过来的值
}
}
函数名称:timer0_isr(void) interrupt 1
函数作用:定时器0,方式1,的中断服务子程序
函数参数:无
函数返回值:无
**********************************************/
void timer0_isr(void) interrupt 1 // timer0中断服务函数
{
//数码管的位选变量
TR0 = 0; //停止计数
TL0 = (65536-5000)%256; //重新载入计数器初值
TH0 = (65536-5000)/256;
cp++; //位循环变量加1
if(cp >= 4)
cp = 0;
deal(TL549_AD()); //循环显示1次,j清零
TR0 = 1;
switch(cp)
{
case 0: P0 = LED[ge]; break;
case 1: P0 = LED[shi]; break;
case 2: P0 = LED[bai]&0x7f; break;
case 3: P0 = LED[qian]; break;
}
P2 = Bit_sel[cp];
}
单片机直流可调稳压电 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)