个人还是比较喜欢有个电源指示灯,所以另外加了个“小红”
【单片机开源学习】跟着乐老师学习数控电源
全部回复(62)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
最近比较忙今天晚上才把板子焊完,不过功率板还没上电,只有一路电源过几天得去买个变压器。有谁买到了吗?给个淘宝链接,我不知道要买哪种
下载程序的时候要装一下驱动谁要我贴上来方便下载CH340IR.rar
下载软件用新版本的会自动读取COM口stc-isp-15xx-v6.70.rar
程序可以下载了,接下来就可以自己调程序啦。先睡觉,改天了。
0
回复
提示
@又一个暑假
[图片]乐老师的这个毫秒延时函数误差有点大吧,有人去算过吗
可参考
/******************************************************************
- 功能描述:1MS延时子程序 带(16位)参数
- 隶属模块:
- 参数说明:无
- 返回说明:无
- 注: 此处MAIN_Fosc=22.1184 MHz
******************************************************************/
void Delay_ms(uint x_ms)
{
unsigned int i;
do
{
i = MAIN_Fosc / 13000;
while(--i) ; //14T
}while(--x_ms);
}
0
回复
提示
@又一个暑假
按键部分参照吴坚鸿的思想[图片]源代码见3楼
还有一个按键的写法更酷,我用Proteus仿真了一下 ,不妨大家也可以看看这样的按键写法,不过核心算法我是原创的,我相信也很多人看过,没看过的朋友仔细看看,会有收获的。
源代码如下:
/******************************************************************
- 功能描述:主要是想测试按键的算法 按键按下对应的LED灯翻转
又一个暑假 2015.02.12
******************************************************************/
#include "REG52.H"
#define PINB P1
sbit LED0 = P2^0;
sbit LED1 = P2^1;
sbit LED2 = P2^2;
sbit LED3 = P2^3;
volatile unsigned char Key_Value;
volatile unsigned char Key_Trg;
volatile unsigned char Key_Cont;
volatile unsigned char Key_Release;
void Key_Scan(void) ; //按键扫描函数
void Key_Service(void); //按键服务函数
void KeyRead( void ); //按键核心算法
/******************************************************************
- 功能描述:中断服务函数
- 参数说明:无
- 返回说明:无
- 注:
******************************************************************/
void T0_time(void) interrupt 1
{
TF0=0; //清除中断标志
TR0=0; //关中断
Key_Scan();
TH0=(65535-20000)/255; //重装初始值
TL0=(65535-20000)%255;
TR0=1; //开中断
}
/******************************************************************
- 功能描述:单片机初始化
- 参数说明:无
- 返回说明:无
- 注:
******************************************************************/
void Init_Mcu(void) //初始化单片机
{
TMOD=0x01; //设置定时器0为工作方式1
TH0=0xff; //重装初始值(65535-2000)=63535=0xf82f
TL0=0xf0;
EA=1; //开总中断
ET0=1; //允许定时中断
TR0=1; //启动定时中断
}
/******************************************************************
- 功能描述:主函数
- 参数说明:无
- 返回说明:无
- 注:
******************************************************************/
void main ( void )
{
Init_Mcu() ;
while(1)
{
Key_Service();
}
}
/******************************************************************
- 功能描述:执行按键按下 要执行的任务
- 参数说明:无
- 返回说明:无
- 注:
******************************************************************/
void Key_Service( void ) //第三区 按键服务的应用程序
{
switch(Key_Value) //按键服务状态切换
{
case 1: Key_Value = 0; LED0=!LED0; break;
case 2: Key_Value = 0; LED1=!LED1; break;
case 3: Key_Value = 0; LED2=!LED2; break;
case 4: Key_Value = 0; LED3=!LED3; break;
default: break;
}
}
/******************************************************************
- 功能描述:按键核心算法
- 参数说明:无
- 返回说明:无
- 注:
******************************************************************/
void KeyRead( void )
{
unsigned char read_data = PINB^0xff; // 1 读键值
Key_Trg = read_data & (read_data ^ Key_Cont); // 2 得到按下触发值
Key_Release= (read_data ^ Key_Trg ^ Key_Cont);// 3 得到释放触发值
Key_Cont = read_data; // 4 得到所有未释放的键值
}
/******************************************************************
- 功能描述:按键扫描函数
- 参数说明:无
- 返回说明:无
- 注:
******************************************************************/
void Key_Scan( void )
{
KeyRead();
switch(Key_Trg & 0xf0)
{
case 0x10: Key_Value = 1; break;
case 0x20: Key_Value = 2; break;
case 0x40: Key_Value = 3; break;
case 0x80: Key_Value = 4; break;
default: Key_Value = 0; break;
}
}
0
回复
提示
@又一个暑假
还有一个按键的写法更酷,我用Proteus仿真了一下,不妨大家也可以看看这样的按键写法,不过核心算法我是原创的,我相信也很多人看过,没看过的朋友仔细看看,会有收获的。源代码如下:/******************************************************************-功能描述:主要是想测试按键的算法按键按下对应的LED灯翻转又一个暑假2015.02.12******************************************************************/#include"REG52.H"#definePINBP1sbitLED0=P2^0;sbitLED1=P2^1;sbitLED2=P2^2;sbitLED3=P2^3;volatileunsignedcharKey_Value;volatileunsignedcharKey_Trg;volatileunsignedcharKey_Cont;volatileunsignedcharKey_Release;voidKey_Scan(void);//按键扫描函数voidKey_Service(void);//按键服务函数voidKeyRead(void);//按键核心算法/******************************************************************-功能描述:中断服务函数-参数说明:无-返回说明:无-注:******************************************************************/voidT0_time(void)interrupt1{TF0=0;//清除中断标志TR0=0;//关中断Key_Scan();TH0=(65535-20000)/255;//重装初始值TL0=(65535-20000)%255;TR0=1;//开中断}/******************************************************************-功能描述:单片机初始化-参数说明:无-返回说明:无-注:******************************************************************/voidInit_Mcu(void)//初始化单片机{TMOD=0x01;//设置定时器0为工作方式1TH0=0xff;//重装初始值(65535-2000)=63535=0xf82fTL0=0xf0;EA=1;//开总中断ET0=1;//允许定时中断TR0=1;//启动定时中断}/******************************************************************-功能描述:主函数-参数说明:无-返回说明:无-注:******************************************************************/voidmain(void){Init_Mcu();while(1){Key_Service();}}/******************************************************************-功能描述:执行按键按下要执行的任务-参数说明:无-返回说明:无-注:******************************************************************/voidKey_Service(void)//第三区按键服务的应用程序{switch(Key_Value)//按键服务状态切换{case1:Key_Value=0;LED0=!LED0;break;case2:Key_Value=0;LED1=!LED1;break;case3:Key_Value=0;LED2=!LED2;break;case4:Key_Value=0;LED3=!LED3;break;default:break;}}/******************************************************************-功能描述:按键核心算法-参数说明:无-返回说明:无-注:******************************************************************/voidKeyRead(void){unsignedcharread_data=PINB^0xff;//1读键值Key_Trg=read_data&(read_data^Key_Cont);//2得到按下触发值Key_Release=(read_data^Key_Trg^Key_Cont);//3得到释放触发值Key_Cont=read_data;//4得到所有未释放的键值}/******************************************************************-功能描述:按键扫描函数-参数说明:无-返回说明:无-注:******************************************************************/voidKey_Scan(void){KeyRead();switch(Key_Trg&0xf0){case0x10:Key_Value=1;break;case0x20:Key_Value=2;break;case0x40:Key_Value=3;break;case0x80:Key_Value=4;break;default:Key_Value=0;break;}}
这个程序不是在数控电源的板子上运行的
源代码就贴在这了。按键.rar
0
回复
提示








