打印

调试通过的模拟串口及打印机驱动程序

[复制链接]
4901|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 古道热肠 于 2011-4-3 23:37 编辑

因串口要运行Mon51进行仿真调试,故选一空闲IO模拟串口的TXD信号引脚,硬件为SST89E516,晶振为18.432,12时钟周期的单片机.
相关代码如下:
sbit TXD1 = P2^3; //定义模拟输出脚
//sbit RXD1 = P1^1;   //定义模拟输入脚
bdata unsigned char SBUF1;   //定义一个位操作变量
sbit SBUF1_bit0 = SBUF1^0;
sbit SBUF1_bit1 = SBUF1^1;
sbit SBUF1_bit2 = SBUF1^2;
sbit SBUF1_bit3 = SBUF1^3;
sbit SBUF1_bit4 = SBUF1^4;
sbit SBUF1_bit5 = SBUF1^5;
sbit SBUF1_bit6 = SBUF1^6;
sbit SBUF1_bit7 = SBUF1^7;
bit UART1_RI;
#if 1
void delay_bps()
{
unsigned char data uci;
  for (uci = 0; uci < 19;uci++);
} //波特率9600
/*
void delay_Halfbps()
{
unsigned char data uci;
//  for (uci = 0; uci < 6;uci++);  _nop_();_nop_();
  for (uci = 0; uci <50 ;uci++);  
} //波特率9600
*/
#endif

#if 0
void delay_bps()
{
unsigned char data uci;
  for (uci = 0; uci < 6*9+8;uci++);
} //波特率19200
void delay_Halfbps()
{
unsigned char data uci;
  for (uci = 0; uci <25 ;uci++);  
} //波特率19200
#endif
//unsigned char getchar2() //从缓冲区内读取一个字节数据
void putchar2(unsigned char input)    //向发送缓冲区内写入一个数据
{
    SBUF1 = input;
    TXD1 = 0;  //起始位
    delay_bps();   
    TXD1 = SBUF1_bit0;  //0
    delay_bps();   
    TXD1 = SBUF1_bit1;  //1
    delay_bps();   
    TXD1 = SBUF1_bit2;  //2
    delay_bps();   
    TXD1 = SBUF1_bit3;  //3
    delay_bps();   
    TXD1 = SBUF1_bit4;  //4
    delay_bps();   
    TXD1 = SBUF1_bit5;  //5
    delay_bps();   
    TXD1 = SBUF1_bit6;  //6
    delay_bps();   
    TXD1 = SBUF1_bit7;  //7
    delay_bps();   
    TXD1 = 1;       //停止位
    delay_bps();   
}
#define SendCharToPrint(x) putchar2(x)
void ChangePrintModeToChinese(void)
{
SendCharToPrint(0x1C);
SendCharToPrint(0x26);
}
void ChangePrintModeToEnglish(void)
{
SendCharToPrint(0x1C);
SendCharToPrint(0x2E);
}
void PrintFeedPaper(uchar ucLineCount)
{
SendCharToPrint(0x1B);
SendCharToPrint(0x4A);
SendCharToPrint(ucLineCount);
}
void PrintString(uchar *ucString)
{
uchar ucStringLen;
ucStringLen = strlen(ucString);
while(ucStringLen--)
{
  SendCharToPrint(*ucString++);
}
}
void TestPrint(void)
{
ChangePrintModeToChinese();
PrintString("2011年4月3日 21时20分50秒\n\r");
}


应用程序中用到的相关代码如下:
PrintString("----------------------------\n\r");
PrintString("  智能开关机记录仪启动\n\r");
Read_RTC_PCF8563(ucRTCBuff);
//将BCD码转换成16进制数据
for(ucCount=0; ucCount<7; ucCount++)
{
  ucTemp = ucRTCBuff[ucCount];
  ucRTCBuff[ucCount] = (ucTemp>>4)*10+(ucTemp&0x0F);
}
sprintf(ucTempBuff,"20%02d年%02d月%02d日 ",(uint)ucRTCBuff[6],(uint)ucRTCBuff[5],(uint)ucRTCBuff[3]);
PrintString(ucTempBuff);
sprintf(ucTempBuff,"%02d时%02d分%02d秒\n\r",(uint)ucRTCBuff[2],(uint)ucRTCBuff[1],(uint)ucRTCBuff[0]);
PrintString(ucTempBuff);
PrintString("----------------------------\n\r");
PrintFeedPaper(50);

效果图如下:


还有一段代码如下:
//打印当前记录
{
  uchar ucCount;
  uchar ucTemp;
  uchar xdata ucTempBuff[19];
  //将BCD码转换成16进制数据
  for(ucCount=0; ucCount<7; ucCount++)
  {
   ucTemp = ucRTCBuff[ucCount];
   ucRTCBuff[ucCount] = (ucTemp>>4)*10+(ucTemp&0x0F);
  }
  sprintf(ucTempBuff,"20%02d年%02d月%02d日 ",(uint)ucRTCBuff[6],(uint)ucRTCBuff[5],(uint)ucRTCBuff[3]);
  PrintString(ucTempBuff);
  sprintf(ucTempBuff,"%02d时%02d分%02d秒\n\r",(uint)ucRTCBuff[2],(uint)ucRTCBuff[1],(uint)ucRTCBuff[0]);
  PrintString(ucTempBuff);
  sprintf(ucTempBuff,"通道号:%02d 事件:",(uint)ucRecordNumber);
  PrintString(ucTempBuff);
  if(ucActionType == 0)
  {
   PrintString("开机\n\r");
  }
  else
  {
   PrintString("关机\n\r");
  }
  PrintString("***********************\n\r");
  PrintFeedPaper(15);

}
效果图如下:


相关帖子

沙发
古道热肠|  楼主 | 2011-4-3 23:41 | 只看该作者
良好的程序分格应熟练使用字符串进行各种功能的实现,
sprintf和<string.h>中的相关函数值得好好学,好好用.

使用特权

评论回复
板凳
原野之狼| | 2011-4-4 01:29 | 只看该作者
呵呵 记得原来用打印机打印曲线 还是蛮好玩的

使用特权

评论回复
地板
hotpower| | 2011-4-4 18:41 | 只看该作者
晕,老顽固,什么年代了,还模拟串口???

使用特权

评论回复
5
古道热肠|  楼主 | 2011-4-4 20:36 | 只看该作者
呵呵,谢谢版主送裤子.

使用特权

评论回复
6
古道热肠|  楼主 | 2011-4-4 20:40 | 只看该作者
晕,老顽固,什么年代了,还模拟串口???
hotpower 发表于 2011-4-4 18:41

任何年代,"坚苦朴素"的作风不能丢."花小钱办实事"的技巧不能废.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:以VS1003B和山景SOC芯片为背景,倾心研制数字化语音录放产品. 排忧邮箱:xg_2004_sy@126.com 得意之作是做了个AVR高压编程器,用起来爽歪歪, 串口MP3录放音模块,全面进入数字录放音时代

284

主题

6411

帖子

16

粉丝