有没有人用佑华东华大学 单片机机

共找到 545 个相关产品
报价:0.45元
报价:0.40元
累计询盘:3次
报价:600.00元
报价:0.60元
报价:2.00元
累计询盘:1次
报价:0.10元
报价:0.50元
报价:0.55元
累计询盘:1次
报价:0.32元
报价:4.80元
累计询盘:1次
报价:0.50元
累计询盘:1次
报价:0.48元
累计询盘:1次
报价:1.50元
报价:0.55元
报价:2.80元
报价:0.75元
报价:3.00元
报价:3.50元
本页是马可波罗为您提供的佑华 单片机最新产品供应商、制造商,囊括了佑华 单片机产品的参数、型号、图片、价格等信息,是佑华 单片机产品的权威数据库。我们会尽全力为您提供准确、全面的信息!
您还可以找
按排行字母分类:有没有人能给讲讲中断【单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:135,185贴子:
有没有人能给讲讲中断收藏
这断完全不懂
为用户提供各种低成本,低功耗,低能耗,功能强的微控制器解决方案.恩智浦微控制器,高性能,设计新颖,性能稳定,价格超低,欲购从速,欢迎垂询!
interrupt4代表这是串口中断es=0关闭中断**uf是串口数据寄存器ri=0清除串口中断标志位具体看芯片中文手册寄存器那几页
解析gps数据的吧
void main(){unsigned char i = 0;Init_LCD1602();LCD1602_write_com(0x80);//指针设置LCD1602_write_word(&Welcome to use!&);Delay_ms(1000);Uart_Init();while(1){Scan_Key();if(Flag_GPS_OK == 1 && RX_Buffer[4] == 'G' && RX_Buffer[6] == ',' && RX_Buffer[13] == '.')//确定是否收到&GPGGA&这一帧数据{for( i = 0; i & 68 ; i++){Display_GPGGA_Buffer[i] = RX_Buffer[i];}Hour = (Display_GPGGA_Buffer[7]-0x30)*10+(Display_GPGGA_Buffer[8]-0x30)+8;//UTC时间转换到北京时间UTC+8//0x30为ASCII转换为数字if( Hour &= 24)//溢出{Hour %= 24;//获取当前HourFlag_OV = 1;//日期进位}else{Flag_OV = 0;}Min_High = Display_GPGGA_Buffer[9];Min_Low = Display_GPGGA_Buffer[10];Sec_High = Display_GPGGA_Buffer[11];Sec_Low = Display_GPGGA_Buffer[12];Flag_Calc_GPGGA_OK = 1;}if(Page == 0 && Flag_Calc_GPGGA_OK == 1){LED1 = ~LED1;Flag_Calc_GPGGA_OK = 0;LCD1602_write_com(0x80);//设置指针LCD1602_write_data(Hour/10+0x30);LCD1602_write_data(Hour%10+0x30);LCD1602_write_data(':');LCD1602_write_data(Min_High);LCD1602_write_data(Min_Low);LCD1602_write_data(':');LCD1602_write_data(Sec_High);LCD1602_write_data(Sec_Low);LCD1602_write_word(&
&);LCD1602_write_data(Display_GPGGA_Buffer[54]);LCD1602_write_data(Display_GPGGA_Buffer[55]);LCD1602_write_data(Display_GPGGA_Buffer[56]);LCD1602_write_data(Display_GPGGA_Buffer[57]);LCD1602_write_word(&m&);LCD1602_write_com(0x80+0x40);//设置指针LCD1602_write_data(Display_GPGGA_Buffer[28]);//N 或者 SLCD1602_write_data(Display_GPGGA_Buffer[17]);//纬度LCD1602_write_data(Display_GPGGA_Buffer[18]);//纬度LCD1602_write_data(0xdf);//度LCD1602_write_data(Display_GPGGA_Buffer[19]);//纬度LCD1602_write_data(Display_GPGGA_Buffer[20]);//纬度LCD1602_write_word(&'&);//秒LCD1602_write_data(Display_GPGGA_Buffer[42]);//E 或者 WLCD1602_write_data(Display_GPGGA_Buffer[30]);//经度LCD1602_write_data(Display_GPGGA_Buffer[31]);LCD1602_write_data(Display_GPGGA_Buffer[32]);LCD1602_write_data(0xdf);LCD1602_write_data(Display_GPGGA_Buffer[33]);LCD1602_write_data(Display_GPGGA_Buffer[34]);LCD1602_write_word(&'&);}if(Flag_GPS_OK == 1 && RX_Buffer[4] == 'M' && RX_Buffer[52] == ',' && RX_Buffer[59] == ',')//确定是否收到&GPRMC&这一帧数据{for( i = 0; i & 68 ; i++){Display_GPRMC_Buffer[i] = RX_Buffer[i];}Year_High = Display_GPRMC_Buffer[57];Year_Low = Display_GPRMC_Buffer[58];Month_High = Display_GPRMC_Buffer[55];Month_Low = Display_GPRMC_Buffer[56];Day_High = Display_GPRMC_Buffer[53];Day_Low = Display_GPRMC_Buffer[54];if(Flag_OV == 1)//有进位{UTCDate2LocalDate();//UTC日期转换为北京时间}Flag_Calc_GPRMC_OK = 1;}if(Page == 1 && Flag_Calc_GPRMC_OK == 1){LED1 = ~LED1;Flag_Calc_GPRMC_OK = 0;LCD1602_write_com(0x80);//设置指针LCD1602_write_word(&20&);LCD1602_write_data(Year_High);LCD1602_write_data(Year_Low);LCD1602_write_data('-');LCD1602_write_data(Month_High);LCD1602_write_data(Month_Low);LCD1602_write_data('-');LCD1602_write_data(Day_High);LCD1602_write_data(Day_Low);LCD1602_write_com(0x80+0x40);//设置指针LCD1602_write_word(&Speed:&);//显示内容LCD1602_write_data(Display_GPRMC_Buffer[46]);LCD1602_write_data(Display_GPRMC_Buffer[47]);LCD1602_write_data(Display_GPRMC_Buffer[48]);LCD1602_write_data(Display_GPRMC_Buffer[49]);LCD1602_write_data(Display_GPRMC_Buffer[50]);LCD1602_write_word(&m/s&);}}}//****************************************************//UTC日期与当地日期转换//****************************************************void UTCDate2LocalDate(void){Day = (Day_High - 0x30) * 10 + (Day_Low-0x30) + 1;//日
加一Month = (Month_High - 0x30) * 10 + (Month_Low - 0x30);Year = 2000 + (Year_High - 0x30) * 10 + (Year_Low - 0x30);MaxDay = GetMaxDay(Month,Year);//获取当月 天数 最大值if(Day & MaxDay)//溢出{Day = 1;Month += 1;if(Month & 12){Year+=1;}}Day_High = Day/10 + 0x30;//转换日期值为ASCIIDay_Low = Day%10 + 0x30;Month_High = Month/10 + 0x30;//转换月份值为ASCIIMonth_Low = Month%10 + 0x30;Year_High = Year%100/10 + 0x30;//转换年份值为ASCIIYear_Low = Year%10 + 0x30;}//****************************************************//获取当月日期最大值//****************************************************unsigned char GetMaxDay(unsigned char Month_Value,unsigned int Year_Value){unsigned char iDswitch(Month_Value){case 1:case 3:case 5:case 7:case 8:case 10:case 12:{iDays = 31;}case 2:{//2月份比较特殊,需要根据是不是闰年来判断当月是28天还29天iDays = IsLeapYear(Year_Value)?29:28;}case 4:case 6:case 9:case 11:{iDays = 30;}default :}return(iDays);}//****************************************************//闰年检测//****************************************************bit IsLeapYear(unsigned int uiYear){return (((uiYear%4)==0)&&((uiYear%100)!=0))||((uiYear%400)==0);}//****************************************************//按键扫描程序//****************************************************void Scan_Key(){if( KEY4 == 0 ) //按键1扫描{Delay_ms(10);//延时去抖if( KEY4 == 0 ){while(KEY4 == 0);//等待松手KEY_NUM = 3;Page = ~PLCD1602_write_com(0X01);//清屏}}}//****************************************************//MS延时函数(12M晶振下测试)//****************************************************void Delay_ms(unsigned int n){unsigned int
i,j;for(i=0;i&n;i++)for(j=0;j&123;j++);}
void Uart_Init()
{SCON = 0X50;
//UART方式1;8位UARTREN
//允许串行口接收数据PCON = 0x00;
//SMOD=0;波特率不加倍TMOD = 0x20;
//T1方式2,用于产生波特率TH1
//装初值TL1
= 0xFD;TR1
//启动定时器1EA
//打开全局中断控制ES
//打开串行口中断}void RECEIVE_DATA(void) interrupt 4 using 3
{ unsigned char temp = 0;ES=0;temp = ***UF;RI = 0;//LED1 = ~LED1;if(temp == '$'){RX_Count = 0;Flag_GPS_OK = 0;}RX_Buffer[RX_Count++] =if(RX_Count &= 59){RX_Count = 59;Flag_GPS_OK = 1;}ES=1; }这一段大概明白吧,但是细节处,数据到底是经过什么,传到单片机哪个口,还是有些不太清楚。
#include &LCD1602.h&//****************************************************//MS延时函数(12M晶振下测试)//****************************************************void LCD1602_delay_ms(unsigned int n){unsigned int
i,j;for(i=0;i&n;i++)for(j=0;j&123;j++);}//****************************************************//写指令//****************************************************void LCD1602_write_com(unsigned char com){LCD1602_RS = 0;LCD1602_delay_ms(1);LCD1602_EN = 1;LCD1602_PORT =LCD1602_delay_ms(1);LCD1602_EN = 0;}//****************************************************//写数据//****************************************************void LCD1602_write_data(unsigned char dat){LCD1602_RS = 1;LCD1602_delay_ms(1);LCD1602_PORT =LCD1602_EN = 1;LCD1602_delay_ms(1);LCD1602_EN = 0;}//****************************************************//连续写字符//****************************************************void LCD1602_write_word(unsigned char *s){while(*s&0){LCD1602_write_data(*s);s++;}}void Init_LCD1602(){LCD1602_EN = 0;LCD1602_RW = 0;//设置为写状态LCD1602_write_com(0x38);//显示模式设定LCD1602_write_com(0x0c);//开关显示、光标有无设置、光标闪烁设置LCD1602_write_com(0x06);//写一个字符后指针加一LCD1602_write_com(0x01);//清屏指令}
&一&主函数1.LCD初始化,然后设置指针为第一行,然后显示欢迎界面,延时,然后uart串口初始化,(中断,temp=**uf如果接收到temp=$那么RX_Count = 0;且标识Flag_GPS_OK = 0,然后是把temp数据送到RX_Buffer数组,并且标识Flag_GPS_OK = 1,关中断)然后while(1)循环。2.循环内,先是按键扫描程序,然后当标识Flag_GPS_OK 为1,并且RX_Buffer数据符合GPGGA时进入循环,确认收到GPGGA这一帧数据。然后Display_GPGGA_Buffer[i] = RX_Buffer[i],然后UTC时间转换到北京时间(如果时间溢出,就改一下,然后Flag_OV = 1,日期进位),然后赋值给分和秒,并且标识Flag_Calc_GPGGA_OK = 1。3.当page=0,并且Flag_Calc_GPGGA_OK=1时,标识Flag_Calc_GPGGA_OK=0,然后显示第一行,然后显示第二行。下一段GPRMC程序类似。
这是我想的
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 清华大学单片机 的文章

 

随机推荐