基于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=。基于msp430f149和ds1302的12864时钟设计
相关推荐
给水要求还有一定难度。 但国外 EDI技术已经应用在大型火力发电厂、核电厂,而且运行的出水水质、稳定性都能满足生产运行的需要。 因而,作为一种环保 、清洁、可以连续再生运行的纯水处理技术, EDI代表了水处理技术未来的一种发展趋势,具有广阔的应用前景。 主要设备的组成及控制方式 系统的设备组成如表。 表 设备组成 设备名称 数量 增压泵 3 高压泵 2 多介质过滤器 1 活性炭过滤器 1
运行。 MCGS嵌入版组态软件分为人机界面组态和控制流程组态两部分,用户可以根据实际情况裁减所需内容。 其中人机界面组态与通用版类似,可以组态出动画窗口、曲线、报表,并可以设置用户权限,安全级别等等。 控制流程组态是嵌入式组态系统特有的功能,主要用于组态实现各种控制流程和控制逻辑。 系统提供了丰富的功能模块和控制逻辑,来帮助用户快速的实现各种控制功能,是构成用户应用系统实时控制的核心。
计过程 设计电路图,并根据所设计电路图 和单片机工作原理,为实现电子钟附带日历及复位功能,在书上查找资料程序,并自己进行编程。 经反复调试 和修改,最终编译通过, proteus 仿真成功, LCD 显示器能根据 程序要求来显示时间并可通过开关进行显示位的选择和时间的加减,而且按复位键可以回到初始设置,即程序中设计的 2020518 WED 23:59:20。 将所编程序置入单片机内
制作文字 建立文字框:打开工具箱,在“工具箱”内的“标签”按钮 ,如图: 鼠标 的光标变为“十字”形,在窗口顶部拖拽鼠标,拉出一个一定大小的矩形。 输入文字 :建立矩形框后,光标在其中闪烁,可直接输入 “液体混合装置控制的模拟”文字。 按回车或在窗口任何位置用鼠标点击一下,文字输入完成,如果需要改变文字的内容,先选中文字标签,按回车或空格,即可进行修改。 设置文字框颜色 :选中文字框
B 39。 539。 ,0AH,0DH,39。 $39。 DB 39。 639。 ,0AH,0DH,39。 $39。 16 DB 39。 739。 ,0AH,0DH,39。 $39。 DB 39。 839。 ,0AH,0DH,39。 $39。 DB 39。 939。 ,0AH,0DH,39。 $39。 DB 39。 1039。 ,0AH,0DH,39。 $39。 DB 39。 1139。
if(!Reset) begin H_L_f3=1。 end else if(Count == Delay10ms) begin H_L_f3=Key_in。 end end always @(posedge Clk or negedge Reset ) begin if(!Reset) begin H_L_f4=1。 end else begin H_L_f4=H_L_f3。 end end