📄 clock.c.bak
字号:
/* 7段译码表 */
/* dp g f e d c b a */
/* 1 : 1 1 1 1 1 0 0 1 0xF9 */
/* 2 : 1 0 1 0 0 1 0 0 0xA4 */
/* 3 : 1 0 1 1 0 0 0 0 0xB0 */
/* 4 : 1 0 0 1 1 0 0 1 0x99 */
/* 5 : 1 0 0 1 0 0 1 0 0x92 */
/* 6 : 1 0 0 0 0 0 1 0 0x82 */
/* 7 : 1 1 1 1 1 0 0 0 0xF8 */
/* 8 : 1 0 0 0 0 0 0 0 0x80 */
/* 9 : 1 0 0 1 0 0 0 0 0x90 */
/* 0 : 1 1 0 0 0 0 0 0 0xC0 */
#include "2407A.h"
void initial(); /*初始化子程序 */
void timer1initial(); /*定时器1初始化子程序 */
void SPIinitial(); /*PWM初始化子程序 */
unsigned char sec_h=0; /*时间变量高位*/
unsigned char sec_l=0; /*时间变量低位 */
unsigned int flag,tflag;
void inline disable()
{
asm(" SETC INTM"); /*禁止所有中断*/
}
void inline enable()
{
asm(" CLRC INTM"); /*开放所有中断 */
}
void initial()
{
asm(" SETC SXM"); /*抑制符号位扩展 */
asm(" SETC OVM"); /*根据遇到溢出的情况,累加器被设置为它的最大正值或负值 */
asm(" SETC CNF"); /*B0被设置为程序存储空间 */
*SCSR1=0X8FFE; /*clock=0.5fin;使能ADC、SCI、SPI、CAN、EVA、EVB模块*/
*WDCR=0X06f;
*WDKEY=0X5555;
*WDKEY=0XAAAA; /*不使能看门狗*/
*IMR=0X0002; /*允许INT2中断*/
*IFR=0XFFFF; /*清除全部中断标志*/
WSGR=0X00; /*禁止所有等待状态*/
*MCRB=0X003C; /*IOPC2~4端口设置为基本功能,SPI模块*/
/**PADATDIR=*PADATDIR|0X1C00; /*IOPC2~4设置为输出方式*/
}
void timer1initial()
{
*EVAIMRA=*EVAIMRA|0X0080; /*允许定时器1的周期中断 */
*EVAIFRA=*EVAIFRA|0X0FFFF; /*清除定时器1周期中断标志*/
*T1CON=0X170C; /*Timer1为连续增计数模式,预分频值为128,使用内部时钟*/
*T1PER=0X9896; /*Timer1的周期寄存器的值根据1s延时和预分频值确定,改状态*/
*T1CNT=0X0000; /*Timer1的计数器清零*/
}
void SPIinitial()
{
*SPICCR=0X000F; /*在SPICLK的下降沿发送数据,数据长度为16位*/
*SPICTL=0X000E; /*主动工作模式,正常的SPI时钟方式,允许发送,SPI中断BU 使能*/
*SPIBRR=0X0004; /*波特率设为1Mbps*/
*SPICCR=*SPICCR|0X0080; /*SPI退出复位状态*/
}
unsigned char decode(unsigned char sec_data)
{
unsigned char undecoded,decoded;
undecoded=sec_data;
switch(undecoded)
{
case 0x01:
decoded=0xF9;
break;
case 0x02:
decoded=0xA4;
break;
case 0x03:
decoded=0xB0;
break;
case 0x04:
decoded=0x99;
break;
case 0x05:
decoded=0x92;
break;
case 0x06:
decoded=0x82;
break;
case 0x07:
decoded=0xF8;
break;
case 0x08:
decoded=0x80;
break;
case 0x09:
decoded=0x90;
break;
/* case 0x00:
decoded=0xC0;
break;*/
default:decoded=0xC0;
}
return decoded;
}
void display()
{
unsigned char dataout_h,dataout_l,temp;
dataout_h=decode(sec_h);
dataout_l=decode(sec_l);
temp=dataout_h; /*要显示的数据高位写入SPI的发送缓冲寄存器*/
temp=temp<<8;
temp=temp|dataout_l;
*SPITXBUF=temp;
while(1)
{
flag=*SPISTS&0X40;
if(flag==0X40) /*如果SPI的中断标志为1,说明SPI发送成功,停止等待*/
{
break;
}
}
*SPIRXBUF=*SPIRXBUF; /*虚读SPIRXBUF寄存器,以清除SPI中断标志*/
}
void interrupt T1_INT()
{
tflag=*EVAIFRA&0X0080;
if(tflag==0X0080)
{
*T1CNT=0X00; /*Timer1计数器清零*/
*EVAIFRA=*EVAIFRA|0X0080; /*清除Timer1周期中断标志 */
display();
sec_l++;
if(sec_l>9)
{
sec_l=0;
sec_h++;
if(sec_h>9) sec_h=0;
}
enable(); /*开中断*/
return; /*中断返回 */
}
else
{
enable();
return;
}
}
void main()
{
disable();
initial(); /*系统初始化*/
timer1initial(); /*Timer1初始化*/
SPIinitial(); /*SPI初始化*/
enable();
*T1CON=*T1CON|0X0040; /*启动Timer1*/
while(1)
{
asm(" nop");
}
}
void interrupt nothing( )
{
enable();
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -