独闷闷网

 找回密码
 立即注册
搜索
查看: 6855|回复: 6
打印 上一主题 下一主题
收起左侧

[原创] 51单片机有必要用操作系统吗?

[复制链接]
跳转到指定楼层
楼主
发表于 2014-8-27 23:41:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 jianhong_wu 于 2015-3-3 11:13 编辑

坚鸿解答:大部分的单片机项目,如果没有复杂的彩屏界面,如果没有复杂的文件系统,我觉得最好的程序框架就是switch状态机裸奔框架,也就是我在《从业将近十年!手把手教你单片机程序框架》中分享的程序框架,这种框架简单高效,条理清晰,我这些年来所做的单片机项目都是基于这种程序框架。


乐于分享,勇于质疑!
沙发
发表于 2014-8-28 09:17:06 | 只看该作者
鸿哥在51上有用过操作系统吗
乐于分享,勇于质疑!
板凳
发表于 2014-8-28 09:17:09 | 只看该作者
鸿哥在51上有用过操作系统吗
乐于分享,勇于质疑!
地板
 楼主| 发表于 2014-8-28 11:20:42 | 只看该作者
又一个暑假 发表于 2014-8-28 09:17
鸿哥在51上有用过操作系统吗

我从来没有用过。
乐于分享,勇于质疑!
5#
发表于 2014-8-29 12:18:47 | 只看该作者
鸿哥,学习了你的编程思维,一直在用,但昨天做电子钟的时候,发现就有点故障了,请鸿哥帮忙考虑下解决方案,谢谢!程序大概如下:
        while(1){//主循环
1                miao = ds1302_read(0x81);           //ds1302读取函数
2                fen = ds1302_read(0x83);             //ds1302读取函数
3                shi = ds1302_read(0x85);             //ds1302读取函数
4                zhou = ds1302_read(0x8b);         //ds1302读取函数
5                shi_10 = (shi>>4)*10 + shi%16;  //BCD转换成10进制
6                fen_10 = (fen>>4)*10 + fen%16;//BCD转换成10进制
7                miao_10 = (miao>>4)*10 + miao%16;        //BCD转换成10进制
               
8                lcd19264_draw_hand(31,32,24,miao_10,6,1);//液晶模拟时钟的    秒针点亮
9                lcd19264_draw_hand(31,32,18,fen_10,6,1);//液晶模拟时钟的      分针点亮
10                lcd19264_draw_hand(31,32,10,shi_10,12,1);//液晶模拟时钟的     时针点亮

11                temperature_process();//ds18b20读取函数,并且将数据处理成百位,个位,十位,小数位

                lcd19264_display_number_16x32(2,11,miao/16);//液晶对应位置上显示时分秒
                lcd19264_display_number_16x32(2,12,miao%16);//液晶对应位置上显示时分秒
                lcd19264_display_number_16x32(2,8,fen/16);//液晶对应位置上显示时分秒
                lcd19264_display_number_16x32(2,9,fen%16);//液晶对应位置上显示时分秒
                lcd19264_display_number_16x32(2,5,shi/16);//液晶对应位置上显示时分秒
                lcd19264_display_number_16x32(2,6,shi%16);//液晶对应位置上显示时分秒


                lcd19264_display_number_8x16(4,11,zhou%16);////液晶对应位置上显示周


12                lcd19264_draw_hand(31,32,24,miao_10,6,0);        ////液晶模拟时钟   秒针熄灭
13                lcd19264_draw_hand(31,32,18,fen_10,6,0);///液晶模拟时钟       分针熄灭
14                lcd19264_draw_hand(31,32,10,shi_10,12,0);////液晶模拟时钟     时针熄灭
        }

程序执行时均能工作,但发现液晶模拟时钟上的时、分、秒的指针很明显的闪动。个人分析是因为1-7行程序执行时间太长,导致12--14执行完指针熄灭后没有及时点亮指针所致,之前按照鸿哥思想将1--7条读取程序放到定时器中断中,根据switch切换,每次进中断分别读取1--7条,也就是说进7次中断,可以读完1--7条的数据,定时时间2ms--50ms均试过,均发现液晶显示乱码,个人估计是中断干扰了液晶的驱动程序,本人实在不知如何改动,请鸿哥指教,谢谢……
乐于分享,勇于质疑!
6#
 楼主| 发表于 2014-8-29 12:46:40 | 只看该作者
101MHz 发表于 2014-8-29 12:18
鸿哥,学习了你的编程思维,一直在用,但昨天做电子钟的时候,发现就有点故障了,请鸿哥帮忙考虑下解决方案 ...

液晶屏不要时刻处于刷新显示的状态中,当有数据要更新的时候再刷新,平时没数据刷新的时候不要更新。
你添加一个变量ucUpdate,平时有数据需要更新显示的时候,就把ucUpdate=1;

if(ucUpdate==1)  //更新
{
    ucUpdate=0; //及时清零标志,让它只能更新显示一次。

   以下添加你的显示代码。
    lcd19264_display_number_16x32   
}
乐于分享,勇于质疑!
7#
发表于 2014-8-29 16:19:06 | 只看该作者
jianhong_wu 发表于 2014-8-29 12:46
液晶屏不要时刻处于刷新显示的状态中,当有数据要更新的时候再刷新,平时没数据刷新的时候不要更新。
你 ...

鸿哥V5!!!!多谢多谢~~~
乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-11-29 18:46 , Processed in 0.217079 second(s), 16 queries .

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