OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 362|回复: 11

跪求,求各位大神帮帮小女子 stm32的时钟输出转为asc码输出

[复制链接]

  离线 

1

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-4-17
在线时间
3 小时
发表于 2018-4-17 10:09:27 | 显示全部楼层 |阅读模式
10金钱
第一个程序
u8 RTC_Get(void)
{
        static u16 daycnt=0;
        u32 timecount=0;
        u32 temp=0;
        u16 temp1=0;          
        timecount=RTC->CNTH;//得到计数器中的值(秒钟数)
        timecount<<=16;
        timecount+=RTC->CNTL;                         


        temp=timecount/86400;   //得到天数(秒钟数对应的)
        if(daycnt!=temp)//超过一天了
        {          
                daycnt=temp;
                temp1=1970;        //从1970年开始
                while(temp>=365)
                {                                 
                        if(Is_Leap_Year(temp1))//是闰年
                        {
                                if(temp>=366)temp-=366;//闰年的秒钟数
                                else break;  
                        }
                        else temp-=365;          //平年
                        temp1++;  
                }   
                calendar.w_year=temp1;//得到年份
                temp1=0;
                while(temp>=28)//超过了一个月
                {
                        if(Is_Leap_Year(calendar.w_year)&&temp1==1)//当年是不是闰年/2月份
                        {
                                if(temp>=29)temp-=29;//闰年的秒钟数
                                else break;
                        }
                        else
                        {
                                if(temp>=mon_table[temp1])temp-=mon_table[temp1];//平年
                                else break;
                        }
                        temp1++;  
                }
                calendar.w_month=temp1+1;        //得到月份
                calendar.w_date=temp+1;          //得到日期
        }
        temp=timecount%86400;                     //得到秒钟数             
        calendar.hour=temp/3600;             //小时
        calendar.min=(temp%3600)/60;         //分钟       
        calendar.sec=(temp%3600)%60;         //秒钟
        calendar.week=RTC_Get_Week(calendar.w_year,calendar.w_month,calendar.w_date);//获取星期   
        return 0;
}         





第二个程序
void Paint_DrawCharAt(Paint* paint, int x, int y, char ascii_char, sFONT* font, int colored) {
    int i, j;
    unsigned int char_offset = (ascii_char - ' ') * font->Height * (font->Width / 8 + (font->Width % 8 ? 1 : 0));
    const unsigned char* ptr = &font->table[char_offset];

    for (j = 0; j < font->Height; j++) {
        for (i = 0; i < font->Width; i++) {
            if (*ptr & (0x80 >> (i % 8))) {
                Paint_DrawPixel(paint, x + i, y + j, colored);
            }
            if (i % 8 == 7) {
                ptr++;
            }
        }
        if (font->Width % 8 != 0) {
            ptr++;
        }



各位大神哥哥们,第一个程序是正点原子的rtc示例程序中得一小段程序,正常用正点原子的lcd屏可以直接输出时间,但我用的是一个电子墨水屏,要用第二个程序中得函数 paint_drawcharat()输出,老师说得把时钟的那些数转成asc码才能输出,但我怎么转啊,求帮助

最佳答案

查看完整内容[请看2#楼]

u8 AsciiData[20]; AsciiData[0]=calendar.w_year/1000%10+48; AsciiData[1]=calendar.w_year%1000/100+48; AsciiData[2]=calendar.w_year%100/10+48; AsciiData[3]=calendar.w_year%10+48; AsciiData[4]=calendar.w_month%100/10+48; AsciiData[5]=calendar.w_month%10+48; AsciiData[6]=calendar.w_date%100/10+48; AsciiData[7]=calendar.w_date%10+48; AsciiData[8]=calendar.hour%100/10+48; A ...
回复

使用道具 举报

  离线 

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-9-25
在线时间
38 小时
发表于 2018-4-17 10:09:28 | 显示全部楼层
u8 AsciiData[20];
  AsciiData[0]=calendar.w_year/1000%10+48;
  AsciiData[1]=calendar.w_year%1000/100+48;
  AsciiData[2]=calendar.w_year%100/10+48;
  AsciiData[3]=calendar.w_year%10+48;
  AsciiData[4]=calendar.w_month%100/10+48;
  AsciiData[5]=calendar.w_month%10+48;
  AsciiData[6]=calendar.w_date%100/10+48;
  AsciiData[7]=calendar.w_date%10+48;
  AsciiData[8]=calendar.hour%100/10+48;
  AsciiData[9]=calendar.hour%10+48;
  AsciiData[10]=calendar.min%100/10+48;
  AsciiData[11]=calendar.min%10+48;
  AsciiData[12]=calendar.sec%100/10+48;
  AsciiData[13]=calendar.sec%10+48;
AsciiData[14]=calendar.week%10+48;

这段转换也许是你要的。
回复

使用道具 举报

  离线 

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2016-6-6
在线时间
23 小时
发表于 2018-4-17 10:33:38 | 显示全部楼层
你可以建一个数组,一一对应
回复

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-4-17
在线时间
3 小时
 楼主| 发表于 2018-4-17 10:56:44 | 显示全部楼层
belle0206 发表于 2018-4-17 10:33
你可以建一个数组,一一对应

可以详细一点吗
回复

使用道具 举报

  离线 

11

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2013-8-4
在线时间
47 小时
发表于 2018-4-17 11:40:50 来自手机 | 显示全部楼层
正点原子公众号
楼上的意思是建立一个数组,里面是ASCII码,再使用查询法查询ASCII码
回复

使用道具 举报

  离线 

6

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2018-1-22
在线时间
59 小时
发表于 2018-4-17 12:24:03 | 显示全部楼层
table[char_offset]  应该就是他的ASCII库了,你需要把数字先拆成一个一个的,然后加个16试试
回复

使用道具 举报

  离线 

0

主题

363

帖子

0

精华

高级会员

Rank: 4

积分
878
金钱
878
注册时间
2018-2-7
在线时间
92 小时
发表于 2018-4-17 14:24:37 | 显示全部楼层
找个ASCII码表看看,数字和ASCII码的对应关系找出来一转换就行了。
回复

使用道具 举报

  离线 

18

主题

178

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2017-7-26
在线时间
90 小时
发表于 2018-4-17 15:01:34 | 显示全部楼层
本帖最后由 a3748622 于 2018-4-17 15:02 编辑

嘻嘻,帮帮妹纸。
你paint_drawcharat()输出的是什么?123456这些数字?如果是的话可以这样做。

char  ASCKBuff[10];

void HEXTOASCK2(u32 data)
{
          ASCKBuff[0] = data/10000%10+48;
          ASCKBuff[1] = data/1000%10+48;
          ASCKBuff[2] = data/100%10+48;
          ASCKBuff[3] = data/10%10+48;
          ASCKBuff[4] = data%10+48;
         ASCKBuff[5] = '\0';
}

这个子函数,比方你输入:1234,它会把数字1234转化为字符串“1234”
如果想要转换更多的数,加多几行代码就行了。
回复

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-4-17
在线时间
3 小时
 楼主| 发表于 2018-4-17 15:28:33 | 显示全部楼层
a3748622 发表于 2018-4-17 15:01
嘻嘻,帮帮妹纸。
你paint_drawcharat()输出的是什么?123456这些数字?如果是的话可以这样做。

我想用那个函数输出时间
年月日小时分钟秒和星期这种
回复

使用道具 举报

  离线 

18

主题

178

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2017-7-26
在线时间
90 小时
发表于 2018-4-17 17:31:04 | 显示全部楼层
pshh0420 发表于 2018-4-17 15:28
我想用那个函数输出时间
年月日小时分钟秒和星期这种

那是怎么的一个数嘛
是:2018041717303030这样的?
你需要转化的东西是什么都不知道的话帮不到你哦
回复

使用道具 举报

  离线 

18

主题

178

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2017-7-26
在线时间
90 小时
发表于 2018-4-17 17:46:22 | 显示全部楼层
huangyanga 发表于 2018-4-17 17:30
u8 AsciiData[20];
  AsciiData[0]=calendar.w_year/1000%10+48;
  AsciiData[1]=calendar.w_year%1000/1 ...

少了个字符串结束符啦,老铁
有点小粗心哦
回复

使用道具 举报

  离线 

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2016-6-6
在线时间
23 小时
发表于 2018-4-23 12:55:58 | 显示全部楼层

楼下说的对。建一个数组table[]={48,49,50,51,52,53,54,55,56,57};数组里ASCII码对应数字0到9.懂了?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

"原子哥”推荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-7-16 09:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */