pic的第一个测试程序

发布者:TranquilGaze最新更新时间:2017-01-10 来源: eefocus关键字:pic  测试程序 手机看文章 扫描二维码
随时随地手机看文章

昨天拿到板子,焊接完毕。用i/o控制继电器,发现不好用,马上查三极管,果然画图的时候把封装搞错了,幸运的是直接颠倒焊接就行,刚毕业的时候犯过这样的错误,没想到现在还犯。问题1解决。
调试12864液晶,采用st7920的12864,串行方式。从51移植过来的,但死活不显示,检查硬件连接没有问题,程序上调整时序也不行,下午的时候看看网上的例子,发现一个寄存器ADCON1,仔细18f2550手册,才知道i/o需要设置成数字i/o,因为我用的i/o第二功能正好是ad的输入
设置成0x0f之后,显示ok,上个测试程序

  1. #include  

  2. __CONFIG(1, USBPLL & IESODIS & FCMDIS & HSPLL & CPUDIV1 & PLLDIV5);  

  3. // Config word 2  

  4. __CONFIG(2, VREGEN & PWRTDIS & BOREN & BORV20 & WDTDIS & WDTPS32K);  

  5. // Config word 3  

  6. __CONFIG(3, PBDIGITAL & LPT1DIS & MCLREN);  

  7. // Config word 4  

  8. __CONFIG(4, XINSTDIS & STVREN & LVPDIS & ICPORTDIS & DEBUGDIS);  

  9. // Config word 5, 6 and 7 (protection configuration)  

  10. __CONFIG(5, UNPROTECT);  

  11. __CONFIG(6, UNPROTECT);  

  12. __CONFIG(7, UNPROTECT);        

  13.   

  14.   

  15.   

  16. #define BK RA3                    //定义LCD的读/写控制口  

  17. #define SCLK   RA2                    //定义LCD的使能口  

  18. #define SID RA1                    //定义通信方式控制口  

  19. #define CS RA0                    //定义复位口  

  20. #define LED1 RC1  

  21. #define LED2 RC0  

  22. #define relay1 RB4  

  23. #define relay2 RB5  

  24. #define x1    0x80  

  25. #define x2    0x88  

  26. #define y     0x80  

  27. #define comm  0  

  28. #define dat   1  

  29.   

  30. unsigned char const num_lcd[]={"0123456789 :.-"};  

  31.   

  32. unsigned char const ready[]="ASDFGHJKJ";  

  33. void IO_init();  

  34. void Lcd_Init(void);  

  35. void Write_Char(unsigned char start, unsigned char ddata);  

  36. void Send_Byte(unsigned char bbyte);  

  37. void Delaynms(unsigned int di);  

  38. void Clr_Scr(void);  

  39. void LCD_Set_XY( unsigned char X, unsigned char Y );  

  40. void LCD_Write_String(unsigned char X,unsigned char Y,unsigned char *s);  

  41. void LCD_Write_Number(unsigned char s);  

  42. void Display_Img(unsigned char const *img);  

  43. //void Wr_Lcd(unsigned char dat_comm,unsigned char content);  

  44. //-------------------------------------------  

  45. //主程序  

  46. void main()  

  47. {  

  48.    IO_init();  

  49.    LED1=1;  

  50.    LED2=1;  

  51.    BK=0;  

  52.    relay1=0;  

  53.    relay2=0;  

  54.      

  55.    Lcd_Init();  

  56.    Delaynms(100);  

  57.    LCD_Write_String(1,1,ready);  

  58.    LCD_Set_XY(3, 0);  

  59.    LCD_Write_Number(1);  

  60.    while(1)  

  61.      {  

  62.          

  63.      }  

  64. }  

  65.   

  66. //-------------------------------------------  

  67. //I/O口设置函数  

  68. void IO_init()  

  69. {  

  70.   TRISA=0X00;                       //设置A口为输出  

  71.   TRISB=0X00;                       //设置A口为输出  

  72.   //TRISD=0X00;                       //设置D口为输出  

  73.   ADCON1=0X0f;                      //设置A口为普通I/O口  

  74.   TRISC=0X00;  

  75. }  

  76.   

  77.   

  78. /****************************************************************************************** 

  79. * 函数名称    :Lcd_init 

  80. * 功能描述    :初始化LCD  

  81. * 参数        :  参数名称:    输入/输出?  类型      描述 

  82. *  

  83. * 返回值      : 

  84. * 作者        : 

  85. * 创建日期    :2008-12-19 

  86. * 全局变量    : 

  87. * 全局静态变量: 

  88. * 局部静态变量: 

  89. *----------------------------------------修改历史------------------------------------------ 

  90. * 当前版本    :              修改人:                  修改日期: 

  91. * 修改说明    : 

  92. ******************************************************************************************/  

  93. void Lcd_Init(void)   

  94. {  

  95.     Delaynms(200); //启动等待,等LCM讲入工作状态  

  96.     CS=1;  

  97.     Write_Char(0,0x30);  //8 位介面,基本指令集  

  98.     Write_Char(0,0x0c);  //显示打开,光标关,反白关  

  99.     Write_Char(0,0x01);  //清屏,将DDRAM的地址计数器归零    

  100.     LED1 = 0;  

  101. }  

  102.   

  103. /****************************************************************************************** 

  104. * 函数名称    :Write_char 

  105. * 功能描述    :写指令或数据 

  106. * 参数        :  参数名称:    输入/输出?  类型      描述 

  107. *  

  108. * 返回值      : 

  109. * 作者        : 

  110. * 创建日期    :2006-12-19 

  111. * 全局变量    : 

  112. * 全局静态变量: 

  113. * 局部静态变量: 

  114. *----------------------------------------修改历史------------------------------------------ 

  115. * 当前版本    :              修改人:                  修改日期: 

  116. * 修改说明    : 

  117. ******************************************************************************************/  

  118. void Write_Char(unsigned char start, unsigned char ddata)   

  119. {  

  120.     unsigned char start_data,Hdata,Ldata;  

  121.     if(start==0)   

  122.         start_data=0xf8;     //写指令  

  123.     else      

  124.         start_data=0xfa;  //写数据  

  125.     

  126.     Hdata=ddata&0xf0;         //取高四位  

  127.     Ldata=(ddata<<4)&0xf0;  //取低四位  

  128.     Send_Byte(start_data);    //发送起始信号  

  129.     Delaynms(8); //延时是必须的  

  130.     Send_Byte(Hdata);         //发送高四位  

  131.     Delaynms(3);  //延时是必须的  

  132.     Send_Byte(Ldata);         //发送低四位  

  133.     Delaynms(3);  //延时是必须的  

  134. }  

  135.   

  136. /****************************************************************************************** 

  137. * 函数名称    :Send_byte 

  138. * 功能描述    :发送一个字节 

  139. * 参数        :  参数名称:    输入/输出?  类型      描述 

  140. *  

  141. * 返回值      : 

  142. * 作者        : 

  143. * 创建日期    :2006-12-19 

  144. * 全局变量    : 

  145. * 全局静态变量: 

  146. * 局部静态变量: 

  147. *----------------------------------------修改历史------------------------------------------ 

  148. * 当前版本    :              修改人:                  修改日期: 

  149. * 修改说明    : 

  150. ******************************************************************************************/  

  151. void Send_Byte(unsigned char bbyte)   

  152. {  

  153.     unsigned char i,t;  

  154.       

  155.     for(i=0;i<8;i++)  

  156.     {  

  157.         if((bbyte)&0x80)  

  158.             SID=1; //取出最高位  

  159.         else  

  160.             SID=0;  

  161.         SCLK=1;  

  162. //      t = 0x06;   

  163. //      while(t--);   //延时 lcd读取数据  

  164.         SCLK=0;  

  165.         bbyte <<= 1; //左移  

  166.     }     

  167. }  

  168.   

  169. /****************************************************************************************** 

  170. * 函数名称    :Delaynms 

  171. * 功能描述    :延时 

  172. * 参数        :  参数名称:    输入/输出?  类型      描述 

  173. *  

  174. * 返回值      : 

  175. * 作者        : 

  176. * 创建日期    :2006-12-19 

  177. * 全局变量    : 

  178. * 全局静态变量: 

  179. * 局部静态变量: 

  180. *----------------------------------------修改历史------------------------------------------ 

  181. * 当前版本    :              修改人:                  修改日期: 

  182. * 修改说明    : 

  183. ******************************************************************************************/  

  184. void Delaynms(unsigned int di)   

  185. {  

  186.     unsigned int da,db;  

  187.     for(da=0;da

  188.     for(db=0;db<10;db++);  

  189. }  

  190.   

  191. /****************************************************************************************** 

  192. * 函数名称    :Clr_Scr 

  193. * 功能描述    :清屏函数 

  194. * 参数        :  参数名称:    输入/输出?  类型      描述 

  195. *  

  196. * 返回值      : 

  197. * 作者        : 

  198. * 创建日期    :2006-12-19 

  199. * 全局变量    : 

  200. * 全局静态变量: 

  201. * 局部静态变量: 

  202. *----------------------------------------修改历史------------------------------------------ 

  203. * 当前版本    :              修改人:                  修改日期: 

  204. * 修改说明    : 

  205. ******************************************************************************************/  

  206. void Clr_Scr(void)//清屏函数  

  207. {  

  208.     Write_Char(0,0x01);  

  209. }  

  210.   

  211. /****************************************************************************************** 

  212. * 函数名称    : LCD_set_xy 

  213. * 功能描述    :设置LCD显示的起始位置,X为行,Y为列 

  214. * 参数        :  参数名称:    输入/输出?  类型      描述 

  215. *  

  216. * 返回值      : 

  217. * 作者        : 

  218. * 创建日期    :2006-12-19 

  219. * 全局变量    : 

  220. * 全局静态变量: 

  221. * 局部静态变量: 

  222. *----------------------------------------修改历史------------------------------------------ 

  223. * 当前版本    :              修改人:                  修改日期: 

  224. * 修改说明    : 

  225. ******************************************************************************************/  

  226. void LCD_Set_XY( unsigned char X, unsigned char Y )  

  227. {     

  228.     unsigned char address;  

  229.     switch(X)  

  230.     {  

  231.         case 0:   

  232.             address = 0x80 + Y;   

  233.             break;      

  234.         case 1:   

  235.             address = 0x80 + Y;   

  236.             break;   

  237.         case 2:   

  238.             address = 0x90 + Y;   

  239.             break;   

  240.         case 3:   

  241.             address = 0x88 + Y;   

  242.             break;  

  243.         case 4:   

  244.             address = 0x98 + Y;   

  245.             break;   

  246.         default:  

  247.             address = 0x80 + Y;   

  248.             break;  

  249.     }  

  250.     Write_Char(0, address);  

  251. }  

  252.   

  253. /****************************************************************************************** 

  254. * 函数名称    :LCD_Write_string 

  255. * 功能描述    :中英文字符串显示函数 

  256. * 参数        :  参数名称:    输入/输出?  类型      描述 

  257. *  

  258. * 返回值      : 

  259. * 作者        : 

  260. * 创建日期    :2006-12-19 

  261. * 全局变量    : 

  262. * 全局静态变量: 

  263. * 局部静态变量: 

  264. *----------------------------------------修改历史------------------------------------------ 

  265. * 当前版本    :              修改人:                  修改日期: 

  266. * 修改说明    : 

  267. ******************************************************************************************/  

  268. void LCD_Write_String(unsigned char X,unsigned char Y,unsigned char *s)  

  269. {     

  270.     LCD_Set_XY( X, Y );  

  271.       

  272.     while (*s)   

  273.     {  

  274.         Write_Char( 1, *s );  

  275.         s ++;  

  276.         Delaynms(1);  

  277.     }  

  278. }  

  279.   

  280. /****************************************************************************************** 

  281. * 函数名称    :LCD_Write_number 

  282. * 功能描述    :数字显示函数 

  283. * 参数        :  参数名称:    输入/输出?  类型      描述 

  284. *  

  285. * 返回值      : 

  286. * 作者        : 

  287. * 创建日期    :2006-12-19 

  288. * 全局变量    : 

  289. * 全局静态变量: 

  290. * 局部静态变量: 

  291. *----------------------------------------修改历史------------------------------------------ 

  292. * 当前版本    :              修改人:                  修改日期: 

  293. * 修改说明    : 

  294. ******************************************************************************************/  

  295. void LCD_Write_Number(unsigned char s)//    数字显示函数  

  296. {     

  297.     Write_Char(1,num_lcd[s]);  

  298.     Delaynms(5);  

  299. }  

  300.   

  301.   

  302. /****************************************************************************************** 

  303. * 函数名称    :img_disp 

  304. * 功能描述    :显示图形 

  305. * 参数        :  参数名称:    输入/输出?  类型      描述 

  306. *  

  307. * 返回值      : 

  308. * 作者        : 

  309. * 创建日期    :2006-12-19 

  310. * 全局变量    : 

  311. * 全局静态变量: 

  312. * 局部静态变量: 

  313. *----------------------------------------修改历史------------------------------------------ 

  314. * 当前版本    :              修改人:                  修改日期: 

  315. * 修改说明    : 

  316. ******************************************************************************************/  

  317. void Display_Img(unsigned char const *img)  

  318. {  

  319.     unsigned char i,j;  

  320.     for(j=0;j<32;j++)  

  321.     {  

  322.         for(i=0;i<8;i++)  

  323.         {  

  324.         Write_Char(comm,0x34);  

  325.         Delaynms(10);  

  326.         Write_Char(comm,y+j);  

  327.         Delaynms(10);  

  328.         Write_Char(comm,x1+i);  

  329.         Delaynms(10);  

  330.         Write_Char(comm,0x30);  

  331.         Delaynms(10);  

  332.         Write_Char(dat,img[j*16+i*2]);  

  333.         Delaynms(10);  

  334.         Write_Char(dat,img[j*16+i*2+1]);  

  335.         Delaynms(10);  

  336.         }  

  337.     }  

  338.     for(j=32;j<64;j++)  

  339.     {  

  340.         for(i=0;i<8;i++)  

  341.         {  

  342.         Write_Char(comm,0x34);  

  343.         Delaynms(10);  

  344.         Write_Char(comm,y+j-32);  

  345.         Delaynms(10);  

  346.         Write_Char(comm,x2+i);  

  347.         Delaynms(10);  

  348.         Write_Char(comm,0x30);  

  349.         Delaynms(10);  

  350.         Write_Char(dat,img[j*16+i*2]);  

  351.         Delaynms(10);  

  352.         Write_Char(dat,img[j*16+i*2+1]);  

  353.         Delaynms(10);  

  354.         }  

  355.     }  

  356.     Delaynms(10);  

  357.     Write_Char(comm,0x36);  

  358. }  


关键字:pic  测试程序 引用地址:pic的第一个测试程序

上一篇:PIC16F1937之定时器
下一篇:PIC16F877A PICC AD转换程序

推荐阅读最新更新时间:2024-03-16 15:29

PIC单片机入门_PICC的指向RAM的指针
问题: 将30h,31h,32h单元中最大的数放入40h。 利用指向RAM的指针进行编程如下: span style= font-size:18px; #include pic.h static volatile unsigned char add1 @0x30; static volatile unsigned char add2 @0x31; static volatile unsigned char add3 @0x32; static volatile unsigned char add @0x40; main() //绝对地址定位 { add1=0x51; add2=0x5; add3=0x6
[单片机]
PIC18F87J72设计的单相电能检测技术
本文介绍了PIC18F87J72主要特性,方框图,电能检测PICtail™ Plus子板主要特性以及子板电路图。Microchip 公司的PIC18F87J72 是高性能MCU,采用nanoWatt技术,具有两路24位模拟前端(AFE),LCD驱动器。每路的SINAD为-90dB,THD为-101dBc,SFDR为103dB,低漂移内部基准电压(12 ppm/°C),可编程数据速率到64ksps,增益高达32V/V,目标应用在电表,功率测量和监视,手提仪表和医疗监视。 PIC18F87J72目标应用: • Energy Metering • Power Measurement and Monitoring • Portabl
[模拟电子]
<font color='red'>PIC</font>18F87J72设计的单相电能检测技术
使用PIC单片机开发的被动红外传感器模块的报警器
  在本文中,单片机开发工程师们分享了一个使用PIC单片机开发的被动红外(PIR)传感器模块的报警器。在这个方案中,我们使用PIC12F635单片机进行开发,持续监控传感器模块的输出,并在其激活时打开蜂鸣器。   一、被动红外(PIR)报警器方案的原理   某些半导体材料具有暴露于热红外辐射时会产生表面电荷的特性。这种现象称为热电。被动红外(PIR)传感器模块的工作原理相同。人体以红外线辐射的形式辐射热量,最大约为9.4微米。人体的存在会导致热释电传感器感应到的周围环境的IR轮廓发生突然变化。PIR传感器模块在板上具有仪表电路,该仪表电路将该信号放大到适当的电压电平以指示运动的检测。   PIR传感器需要大约10到60秒的
[单片机]
使用<font color='red'>PIC</font>单片机开发的被动红外传感器模块的报警器
PIC单片机之I2C总线
大家好,通过前一期的学习,我们已经对ICD2 仿真烧写器和增强型PIC 实验板的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管、继电器、蜂鸣器、按键、数码管、RS232 串口、步进电机、温度传感器等资源,体会到了学习板的易用性与易学性,看了前几期实例,当你实验成功后一定很兴奋,很有成就感吧!现在我们就趁热打铁,再向上跨一步,一起来学习一下I2C 总线的工作原理及使用方法,这样我们可以将一些我们要保存的数据存储到I2C总线的非易失存储器中,实现断电保持的功能,比如:你设置了一个密码,但不至于这个设备断过电以后就要重新设置过,我们可以将密码数据写在非易失存储器里面,还有如汽车的量程表的读数是不断累计的,可以通过不断访
[单片机]
<font color='red'>PIC</font>单片机之I2C总线
用MPLAB X IDE v5.00给PIC单片机新建工程
1.安装好MPLAB X IDE v5.00后,编译器的界面如下: 2.新建文件:File - New Project 3.“Microchip嵌入式”- “独立项目”- “下一步” 4.这里选择16位的单片机,以PIC32MM032GPL028为例。选择好后点击“NEXT”. 5.选择下载工具,在ST单片机中相当于是JLNK,STLINK等下载工具,这里选择的是PICkit3,然后点击 NEXT . 6. 选择32位,XC32为编译器,在此之前,需要安装xc32编译器,然后在MPLAB X IED中添加该编译器,具体方法是在Tool- Options- Embedded中添加XC32安装根目录下的Bi
[单片机]
用MPLAB X IDE v5.00给<font color='red'>PIC</font>单片机新建工程
51单片机BMP280气压和温度值测试程序
单片机源程序如下: #include bmp280.h unsigned short xdata dig_t1,dig_p1; //注意数据类型 signed short xdata dig_t2,dig_t3,dig_p2,dig_p3,dig_p4,dig_p5,dig_p6,dig_p7,dig_p8,dig_p9; long signed int xdata bmp280_ut,bmp280_up; long signed int xdata t_fine; void bmpreaddata()
[单片机]
数字电位器X9241与PIC单片机的接口及程序设计
1 X9241概述   X9241是XICOR公司生产的、把4个E2POT数字电位器集成在单片的CMOS集成电路上的一种数字电位器。它包含4个电阻阵列,每个阵列包含63个电阻单元,在每个单元之间和2个端点之间都有被滑动单元访问的抽头点。滑动单元在阵列中的位置由用户通过2线串行总线接口控制。每个电阻阵列与1个滑动端计数寄存器(WCR)和4个8位数据寄存器联系在一起。这4个数据寄存器可由用户直接写入和读出。WCR的内容控制滑动端在电阻阵列中的位置,其功能框图如图1所示。 2 X9241工作原理   X9241支持双向总线的定向规约,是一个从属器件。它的高4位地址为0101(器件类型辨识符),低4位地址由A3~A0输入端状态决定。
[单片机]
数字电位器X9241与<font color='red'>PIC</font>单片机的接口及程序设计
PIC16SCM设置不同IO功耗端口状态的影响
最近做的PIC低功耗微控制器,因此,要设置不同的IO端口状态有关电源的情况测试,在系列万用表的方法来测量电流,供应链管理IO港是在地狱,无头整个系统驱动器。的是PIC16F690单片机。 思路例如以下:系统上电后初始化全部的IO,然后进入调用系统函数SLEEP();进入休眠状态。 1. A、B、Cport所有为输入上拉:休眠后耗电500uA左右。 2. A、B、Cport所有为输入下拉:休眠后耗电500uA左右。 3. A、B、Cport所有为输出上拉:休眠后耗电2200uA左右。 4. A、B、Cport所有为输出下拉:休眠后耗电 1uA。反正万用表直流2mA 档示数为零。我没有更精密的測量工具了,所以详细多少n
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved