📄 main.c
字号:
/*
* Copyright (c) 2004,成都港顺科技发展有限公司
* All rights reserved.
*
* 编 译 器:uVision 2;Keil:C Compiler:7.20;Assembler:7.10
* 工程名称:POS-Test.UV2
* 文件名称:Main.C
************************************************************************ ********************************
* 摘 要:系统初始化 清除内存 数据保护 字符串转换函数定义 以及“销售”和“系统功能”函数入口
* ********************************************************************************************************
* 单 片 机:uPSD3254
* 当前版本:0.4
* 作 者:李凯
* 完成日期:2004-12-7 14:45
*
* 存储器地址空间分配:
* CSIOP : PAGE:ALL 256bytes 0x0200-0x02FF
* SRAM : PAGE:ALL 31.25Kbytes 0x300-0x7FFF
* BOOT0 : PAGE:ALL 32Kbytes 0x0000-0x1FFF Program Space
* BOOT1 : PAGE:ALL 32Kbytes 0x2000-0x3FFF Program Space
* BOOT2 : PAGE:ALL 32Kbytes 0x4000-0x5FFF Program Space
* BOOT3 : PAGE:ALL 32Kbytes 0x6000-0x7FFF Program Space
* Flash0 : PAGE:0 32Kbytes 0x8000-0xFFFF Program Space
* Flash1 : PAGE:1 32Kbytes 0x8000-0xFFFF Program Space
* Flash2 : PAGE:2 32Kbytes 0x8000-0xFFFF Program Space
* Flash3 : PAGE:3 32Kbytes 0x8000-0xFFFF Program Space
* Flash4 : PAGE:4 32Kbytes 0x8000-0xFFFF Program Space
* Flash5 : PAGE:5 32Kbytes 0x8000-0xFFFF Program Space
* Flash6 : PAGE:6 32Kbytes 0x8000-0xFFFF Program Space
* Flash7 : PAGE:7 32Kbytes 0x8000-0xFFFF Program Space
*/
#include "Main.h"
PSD_REGS PSD_REG _at_ PSD_REG_ADDR;
/*
void reset (void)
{//软件自复位(中断中不能使用)
((void (code *) (void)) 0x0000) ();
}
*/
//void IntSet(uint x)
//{//INT0:bit0 UART2:bit1 Timer0:bit3 I2C:bit4 INT1:bit5 DDC:bit6 Timer1:bit7 USB:bit8 UART1:bit9 Timer2+EXF2:bit10
// EA=1;
// EX0=1;
// if(x & 0x02)IEA |= 0x10;
// else IEA &= 0xEF;
// if(x & 0x04)ET0=1;
// else ET0=0;
// if(x & 0x08)IEA |= 0x02;
// else IEA &= 0xFD;
// if(x & 0x10)EX1=1;
// else EX1=0;
// if(x & 0x20)IEA |= 0x80;
// else IEA &= 0x7F;
// if(x & 0x40)ET1=1;
// else ET1=0;
// if(x & 0x80)IEA |= 0x01;
// else IEA &= 0xFE;
// if(x & 0x100)ES=1;
// else ES=0;
// if(x & 0x200)ET2=1;
// else ET2=0;
//}
//mode::bit0=0:按整数转换为字符串;bit0=1:按浮点数转换为字符串 SwitchInt SwitchFloat
//mode::bit1=0:如dat值为0不转换为字符‘0’;bit1=1:如dat值为0则要转换 SwitchZero
//mode::bit2=0:按浮点数转换时如果小数点后全为0,不转换;bit2=1:要转换 SwitchDot
//mode::bit3=0:高位的0不转换;bit3=1:高位的0转换为字符‘ ’(空格) SwitchSpace
//mode::bit7=0:转换后的字符串加结束符'\0';bit7=1:加空格' ' SwitchEnd
void NumToStr(ulong dat, uchar *str, uchar mode)
{//ulong最大为:4294967295,不超过10位,加小数点和结束符,不超过12位
uchar i=0,j=0,x;
ulong k,e=1000000000;
if(dat==0)
{
if(mode & SwitchZero)
{
str[0]='0';
x=1;
}
else x=0;
if(mode & SwitchEnd)
str[x]=' ';
else
str[x]=0;
return;
}
k=dat;
while(1)
{
x = dat/e;
if(mode & SwitchSpace)
{
str[i] = x + '0';
i++;
}
else
{
if(x!=0 || i!=0)//i!=0是为了保证当最高位之后有的位是0也能够被正常转换
{
str[i] = x + '0';
i++;
}
}
if(e==1)break;
dat = dat%e;
e /= 10;
}
if(mode & SwitchFloat)
{//按浮点数转换
if(k>=100)
{
if((k%100)!=0 || (mode & SwitchDot))
{
str[i]=str[i-1];
str[i-1]=str[i-2];
str[i-2]='.';
if(mode & SwitchEnd)
str[i+1]=' ';
else
str[i+1]=0;
}
else
{
if((mode & SwitchDot)==0)
{
if(mode & SwitchEnd)
{
str[i]=str[i-1]=0;
str[i-2]=' ';
}
else
str[i]=str[i-1]=str[i-2]=0;
}
}
}
else
{
if(k>9)
{
str[2]=str[0];
str[3]=str[1];
str[0]='0';
str[1]='.';
}
else
{
str[3]=str[0];
str[0]='0';
str[1]='.';
str[2]='0';
}
if(mode & SwitchEnd)
str[4]=' ';
else
str[4]=0;
}
}
else
{
if(mode & SwitchEnd)
str[i]=' ';
else
str[i]=0;
}
}
//mode::bit0=0:BCD数组全部为0不转换;bit0=1:要转换为字符'0'
//mode::bit1=0:
//mode::bit2=0:
//mode::bit3=0:
//mode::bit7=0:高位的零不转换;bit7=1:要转换为字符'0'
void BcdToStr(uchar len,uchar *bcd,uchar *str,uchar mode)
//void BcdToStr(uchar len,uchar *bcd,uchar *str)
{//是否考虑将0转换为空格
uchar i=0,j=0,k=0,f=0,x,first=0;//mode=0;
for(i=0;i<len;i++)
if(bcd[i]!=0)f=1;
if((mode&0x01)==0 && f==0)
{
str[0]=0;
return;
}
// if(bcd[i]==0 && (mode&0x01)==0)
// {
// if(mode & 0x80)str[0]=' ';
// else str[0]=0;
// return;
// }
x=mode&0x80;
for(i=0;i<len;i++)
{
k=bcd[i]>>4;
if(k!=0)first=1;
if(k!=0 || first==1 || x)
{
if(k > 9)
str[j]=k-10+'A';
else
str[j]=k+'0';
j++;
}
k=bcd[i]&0xf;
if(k!=0)first=1;
if(k!=0 || first==1 || x)
{
if(k > 9)
str[j]=k-10+'A';
else
str[j]=k+'0';
j++;
}
}
// if(mode & 0x80)str[j]=' ';
// else
str[j]=0;
}
void BcdToHex(uchar len,uchar *bcd,uchar *hex)
{//可以用
uchar i=0,j=0;
for(i=0;i<len;i++)
{
hex[j]=bcd[i]>>4;
j++;
hex[j]=bcd[i]&0xf;
j++;
}
return;
}
uchar Verdict(uchar *bcdtime)
{
uchar flag;
uchar i=0,Intime[8],day=0,month=0;
uint x=0,year=0;
BcdToHex(4,bcdtime,Intime);
year=Intime[0]*1000+Intime[1]*100+Intime[2]*10+Intime[3];//年
month=Intime[4]*10+Intime[5];//月
day=Intime[6]*10+Intime[7];//日
if(((year%4==0) && (year%100!=0)) || year%400==0) flag=1;//是润年
else flag=0;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if((day>=1)&&(day<=31))return 1;//月大
else return 0;
case 2:
if(flag)
{
if((day>=1)&&(day<=29)) return 1;
else return 0;
}
else
{
if((day>=1)&&(day<=28)) return 1;
else return 0;
}
case 4:
case 6:
case 9:
case 11:
if((day>=1)&&(day<=30))return 1;//月小
else
return 0;
default: return 0;
}
}
void SysIni()
{
IE=0;
IEA = 0;
DisableCom; //关串口
//DisableCs; //打印机中断信号
WDKEY=0x55; //Disable Watchdog
WDRST=0xFF;
RCAP2H = 0;
RCAP2L = 0;
TL1 = 0;
TH1 = 0;
PCON = 0;
P1SFS=0; //只有高4位有效
P3SFS=0; //只有高2位有效
P4SFS=0; //Set P4 as General i/o Port
PSD_REG.CONTROL_A=0; //sets the port A to MCU I/O Mode
PSD_REG.DRIVE_A = 0; //set port A Slew Rate
PSD_REG.DIRECTION_A &= 0xFB;//set port PA2 input
PSD_REG.CONTROL_B=0; //sets the port B to MCU I/O Mode
PSD_REG.DRIVE_B = 0; //set port B Slew Rate
PSD_REG.DIRECTION_B=0xFF; //set port B output
PSD_REG.DATAOUT_B = 0xFF;
PSD_REG.DRIVE_C=0;
PSD_REG.DIRECTION_C &= 0x7F;//0:InPUT 1:OUTPUT
PSD_REG.DIRECTION_D=0x06; //set Port D output
RxdNum=0;
RxdLen=0;
TxdNum=0;
TxdLen=0;
TR1=0;TR0=0;
IT0=0;
IP=0x01;
IPA=0;
IT0=1;
IT1=1;
EA = 1;
IEA = 1;
EX0=1;
EX1=0;
}
void SysFunction() //系统功能函数入口
{
uchar k=1,str[4];
// gyt4 tp;
while(1)
{
WindowsSet(6);
strcpy(&WinHint[0][1],"1.报表查询");
strcpy(&WinHint[1][1],"2.商品管理");
strcpy(&WinHint[2][1],"3.权限管理");
strcpy(&WinHint[3][1],"4.税务功能");
strcpy(&WinHint[4][1],"5.自检");
strcpy(&WinHint[5][1],"6.测试");
str[0]=K_TC;
str[1]=K_HJ;
str[2]=0;
k=Windows(k,0,str);
if(str[0]==K_TC)return;
switch(k)
{
case 1:
Report();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -