基于msp430f149和ds1302的12864时钟设计内容摘要:

mp) { flag=1。 _BIC_SR_IRQ(LPM2_bits)。 } } pragma vector=PORT1_VECTOR __interrupt void port1(void) { P1IFGamp。 =~BIT3。 keydownflag=1。 _DINT()。 //关闭总中断 _BIC_SR_IRQ(LPM2_bits)。 } pragma vector=TIMERA0_VECTOR __interrupt void time_A0(void) { if(acflag1amp。 amp。 hour==achour1amp。 amp。 minute==acminute1) P2OUTamp。 =~BIT1。 if(acflag2amp。 amp。 hour==achour2amp。 amp。 minute==acminute2) P2OUTamp。 =~BIT2。 P6DIR|=BIT2。 //蜂鸣器端口设为输出模式 BUZ_ON。 } pragma vector=TIMERA1_VECTOR __interrupt void time_A1(void) { if(acflag1amp。 amp。 hour==achour1amp。 amp。 minute==acminute1) P2OUT|=BIT1。 if(acflag2amp。 amp。 hour==achour2amp。 amp。 minute==acminute2) P2OUT|=BIT2。 BUZ_OFF。 P6DIRamp。 =~BIT2。 //蜂鸣器端口设为输出模式 TACCTL1amp。 =~CCIFG。 } 文件二 define CPU_F ((double)8000000) define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/)) define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/)) /*************红外接收端口定义 **************/ define HW_I P1DIR amp。 =~BIT3 define HW_O P1DIR |= BIT3 define HW_L P1OUT amp。 =~BIT3 define HW_H P1OUT |= BIT3 define HW_Q (P1IN amp。 BIT3) define BUZ_OFF P6OUT|=BIT2 define BUZ_ON P6OUTamp。 =~BIT2 unsigned char temp。 unsigned char second,minute,hour,day,month,year,week。 unsigned char achour1,acminute1,achour2,acminute2。 unsigned char flag=0。 unsigned int temperature。 unsigned char setflag=0。 //状态标志,通过改变此标志进入不同的功能画面 unsigned char key_value。 //存放键值 unsigned char week_table[7][4]={{SUN},{MON},{TUE},{WED},{THU},{FRI},{SAT}}。 unsigned char accontrol[2][4]={{OFF},{ ON}}。 uchar table_lcd[]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70}。 // 液晶 显 示 数字 对 应ASIIC unsigned char *dat2={Tem}。 unsigned char set_table_1[]={next ok back }。 unsigned char set_table_2[]={ok back }。 unsigned char set_table_4[]={ 时间设置 }。 unsigned char set_table_5[]={ TIME: : * }。 unsigned char set_table_6[]={ DAT: / / }。 unsigned char set_table_7[]={ :}。 /*时间设置下的变量 */ unsigned char table_time[5]={1,2,3,0,6}。 unsigned char table_dat[6]={1,2,0,1,0,1}。 unsigned char table_ac1[4]={0,0,0,0}。 unsigned char table_ac2[4]={0,0,0,0}。 unsigned char move=0。 //接收用户输入的数据时用来指向数码的下一位 unsigned char zxflag=0。 //在设置页面下屏幕可以显示两行数据,此标志用来控制修改哪一行 //0:选择修改第一行数据 1:选择修改第二行数据 unsigned char lastplay=0。 //用来控制是否显示基本元素,一般切换一个页面,只需要第一次把 //一些 基本元素显示一次,下次进入只需要刷新数据 unsigned char keydownflag=0。 //有键按下标志 0:无键按下, 1:有键按下 unsigned char acflag1=0。 //闹钟 1 开关标志 0:关闭 , 1:开启 unsigned char acflag2=0。 //闹钟 2 开关标志 0:关闭 , 1:开启 文件三 define LCDRS0 P5OUTamp。 =~BIT5 define LCDRS1 P5OUT|=BIT5 define LCDRW0 P5OUTamp。 =~BIT6 define LCDRW1 P5OUT|=BIT6 define LCDEC0 P5OUTamp。 =~BIT7 define LCDEC1 P5OUT|=BIT7 define LCDPSB0 P5OUTamp。 =~BIT0 define LCDPSB1 P5OUT|=BIT0 define LCDRST0 P5OUTamp。 =~BIT1 define LCDRST1 P5OUT|=BIT1 define LCDDATIN P4DIR=0x00 define LCDDATOUT P4DIR=0xff。 void LCD_INIT(void)。 //液晶初始化函数声明 void LCD_WRITE_str(unsigned char add,unsigned char *p)。 //显示字符串函数声明 unsigned char LCD_BUSY(void)。 //液晶忙检测函数声明 void WRITE_LCD_COM(unsigned char )。 //液晶写指令函数声明 void WRITE_LCD_DATA(unsigned char dat)。 //液晶写数据函数声明 uchar READ_LCD_DATA(void)。 //液晶读数据函数声明 void LCD_CLEAR(void)。 //绘图模式下清屏函数声明 void WRITE_LCD_pho_up(const unsigned char *pho)。 //显示图片函数声明(上半屏) void WRITE_LCD_pho_down(const unsigned char *pho)。 //显示图片函数声明(下半屏) void WRITE_LCD_pho_up2(const unsigned char *pho)。 //显示自定义格式文字函数声明(上半屏) void WRITE_LCD_pho_down2(const unsigned char *pho)。 //显示自定义格式文字函数声明(下半屏) void WRITE_LCD_point(uchar x,uchar y)。 //任意位置打点函数声明 void WRITE_LCD_line(uchar x1,uchar y1,uchar x2,uchar y2)。 //任意两点间画线函数声明 void WRITE_LCD_pho3(unsigned char bit,unsigned char digit)。 //显示 16*32 的字符 /**************任意两点间画线函数 **************/ void WRITE_LCD_line(uchar x1,uchar y1,uchar x2,uchar y2) { int dx。 int dy。 unsigned char x。 unsigned char y。 int e。 unsigned char temp。 if(x1x2)//交换坐标 保证 x1 始终是起点 { temp=x1。 x1=x2。 x2=temp。 temp=y1。 y1=y2。 y2=temp。 } dx=x2x1。 //X 轴的坐标增量 dy=y2y1。 //Y 轴的坐标增量 x=x1。 y=y1。 if(dy==0)//斜率为 0 { while(x1=x2) {WRITE_LCD_point(x1,y1)。 x1++。 } } else if(dy0) { if(dydx) { e=dx。 for(temp=0。 tempdx。 temp++) { WRITE_LCD_point(x,y)。 x++。 e=e+2*dy。 if(e0) { y++。 e=e2*dx。 } } } if(dydx) { e=dy。 for(temp=0。 tempdy。 temp++) { WRITE_LCD_point(x,y)。 y++。 e=e+2*dx。 if(e0) { x++。 e=e2*dy。 } } } } else if(dy0) { dy=dy。 if(dydx) { e=dx。 for(temp=0。 tempdx。 temp++) { WRITE_LCD_point(x,y)。 x++。 e=e+2*dy。 if(e0) { y。 e=e2*dx。 } } } else { e=dy。 for(temp=0。 tempdy。 temp++) { WRITE_LCD_point(x,y)。 y。 e=e+2*dx。 if(e0) { x++。 e=e2*dy。 } } } } } /***********打点函数 *************/ void WRITE_LCD_point(uchar x,uchar y) { uchar x_byte,x_bit。 uchar y_byte,y_bit。 uchar temph,templ。 xamp。 =0x7f。 yamp。 =0x3f。 x_byte=x/16。 x_bit=xamp。 0x0f。 y_byte=y/32。 y_bit=y%32。 //参考资料上此处是 y_bit=yamp。 0x3f。 不过经过测试下半屏的点无法显示 WRITE_LCD_COM(0x34)。 while(LCD_BUSY())。 WRITE_LCD_COM(0x80+y_bit)。 while(LCD_BUSY())。 WRITE_LCD_COM(0x80+x_byte+y_byte*8)。 while(LCD_BUSY())。 READ_LCD_DATA()。 while(LCD_BUSY())。 temph=。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。