个人还是比较喜欢有个电源指示灯,所以另外加了个“小红”
【单片机开源学习】跟着乐老师学习数控电源
全部回复(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
回复
提示