基于飞思卡尔的数字时钟(编辑修改稿)内容摘要:

能 : SCI 接收中断处理函数 ,接收 3 个字节数据作为基准时分秒的值 ,放入 // time[02] //参 数 : 无 //返 回 : 无 //说 明 : 调用了 SCIReN 函数 //* interrupt void isrSCIre(void) { uint8 temp。 DisableInterrupt()。 //禁止总中断 temp=SCIReN(1, 6,time)。 //接收 6 个字节 ,放入 time 数组 EnableInterrupt()。 //开放总中断 } //未定义的中断处理函数 ,本函数不能删除 interrupt void isrDummy(void) { } //中断处理子程序类型定义 typedef void(*ISR_func_t)(void)。 //中断矢量表,如果需要定义其它中断函数,请修改下表中的相应项目 const ISR_func_t ISR_vectors[] @0xFFCC = { isrDummy, // 0xFFCC //RTI (periodic interrupt) vector isrDummy, // 0xFFCE //IIC vector isrDummy, // 0xFFD0 //analog to digital conversion vector isrDummy, // 0xFFD2 //keyboard vector isrDummy, // 0xFFD4 //SCI2 transmit vector isrDummy, // 0xFFD6 //SCI2 receive vector isrDummy, // 0xFFD8 //SCI2 error vector isrDummy, // 0xFFDA //SCI1 transmit vector isrSCIre, // 0xFFDC //SCI1 receive vector isrDummy, // 0xFFDE //SCI1 error vector isrDummy, // 0xFFE0 //SPI vector isrDummy, // 0xFFE2 //TPM2 overflow vector 12 isrDummy, // 0xFFE4 //TPM2 channel 1 vector isrDummy, // 0xFFE6 //TPM2 channel 0 vector isrT1Out, // 0xFFE8 //TPM1 overflow vector isrDummy, // 0xFFEA //TPM1 channel 5 vector isrDummy, // 0xFFEC //TPM1 channel 4 vector isrDummy, // 0xFFEE //TPM1 channel 3 vector isrDummy, // 0xFFF0 //TPM1 channel 2 vector isrDummy, // 0xFFF2 //TPM1 channel 1 vector isrDummy, // 0xFFF4 //TPM1 channel 0 vector isrDummy, // 0xFFF6 //ICG vector isrDummy, // 0xFFF8 //low voltage detect vector isrDummy, // 0xFFFA //IRQ pin vector isrDummy // 0xFFFC //SWI vector // RESET defined in }。 LCD 子程序 () //* // 文件名 : // 说 明 : LCD 驱动 //* include //该头文件包含寄存器及相关位定义 //* //函数名 : LCDinit //功 能 : 初始化 LCD(HD44780),设置显示方式 ,输入方式 ,并清屏 //参 数 : 无 //返 回 : 无 //说 明 : 调用了 LCDmand 函数 //* void LCDinit(void) { uint16 i。 //定义数据口 (PTA07)为输出 LCDdataD = 0b11111111。 // |||||||| // |||||||+PTA0 // ||||||+PTA1 // |||||+PTA2 // ||||+PTA3 // |||+PTA4 // ||+PTA5 // |+PTA6 // +PTA7 //定义控制口 (PTC4,PTC6)为输出 LCDctrlD1 |=(1LcdRS)。 13 LCDctrlD1 |=(1LcdRW)。 LCDctrl1 amp。 =~(1LcdRS)。 //RS、 R/W=00,写指令 LCDctrl1 amp。 =~(1LcdRW)。 //定义控制口 (PTF6)为输出 LCDctrlD2 |=(1LcdE)。 LCDctrl2 |=(1LcdE)。 //E=1 //1 功能设置 LCDmand(0b00111000)。 //5*7 点阵模式 , 2 行显示 ,8 位数据总线 // ||| // ||+设置点阵模式, 05*7 点阵, 15*10 点阵 // |+设置显示行数, 12 行显示, 01 行显示 // +设置数据接口位数, 18 位数据总线, 04 位数据总线 //2 显示开关控制 LCDmand(0b00001000)。 // 不闪烁 , 关光标显示 ,关显示 // ||| // ||+闪烁控制, 0不闪烁, 1闪烁 // |+光标控制, 0关光标, 1开光标 // +显示控制, 0关显示, 1开显示 //3 清屏 // 清 DD RAM 内容 ,光标回原位 ,清 AC LCDmand(0b00000001)。 // 等待清屏完毕 ,时间 for(i = 0。 i 4000。 i++) asm(NOP)。 //4 输入方式设置 LCDmand(0b00000110)。 // 显示不移动 ,光标左移 (A = 1), 数据读写操作后 ,AC 自动增 1 // || // |+0显示不移动 ,1显示移动 // +0AC 自动减 1, 1AC 自动增 1 //5 光标或画面移位设置 LCDmand(0b00010100)。 //光标右移一个字符位 ,AC 自动加 1 //6 显示开关控制 LCDmand(0b00001100)。 //不闪烁 , 关光标显示 ,开显示 // ||| // ||+闪烁控制, 1闪烁, 0不闪烁 // |+光 标控制, 1开光标, 0关光标 // +显示控制, 1开显示, 0关显示 } //* //函数名 : LCDmand //功 能 : 执行给定的 LCD 命令 ,并延时 //参 数 : cmd:待执行的命令 //返 回 : 无 14 //说 明 : 无 //* void LCDmand(uint8 cmd) { uint16 i。 //1 等待 40us for(i = 0。 i 1000。 i++) asm(NOP)。 //2 数据送到 LCD 的数据线上 LCDdata = cmd。 //3 给出 E 信号的下降沿 ,使数据写入 LCD LCDctrl2 |=(1LcdE)。 asm(NOP)。 asm(NOP)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。