鱼C论坛

 找回密码
 立即注册
查看: 3281|回复: 4

[技术交流] mega16 pc串口通信,lcd显示

[复制链接]
发表于 2012-7-8 10:11:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 sky! 于 2012-7-8 10:21 编辑

avr mega16实现上位机异步串口通信..因为我最终要实现控制wifi模块.所以很多规则定义的很奇葩.....
初步实现了串口数据头的识别和显示..下一步就可以用来控制wifi模块了... 20120708103.jpg QQ截图20120708102819.jpg

  1. #include"new_5.h"
  2. #include"new_lcd.h"
  3. #include"new_uart.h"[hide]new_lcd.h
  4. #include"new_5.h"
  5. #define CS_0 PORTC&=~(1<<PC0)
  6. #define CS_1 PORTC|=(1<<PC0)
  7. #define SID_0 PORTC&=~(1<<PC1)
  8. #define SID_1 PORTC|=(1<<PC1)
  9. #define SCLK_0 PORTC&=~(1<<PC2)
  10. #define SCLK_1 PORTC|=(1<<PC2)
  11. #define PSB_0 PORTC&=~(1<<PC3)
  12. #define PSB_1 PORTC|=(1<<PC3)
  13. #define RESET_0 PORTC&=~(1<<PC4)
  14. #define RESET_1 PORTC|=(1<<PC4)
  15. void write(unsigned char start,unsigned char ddata);
  16. void sendbyte(unsigned char bbyte);
  17. void delaynms(unsigned int di);
  18. void lcdinit(void);
  19. /*******************************************/
  20. void lcdinit(void)
  21. {
  22. delaynms(10);
  23. PSB_0;
  24. RESET_0;
  25. delaynms(1);
  26. RESET_1;
  27. CS_1;
  28. write(0,0x30);
  29. write(0,0x0c);
  30. write(0,0x01);
  31. }

  32. void write(uchar start,uchar ddata)
  33. {
  34. uchar start_data,Hdata,Ldata;
  35. if(!start) start_data=0xf8;
  36. else start_data=0xfa;

  37. Hdata=ddata&0xf0;//取高四位
  38. Ldata=(ddata<<4)&0xf0;//取低四位
  39. sendbyte(start_data);//发送起始信号
  40. delaynms(5);//延时是必须的
  41. sendbyte(Hdata);
  42. delaynms(1);//延时是必须的
  43. sendbyte(Ldata);
  44. delaynms(1);//延时是必须的
  45. }
  46. void sendbyte(uchar bbyte)
  47. {
  48. uchar i;
  49. for(i=0;i<8;i++)
  50. {
  51.   if(bbyte&0x80)
  52.   {
  53.    SID_1;
  54.   }
  55.   else
  56.   {
  57.    SID_0;
  58.   }
  59.   SCLK_1;
  60.   asm("nop");
  61.   asm("nop");
  62.   asm("nop");
  63.   asm("nop");
  64.   //cli
  65.   SCLK_0;
  66.   bbyte<<=1;
  67. }
  68. }

  69. void delaynms(uint di)
  70. {
  71. uchar j;
  72. while(di--)
  73. {
  74.   for(j=0;j<1576;j++)          //1ms基准延时程序
  75.   {
  76.    ;
  77.   }
  78. }  
  79. }

  80. void lcdtest(void)
  81. {
  82. unsigned char i,j;
  83. for(i=0;i<32;i++)
  84. {
  85.   write(0,0x80+i);//write(0,0x80);
  86.   for(j=0;j<16;j++) write(1,0xff);
  87. }
  88. }
  89. /******************************************/

  90. new_uart.h

  91. #include"new_5.h"
  92. #define fosc 11059200
  93. #define baud 115200
  94. char _charget;
  95. void uart_init()
  96. {
  97.         UCSRB=0x00;
  98.         UCSRA=0x00;
  99.         UCSRC=(1<<UCSZ1)|(1<<UCSZ0);//8bit,1停止位,无奇偶校验
  100.         UBRRL=(fosc/16/(baud+1))%256;
  101.         UBRRH=(fosc/16/(baud+1))/256;
  102.         UCSRB=(1<<RXEN)|(1<<TXEN)|BIT(RXCIE);//接收使能,发送使能,接收完成中断使能        
  103.         SREG|=0x80;//全局中断使能
  104. }
  105. void putchar(char c)
  106. {
  107.         while(!(UCSRA&(1<<UDRE)));//检测数据存储器是否为空
  108.         UDR=c;
  109. }
  110. /*uchar getchar()
  111. {
  112.         while(!(UCSRA&(1<<RXC)));//检查接收是否结束
  113.         return UDR;
  114. }*/
  115. void puts(char *s)
  116. {
  117.         while(*s)
  118.         {
  119.                 putchar(*s);
  120.                 s++;
  121.         }        
  122. }
  123. new_5.h
  124. #ifndef _x_new_
  125. #define _x_new_
  126. #include<iom16v.h>
  127. #include<macros.h>
  128. #define uchar unsigned char
  129. #define uint unsigned int
  130. #endif[/hide]

  131. char uart_flag;
  132. char recv_str[50];
  133. uchar uart_i=0;
  134. void main()
  135. {
  136.         
  137.         PORTC=0xff;
  138.         DDRC=0xff;
  139.         lcdinit();
  140.         write(0,0x80);
  141.         uart_init();
  142.         puts("HELLO");
  143.         puts("test ok.");
  144.         while(1)
  145.         {
  146.                 if(uart_flag)
  147.                 {                        
  148.                         UCSRB&=(~BIT(RXEN));
  149.                         if((recv_str[0]=='O')&&(recv_str[1]=='K'))
  150.                         {
  151.                                 
  152.                         }
  153.                         else if((recv_str[0]=='E')&&(recv_str[1]=='R')&&(recv_str[2]=='R'))
  154.                         {
  155.                                 write(1,'

  156. );
  157.                                 putchar('

  158. );/*test*/
  159.                                 recv_str[0]=0x00;
  160.                         }
  161.                         else
  162.                         {
  163.                                 uchar i=0;
  164.                                 while(recv_str[i])
  165.                                 {
  166.                                         write(1,recv_str[i]);
  167.                                         putchar(recv_str[i]);/*test*/
  168.                                         i++;
  169.                                 }
  170.                         }
  171.                         UCSRB|=BIT(RXEN);
  172.                         uart_flag=0;
  173.                 }
  174.         }
  175. }
  176. #pragma interrupt_handler getchar:12
  177. void getchar()
  178. {
  179.         _charget=UDR;
  180.         
  181.         if(_charget=='+')
  182.         {
  183.                 uart_i=0;               
  184.         }
  185.         else if(_charget==0x0d)
  186.         {
  187.                 recv_str[uart_i]=0x00;
  188.                 uart_flag=1;
  189.         }
  190.         else
  191.         {
  192.                 recv_str[uart_i++]=_charget;
  193.         }
  194.         
  195.         
  196. }
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-8 16:38:53 | 显示全部楼层
{:1_1:}支持一下单片机源码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-8 18:49:12 | 显示全部楼层
好东西                                               
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-16 23:42:34 | 显示全部楼层
帮顶一下,期待完整作品。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-16 16:15:26 | 显示全部楼层
无回帖,不论坛,这才是人道。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-20 01:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表