您好, 登录| 注册|
论坛导航
您好, 登录| 注册|
子站:
商城:
论坛首页    单片机MCU/嵌入式
  •  发帖
  • 收藏

PIC单片机入门学习
阅读: 6060 |  回复: 70 楼层直达

2016/06/17 15:21:10
1
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

QQ截图20160321155901  众望所归之可信任的数据采集仪



    这段时间工作中用到了单片机,很长时间没有去琢磨单片机了,准备开一帖,把自己学习单片机的历程写下来.
标签 MCU PIC

电源网-天边在2016-07-06打赏该贴 +9 电源币 打赏理由:c版辛苦~

5-SOT-23 -40至85精密微功耗低压差电压基准 IO-Link数字输入集线器参考设计 具有超低IQ的60V、100mA双模同步降压稳压器
800mA快速超低压差线性稳压器 支持USB3.0的CISPR 25 5类USB Type-C™端口 具有40μA静态电流的40V、5A、2.2MHz 降压稳压器
具有2位灵活VID控制器的单相控制器 适用于HEV/EV牵引逆变器的IGBT模块过热保护 具有一次侧稳压功能的恒压恒流PWM
2016/06/17 15:24:04
2
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    很多的模拟电子工程师在单片机这一块是短板,不知道如何下手.

    我也有过这样痛苦的经历,我准备把自己写的PCI单片机的程序贴上来,共享给大家,还是老套路,每天更新一点.

    这里需要提及一点,在单片机的学习过程中,我得到了很多人的帮助,其中我最感谢的是鸿哥.如果大家还不了解鸿哥是何须人也,请百度.

    我的程序的大框架就是脱胎于鸿哥在网上共享的那种结构,个人觉得挺好,思路很清晰.

    

2016/06/17 15:32:25
3
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    PIC单片机点亮LED.

原理图

2016/06/17 15:35:16
4
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    源程序

实测已经调试通过,共享给大家.

2016/06/17 16:43:30
5
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    我个人习惯的程序书写方法.

第一步:头文件;

第二步:字符型,整型,长整型缩写定义;

第三步:需使用的数值或变量缩写定义;

第四步,单片机端口定义;

第五步,全局变量定义;(各功能函数中包括的变量放在一起,并注明)

第六步,初始化函数定义;通常是单片机初始化以及外设初始化;

第七步,功能函数定义;

第八步,中断函数定义;

第九步,延时函数定义;

第十步,主函数模块;

第十一步,功能函数模块;

第十二步,中断函数模块;

第十三步,延时函数模块.

    这是我自己总结的单片机程序的十三步套路法,个人觉得还是比较管用的.

2016/06/27 14:34:04
6
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    这几天埋头调试程序,将已经调试通过的程序共享给大家.

1,通过延时函数实现LED亮灭

1_LED.rar

2,通过主循环实现LED亮灭

2_LED_recycle.rar

3,通过主循环实现流水灯

3_water_lamp.rar

4,通过中断实现LED亮灭

4_interrupt_led.rar

5,通过中断实现流水灯

5_interrupt_water_lamp.rar

2016/06/27 14:35:28
7
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    懒的自己搭电路,花了将近两百大洋买了一块慧静的PIC单片机开发板,原理图共享给大家

慧静PIC单片机原理图.pdf

2016/06/28 15:29:58
8
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新,通过中断实现LED闪烁以及蜂鸣器鸣响功能.

6_interrupt_alarm_led.rar

2016/06/29 15:06:48
9
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

   继续更新,通过主循环实现独立按键扫描触发蜂鸣器鸣响

7_recycle_key_trigger_alarm.rar

2016/07/01 15:39:30
10
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新,通过中断扫描实现矩阵键盘检测,触发蜂鸣器鸣响

8_recycle_key_trigger_alarm.rar

2016/07/31 16:26:32
32
aiohu3
电源币:0 | 积分:3 主题帖:0 | 回复帖:1
LV1
士兵
对于8位单片机,大家不要买开发板,仿真软件里都有的   89s51deng等,电路的搭建在 PROTEUS里就可以完成,测试可以在仿真中作
2016/07/01 15:41:07
11
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    帖子拉正,

    目前PIC单片机采用型号为PIC16F877A,个人觉得还是比较强大的一款芯片.我写的程序个人觉得还是比较易于理解的,希望对大家有帮助.

2016/07/02 10:43:00
12
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新,通过中断扫描按键实现数码管触发显示

9_interrupt_key_trigger_tube.rar

2016/07/04 09:08:37
13
fzzz321
电源币:0 | 积分:0 主题帖:0 | 回复帖:3
LV1
士兵
发现你真的是学无止境啊
2016/07/04 14:36:00
14
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新.

    通过配置PIC的CPP寄存器实现PWM输出,同时通过按键触发实现PWM可调

输出波形1

输出波形2

两路波形对比

2016/07/05 16:44:46
15
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新.

    搞定看门狗的配置,通过看门狗复位实现LED闪烁

12_watch_dog_led.rar

开发板实物

2016/07/06 16:26:35
16
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新.

    今天搞定PCI单片机的CCP功能,也就是所谓的捕获功能.

    RC2端口输入PWM方波,通过单片机捕获上升沿或者下降沿等在数码管上显示出来

实物

信号波形

源代码

15_capture_tube.rar

2016/07/06 16:26:59
17
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长
    妈的,调试了差不多大半天,两眼都发黑,需要休息了.
2016/07/06 16:27:45
18
电源网-天边
上一次首页头条
电源币:452 | 积分:404 主题帖:28 | 回复帖:1045
LV9
军长
注意休息呀  c版~~
2016/07/07 08:22:30
19
lihui710884923[实习版主]
电源币:6063 | 积分:1 主题帖:113 | 回复帖:279
LV7
旅长

你好这个可以和stc单片机通用吗

2016/07/07 10:36:52
20
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长
    寄存器配置不同而已
2016/07/07 15:39:40
21
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新.

    搞定CCP1的比较功能,通过CCP1寄存器的数值与TMR1的累计数值进行比较,当二者相同,则比较中断触发,CPU响应中断请求,实现某一动作.

    在该实例中,通过CCP1中断触发实现LED的亮灭.

实物

源代码

16_compare_interrupt_led.rar

2016/07/08 21:12:48
22
12zm
电源币:185 | 积分:0 主题帖:3 | 回复帖:135
LV5
营长
你的51这么快就玩熟悉了,又开始PIC了
2016/07/11 11:01:10
23
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更行.

    搞定PIC单片机的ADC采样功能显示

    实物

源程序1,直接通过主循环扫描实现adc采样

17_adc_tube.rar

源程序2,通过ADC中断实现ADC采样

18_adc_tube_interrupt.rar

2016/07/12 13:12:21
24
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新,搞定eeprom以及usart串口通信.

程序功能,PC机通过232接口向单片机发送数据,单片机接收到数值后,通过串口软件原值返回给PC机

实物

串口数据接收发送界面

串口软件

串口调试助手.rar

源代码

20_eeprom_usart.rar

2016/07/19 11:17:58
25
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新.

    通过IIC协议对24c02进行读写操作

实物

源代码

21_iic_24c02.rar

2016/07/23 08:13:57
26
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新.

    单片机通过串口对24c02进行读写操作,并将接收的数值返回给计算机,同时使用数码管显示对应数值.

    实物

串口调试

源程序

22_24c02_usart.rar

2016/07/23 08:15:19
27
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长
    目前帖子更新速度慢了,主要是工作多了,目前需要调试一些电路产品,所以没有太多的时间更新帖子,望大家谅解,只要抽出时间,我都会取更新帖子.希望对持续关注我帖子的朋友打声招呼,谢谢.
2016/07/27 22:23:40
29
黑夜11
电源币:51 | 积分:0 主题帖:18 | 回复帖:152
LV5
营长
我也是pic学习过来的,用它做过好几款逆变驱动板,用着用着就会感觉处理器很低端(个人觉得,说的时钟60M,但是实际情况非得除以4,头大),后来改用stm32,价格也一样
2016/07/28 06:57:43
30
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    PIC单片机号称是业内最稳定的单片机,目前因为有项目用到他,所以学习了.他有很多的系列.目前接触的是8位的,他也有16位和32位的,不过用的人较少.

    目前感觉PIC单片机还可以,不过编译器没有keil人性化,同时对于8位机的支持效果不好.

    等PIC搞定了,就开始学习STM32.谢谢你,楼主,谢谢你关注我的帖子.

2016/07/26 09:47:52
28
电源网-fqd
电源币:5043 | 积分:15071 主题帖:247 | 回复帖:4254
LV11
统帅
帖子已被设置为头条,恭喜楼主可添加电源网私人官网微信(dianyuan_com)为好友,领取现金红包(备注信息:头条红包)

      注:现金红包仅限当日领取

      活动介绍:http://www.dianyuan.com/bbs/1529195.html

     

2016/07/31 09:13:07
31
越凌科技
电源币:49 | 积分:6 主题帖:17 | 回复帖:169
LV6
团长
    好帖!  赞一个!  我两年前买了一个80C52的开发板!到现在都木有摸到进门的路呢!继续加油!跟进中·····
2016/07/31 16:38:31
33
bing198986
电源币:0 | 积分:3 主题帖:3 | 回复帖:3
LV1
士兵
能根我说一下你那开发板型号不,PIC33F系列是多少位的去了
2016/08/01 08:58:25
34
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长
    慧静开发板,PIC的单片机,不过这款开发板硬件本身没有问题,但是他写的例程确很垃圾,个人觉得不是很好.
2016/08/03 15:44:36
35
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    这段时间事情较多,更新帖子较慢,还望大家谅解.

    花了两天的时间搞定数字时钟,两眼发黑,头昏脑胀,好累

    通过PIC单片机控制DS1302实现数字时钟功能,

    可以实现闰年非闰年月份校正功能,

    通过按键切换可以实现日期显示和时间显示的切换

    通过按键可以实现时间日期的调整

    可以实现备用电池电压不足提示报警功能

    实物照片

源码:

23_ds1302.rar

2016/08/03 15:48:58
36
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    由于手头上没有纽扣电池,于是通过一个大电容来代替纽扣电池

    初始上电,如果备用电池电压不足,蜂鸣器会鸣响,提示备用电池电压不足,这里通过一个大电容代替纽扣电池,可以实现备用电池电压不足报警功能.

    大家可以试一试,源码比较长,我没有写成模块化的代码,主要是方便大家直接调取学习.

    累并快乐着,数字时钟功能的实现,个人觉得自己的技术又上了一层楼,和大家共享.

2016/08/04 14:58:14
37
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新,今天搞定1602的显示驱动

    实物

源代码:

24_lcd_1602.rar

2016/08/04 14:58:54
38
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长
    接下来准备将数字时钟升级一下,通过液晶屏幕显示数值,代替数码管显示.
2016/08/05 21:33:18
39
黑夜11
电源币:51 | 积分:0 主题帖:18 | 回复帖:152
LV5
营长
给你个1602的菜单显示界面,哈哈


#ifndef _Menu_
#define _Menu_
#include"Function.h"//功能函数
#include  <msp430x14x.h>
//==================================================
//LCD1602多级菜单显示
//BY:JH单片机
//If you want to use the program or the program referenced in the article,
//please specify in which data and procedures from JHMCU.com
//
//Web:www.JHMCU.com	 出自傻孩子菜单界面
//==================================================
#define keyin    (P1IN & 0x0f)
#define ADD       0xfb//上页
#define SUB       0xf7//下页
#define SET       0x0e//设置、确定
#define BACK      0x0d//返回

#define Null 0
//菜单目录结构体声明
 struct MenuItem MainMenu_zhu[2];
 struct MenuItem MainMenu[7];
 struct MenuItem Priority_Menu[2];
 struct MenuItem Baud_Menu[6];
 struct MenuItem Pmax_Menu[1];
 struct MenuItem Buzzer_Menu[2];
 struct MenuItem  About_Menu[2];
 unsigned char keysacn(void);
 void ShowMenu();
 void ChangeMenu(unsigned char keynum);
 void L_R_Move();
 void Buzzer_ON(void);
void Buzzer_OFF(void);
void Exit_o(void);



//菜单使用的全局变量
#define LcdMaxLine	2			//定义LCD最多显示菜单数目
struct MenuItem (*MenuPoint) = MainMenu_zhu;	//结构体菜单指针指向主菜单
const unsigned char shuzi[10] = {"0123456789"};//固定字符串
//const unsigned char yt[16]={"T:24.3°P: 510W"};//15个字符串
 unsigned char yu[16]={"    52400  W   "};//可更改字符串
//unsigned char Buz_flag=1;
unsigned char DisplayStart=0;	//显示菜单的开始位置
unsigned char UserChoose=0;	//用户的选择
unsigned char DisplayPoint=0;	//显示菜单的编号
 unsigned char R_L_cnt=0;        //全局变量
unsigned char MaxItems=0;	//菜单的数量
  unsigned char Up_Down=0;
//==========================================================================
//目录结构体定义
//==========================================================================
struct MenuItem
{
	unsigned char MenuCount;    	//菜单的数目
	unsigned char *DisplayString; 	//显示的字符串
	void (*Subs)(); 				//菜单指向的功能函数  使用方法:Subs=&  函数名字 ;
	struct MenuItem *ChildrenMenus;	//子节点
	struct MenuItem *ParentMenus;	//父节点
        unsigned char Type_o;//显示类型
};
//==========================================================================
// 菜单结构体链表
//==========================================================================
//主界面显示

 struct MenuItem MainMenu_zhu[2] =		
 {
   {2,"    System is  ",NullSubs,MainMenu,MainMenu_zhu,0x01},		//->显示主界面
   {2," being tested  ",NullSubs,MainMenu,MainMenu_zhu,0x01},		//->显示主界面
 } ;  

//==========================================================================
// 菜单结构体链表
//==========================================================================
//主菜单-第一级菜单

 struct MenuItem MainMenu[7] =		//结构体主菜单
{

	{7," S/N_Priority ",NullSubs,Priority_Menu,Null,0x00},	//->逆变优先级设置
	{7,"Set Baud Rate ",NullSubs,Baud_Menu,Null,0x00},		//->设置波特率
	{7,"   Set Pmax   ",NullSubs,Pmax_Menu,Null,0x00},		//->设置最大功率
	{7,"  Buzzer SW   ",NullSubs,Buzzer_Menu,Null,0x00},		//->蜂鸣器开关
	{7,"    Exit      ",NullSubs,MainMenu_zhu,Null,0x00},	//->退出(返回主界面)
	{7,"    About     ",NullSubs,About_Menu,Null,0x00},	        //->关于
        {7,"  Power_off   ",Power_off,Null,Null,0x00},	        //->关机
};

 struct MenuItem Priority_Menu[2] =		//优先级菜单
{
	{2,"Electric City ",NullSubs,Null,MainMenu,0x00},
	{2,"   Inverter   ",NullSubs,Null,MainMenu,0x00},
};

 struct MenuItem Baud_Menu[6] =		//波特率菜单
{
	{6,"     2400     ",NullSubs,Null,MainMenu,0x00},
	{6,"     4800     ",NullSubs,Null,MainMenu,0x00},
        {6,"     9600     ",NullSubs,Null,MainMenu,0x00},
        {6,"     19200    ",NullSubs,Null,MainMenu,0x00},
        {6,"     38400    ",NullSubs,Null,MainMenu,0x00},
        {6,"     76800    ",NullSubs,Null,MainMenu,0x00},
};
 struct MenuItem Pmax_Menu[1] =		//最大功率设置
{
	{1,yu,L_R_Move,Null,MainMenu,0x02},
};   
 struct MenuItem Buzzer_Menu[2] =		//蜂鸣器开关
{
	{2,"  Buzzer ON   ",Buzzer_ON,Null,MainMenu,0x00},
        {2,"  Buzzer OFF  ",Buzzer_OFF,Null,MainMenu,0x00},
}; 
 struct MenuItem  About_Menu[2] =		//关于
{
	{2,"Small raccoon ",NullSubs,Null,MainMenu,0x00},//小浣熊
        {2,"  Electronics ",NullSubs,Null,MainMenu,0x00},//电子
}; 
   
unsigned char keysacn(void)//
{
unsigned char temp,k_num;
 if(keyin != 0x0f)       //键值有改变
        {
         IE1 |=WDTIE;//开看门狗中断 
           _NOP();            //延时消抖
            if(keyin != 0x0f)   //再次检测按键状态
            {   
                temp=keyin; 
                
                while(keyin != 0x0f);   //等待按键被放开
                  IE1 &=~WDTIE;//关闭看门狗中断
                  P6OUT|=BIT7;//输出高电平
                switch(temp)    //转换键值    
                {
                case 0x0e://设置、确定
                            k_num = SET;break;  
                case 0x0d://返回
                            k_num = BACK;break;
                case 0x0b://上页
                            k_num = ADD;break;
                case 0x07://下页
                            k_num = SUB;break;
                default:
                            k_num = Null;break;
                }
                
            }
        }
  return k_num;//输出键值
}	
//==================================================
//功能能函数
//INPUT:
//OUTPUT:
//FUNCTION:
//==================================================
void Power_off(void)//关机程序
{ ;//P2OUT^=BIT0;//灯全灭
}

void Buzzer_ON(void)
{_EINT();}
void Buzzer_OFF(void)
{_DINT();}

//==================================================
//最大功率设置光标移动函数
//INPUT:
//OUTPUT:
//FUNCTION:
//==================================================

void L_R_Move()
{

DispStr(0,1," Maximum power ");//显示最大功率字符

 if(++R_L_cnt>4)R_L_cnt=0;//右移5次

// P2OUT^=BIT1;//灯全灭
}


//==================================================
//LCD1602菜单显示通用函数
//INPUT:结构体链表,UserChoose
//OUTPUT:NONE
//FUNCTION:LCD1602液晶显示屏上显示菜单功能
//==================================================
void ShowMenu()
{
   
	for(unsigned char i=0;i<LcdMaxLine;i++)		//循环显示当前菜单
	{


                  if(DisplayPoint < MaxItems){//如果当前显示节点小于菜单数
                      

                          
                         if(DisplayPoint==UserChoose)//如果用户选中该菜单,则在菜单前打印"->"
				DispStr(0,i,"->");
			else
				DispStr(0,i,"  ");
                        
			DispStr(2,i,MenuPoint[DisplayPoint++].DisplayString);
                        
		}else	//显示最后一页菜单,并只有一项菜单时,清除最后一行
		{
			DispStr(2,LcdMaxLine-1,"                ");	//将上一次显示清屏
		}
	}
	//菜单定位逻辑
	if(UserChoose%LcdMaxLine==0){
		DisplayStart = UserChoose;
	}else{
		//逻辑:如果用户选择的菜单是奇数,则将显示定位在偶尔页
		for(unsigned char i=0;i<=MaxItems;i++){
			if(UserChoose!=(i%LcdMaxLine))
				DisplayStart = UserChoose-1;	//菜单滚屏
		}
	}
        
}
//==================================================
//按键显示函数
//INPUT:结构体链表,UserChoose
//OUTPUT:NONE
//FUNCTION:LCD1602液晶显示屏上显示菜单功能
//==================================================
void ChangeMenu(unsigned char keynum)
{

  
	switch(keynum){
		case ADD:

			if (--UserChoose==255)
			{
				UserChoose = 0;	//上翻停止赋值为0,回滚赋值为MaxItems-1
			}
                        if(++Up_Down>=9)Up_Down=9;//参数设置变量
                          
			break;
		case SUB:

			if (++UserChoose == MaxItems)
			{
				UserChoose = MaxItems-1;//上翻停止赋值为MaxItems-1,回滚赋值为0
			}
                        if(--Up_Down<=0)Up_Down=0;//参数设置变量
			break;
		case SET:
			//如果用户选择的菜单指向的函数不是空函数,则执行功能函数。
			if (MenuPoint[UserChoose].Subs != NullSubs)
			{
				(*MenuPoint[UserChoose].Subs)();	//执行菜单功能函数
			}
			//如果是空函数,则找子菜单,找不到子菜单,就退出
			else if (MenuPoint[UserChoose].ChildrenMenus != Null)
			{
				MenuPoint = MenuPoint[UserChoose].ChildrenMenus;
				UserChoose = 0;
				DisplayStart = 0;
			}
			break;
		case BACK:
			if (MenuPoint[UserChoose].ParentMenus != Null)
			{
				MenuPoint = MenuPoint[UserChoose].ParentMenus;

				UserChoose = 0;
				DisplayStart = 0;
			}
			break;
		default:break;
	                    }
      MaxItems = MenuPoint[UserChoose].MenuCount;	//获取当前菜单的条目数
      DisplayPoint = DisplayStart;		//选中第一项菜单
//========================显==示==分==配================================
switch(MenuPoint[UserChoose].Type_o){ //查找显示类型
          
        case 0x01://指向主界面
          //按下设置后关闭所有中断,只有主界面时才稳压
                                       

                                        // DisplayPoint = DisplayStart;		//选中第一项菜单
                                         for(unsigned char i=0;i<2;i++)
          
                                          DispStr(0,i,MenuPoint[DisplayPoint++].DisplayString);	//显示电流,电压,功率,CPU温度
            
                                          
              break;
              

              
        case 0x02://指向最大功率设置
          
   
                                         
                                            yu[4+R_L_cnt]=shuzi[Up_Down];//按键码转字符串
                                          
                                          DispStr(0,0,MenuPoint[0].DisplayString);	//显示最大功率字符串
                                          
                                           LocateXY(4+R_L_cnt,0);//确定光标位置
  
                                         LcdWriteCommand(0x0f, 1);   //打开游标
 

                                         
          
    
              break;
              
        
        default://出去特殊显示外,显示功能函数
                                          LcdWriteCommand(0x0c, 1);   //关闭游标
                                           ShowMenu();//显示主菜单
                                            
              break; 
          
                       }
        

      
}


#endif
2017/04/13 14:42:31
70
一千个爱你的理由
电源币:2 | 积分:0 主题帖:5 | 回复帖:18
LV3
排长
程序够把人写傻
2016/08/09 14:56:15
40
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长
    继续更新.
2016/08/09 14:56:46
41
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    搞定数字时钟,通过液晶显示

实物

2016/08/09 14:58:36
42
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

源码

25_cd1602_ds1302_key.rar

这段代码,折腾了至少3天,遇到的问题各种各样,不过最终还是克服了.共享给大家.

以前搞程序不多,需要边学边用,同时工作上的事情很多,更新速度会比较慢,望谅解.

2016/08/10 15:18:13
43
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新,搞定ds18b20,同时在lcd上显示

实物

源代码

26_lcd1602_ds18b20.rar

2016/08/11 10:10:04
44
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新.

    今天的代码相对来说比较简单,就是将温度与时间在1602上显示出来.其实就是25,26两端代码的整合.

需要注意的事项是,因为我使用了中断,ds18b20对于时序要求较高,所以当实现温度采集时,需要将中断关闭,采集完成再打开,否则温度采集会出错.

实物

源代码

27_lcd1602_ds1302_ds18b20.rar

2016/08/11 10:13:42
45
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    代码可能比较乱,我没有花太多的时间去整理代码,但是功能已经实现了,而且上电工作了差不多1个小时,没有出现问题.

    希望对大家有帮助.

    PIC单片机,个人觉得还是很不错的,比较有意思.

    据说其稳定性很高,我想在很长一段时间里,我可能会一直使用PIC单片机,其系列很多,有8位的,16位的,32位的.

    虽说现在STM32很流行,不过我还是觉得专心致志的玩好一款单片机很重要.

2016/08/12 09:43:51
47
daihui713
电源币:180 | 积分:6 主题帖:17 | 回复帖:191
LV6
团长

支持一下,又有一个玩PIC的同志了。PIC内部资源还算蛮丰富的,想要什么功能,熟悉寄存器然后操作寄存器就可以,如4XPLL倍频、电容传感、门控定时器、可关断PWM、内部EEP、比较器、波形互补、CLC等

2016/08/11 11:53:21
46
zhiliposuili
电源币:0 | 积分:3 主题帖:0 | 回复帖:1
LV1
士兵
haoyangde
2016/08/13 15:20:45
48
新铺居士
电源币:153 | 积分:0 主题帖:21 | 回复帖:83
LV5
营长

这个单片机是只能写一次程序吗。

2016/08/17 08:52:14
49
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长
    抱歉,回复的较迟,我目前使用的这款PIC单片机是可擦除的,型号是PIC16F877A.
2016/08/17 14:36:35
50
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新.

    今天搞定ds18b20温度上下限报警程序

实物

源代码

28_temperature_alarm.rar

2016/08/17 14:39:29
51
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    话说PIC的单片机事情就是多,这段代码通过51单片机调试通过,实测也没有问题.移植到PIC单片机上,一大堆问题出来了,不过都已经解决了.

    最头疼的是DS18B20的时序问题,这个问题卡了我一天半,心情超级不爽,反复调试ds18b20的延时函数,可谓死去活来.

    调的恨不得把电脑砸了,后来实在没有办法,过度昂放弃这一思路,将之前调试通过的18b20的程序修修改改移植过来了,问题总算是搞定了.

2016/08/17 14:42:05
52
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    后面准备用lcd1602实现两级菜单以及多级菜单,网上找了一堆程序,基本上都不能直接使用,还得自己重新想办法梳理思路,好烦.

    工程师的生活好枯燥,后悔入错行,可是想想,还是觉得这一行适合我.每日精进是我的追求,痛并快乐着.和大家共勉.

2016/08/19 16:46:42
53
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    搞定lcd12864液晶显示

    共享给大家,花了大半天的时间去调试该程序,开发板竟然还有一个小bug.

    实物

源代码

29_lcd12864.rar

2016/08/22 14:16:33
54
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    搞定12864制作万年历

实物

源代码

30_lcd12864_ds1302_ds18b20.rar

2016/08/22 14:19:19
55
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    实现的功能,1:通过12864实时显示时间日期温度

                    2:通过按键可以实现时间日期的调节

总体感觉12864功能还是比较强大的,目前仅仅将它的一般使用方法掌握了,个人觉得12864还有很多的功能可以深挖.


2016/08/25 12:01:35
56
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    继续更新.

    这几天通过51单片机搞定模拟时钟,但是移植到PIC单片机,却不正常,纠结了很长时间.

51单片机实测画面

开机画面


工作画面


源代码

模拟时钟.rar



2016/08/25 12:05:29
57
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    昨天找了差不多大半天的时间,问题找到了.PIC单片机驱动12864时,12864液晶必须将其绘图功能关闭才能正常工作.但是绘图功能关闭了,这个液晶对我有什么意义呢.

不正常画面

2016/08/25 12:06:26
58
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长
    如果同仁遇到同样的问题,并解决的,希望能指导一下,谢谢.模拟时钟通过PIC单片机实现这个项目,我可能暂时要放一放了.
2016/08/26 17:20:33
59
zhaowenming
电源币:18 | 积分:0 主题帖:42 | 回复帖:238
LV6
团长
我也是做电源的,也学了一段时间单片机,只是一直没实际做产品。等待你的分享。
2016/08/29 11:14:20
60
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    搞定呼吸灯,这个程序其实很简单

    采用两种方式实现呼吸灯效果,第一种方式通过主函数内延时实现,第二种方式通过中断延时实现.

源代码

32_breath_lamp_1.rar

33_breath_lamp_2.rar

2017/06/03 21:25:31
71
liuqiwei85
电源币:567 | 积分:0 主题帖:41 | 回复帖:196
LV6
团长
也一样,工作中用不上,学一段时间放一段时间,扳手指数一数好多年了
2016/08/29 11:28:45
61
bv3xxx
电源币:0 | 积分:0 主题帖:0 | 回复帖:25
LV2
班长

很棒的思维,支持你

 

2016/08/31 11:02:02
62
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    这几天一直想把PIC单片机的开发板的4M晶振换成更高频率的晶振.

    查了一下技术手册,PIC16F877A最大支持频率为20M.手头上正好有11.0592M以及12M晶振,直接将4M晶振替换为11.0592M晶振,但是单片机不能正常工作.

    纠结了好几天,因为示波器一直不在身边,今天把示波器带过来,实际测试了一下晶振波形,发现只要示波器探头一点到晶振上,开发板立马正常工作了.

    我以为是晶振的起振电容不对,换了好几个电容,均不行.只好查找技术手册,发现PIC单片机外接不同的晶振,需要配置单片机的寄存器,以适应不同的晶振频率.

    其实也就是在配置字中配置一下晶振模式就行了,不过由于我不熟悉PIC单片机,所以纠结了两天,现在共享给大家

2016/08/31 11:08:20
63
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    至此,PIC单片机常规的寄存器配置,个人觉得已经差不多了.这一帖,我也准备结束了.

    我个人的定位是电源工程师,目前常规的模拟电源,基本上没有什么问题,现阶段主要想拿下数字电源这一块.

    学习数字电源必须跨过的一道坎就是单片机编程,目前PIC单片机常规的使用方法以及寄存器配置,个人觉得没有什么问题.

    数字电源接下来需要搞定的是算法类的程序问题,开始着手程序算法类的编程学习.

    单片机常规的应用代码,我理解几乎没有问题,但是只要接触到大段的计算类的代码,我就不知道从何下手,这是我的薄弱环节,接下来程序类的算法是我需要突破的重头戏.

    努力奋斗,每日精进是我的追求,和志同道合的朋友共勉.

2016/09/05 16:16:49
64
cjhk[版主]
电源币:620 | 积分:63 主题帖:28 | 回复帖:122
LV9
军长

    今天再共享两个有用的例程.

按键单击双击功能

key_single_double_click.rar

按键组合功能

key_combined_trigger.rar

这两个功能比较实用,脱胎于鸿哥的51按键功能,希望对大家有帮助.

2017/02/09 15:26:45
68
工部侍郎
电源币:0 | 积分:0 主题帖:3 | 回复帖:10
LV2
班长
mark 跟LZ一起学习
2016/09/16 14:44:59
65
樱桃1号
电源币:0 | 积分:3 主题帖:0 | 回复帖:9
LV1
士兵

学习中...

2016/10/24 16:51:02
66
一千个爱你的理由
电源币:2 | 积分:0 主题帖:5 | 回复帖:18
LV3
排长
单片机学习还是一个很复杂的过程,如果有一款芯片直接用中文描述和定义功能,然后达到和单片机编程的效果那就不错了。
2017/02/04 07:42:05
67
mulunliang
电源币:61 | 积分:6 主题帖:4 | 回复帖:7
LV5
营长
http://www.dianyuan.com/bbs/1531322.html,欢迎楼主一起改造数字电源
2017/03/23 13:16:25
69
ruohan
电源币:3 | 积分:9 主题帖:44 | 回复帖:986
LV9
军长

开发版有没有对应的书啊,

现在也在学这个,想找个简单的入门的书籍和开发版一起试试

 

关注我们
新浪微博
官方Q群
客服热线
服务时间:周一至周五9:00-18:00
微信关注