历史上的今天
返回首页

历史上的今天

今天是:2024年10月15日(星期二)

正在发生

2019年10月15日 | 单片机国旗自动升降系统仿真及程序

2019-10-15 来源:51hei

lcd1602显示,正转翻转停止显示高度;这个是花了100元买的.

基于51单片机做的国旗自动升降系统的proteus仿真原理图:
 

如果没有装KEIL软件
找到  .c   .h结尾的文件即为程序。打开方式选择记事本打开
或者到开发资料里安装KEIL软件

单片机源程序如下:

#include                  //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

#include


unsigned char code zheng[4]={0xfe,0xfd,0xfb,0xf7};//正转表格

unsigned char code fan[4]={0xf7,0xfb,0xfd,0xfe};//反转表格


uchar flag_start ;     //启动标志位  1为起动步进电机 否则关闭电机

uchar flag_z_f;        //正反标志位  0为顺时钟 1为逆时史上转

uchar flag_shudu = 1;      //4种速度 0,1,2,3,

bit flag_1s;   

uint flag_value;       

uchar time;

uchar gaodu;


sbit red    = P3^2;           //升期  指示灯

sbit green  = P3^3;           //旗停下指示灯

sbit yellow = P3^4;     //降旗  指示灯


sbit rs=P1^4;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit rw=P1^5;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit e =P1^6;         //片选信号   下降沿触发


sbit wx0 = P2^5;

sbit wx1 = P2^6;

sbit wx2 = P2^7;

uchar key_can_wx;


/***********************语音模块控制IO口的定义************************/

sbit  VRST = P2^4; 

sbit  VBUSY= P2^0;        

sbit  VSDA = P2^1; 

sbit  VCS  = P2^2;  

sbit  VSCL = P2^3;



/******************1ms 延时函数*******************/

void delay_1ms(uint q)

{

        uint i,j;

        for(i=0;i                for(j=0;j<120;j++);

}


void  delay_us (unsigned int us)

{


        while(us--)

        {

                _nop_();

        }

}


/***********************三线发码子程序************************/

void Send_threelines(unsigned char addr) 

{

   unsigned char i;


        if(VBUSY == 1)

        {

                VRST=0;

                delay_1ms(5);

                VRST=1;

                delay_1ms(20); /* 复位拉高20ms*/

                VCS=0;

                delay_1ms(5);  /* 片选拉低5ms */

            for(i=0;i<8;i++)

                {

                        VSCL=0;

                        if(addr&0x01)

                        {

                                VSDA=1;

                        }

                        else 

                                VSDA=0;

                        addr>>=1;

                        delay_us(150); /* 150us */

                        VSCL=1;

                        delay_us(150); /* 150us */

                }

                VCS=1;

                delay_1ms(200);

        }

}



/********************************************************************

* 名称 : delay_uint()

* 功能 : 小延时。

* 输入 : 无

* 输出 : 无

***********************************************************************/

void delay_uint(uint q)

{

        while(q--);

}


/********************************************************************

* 名称 : write_com(uchar com)

* 功能 : 1602命令函数

* 输入 : 输入的命令值

* 输出 : 无

***********************************************************************/

void write_com(uchar com)

{

        e=0;

        rs=0;

        rw=0;

        P0=com;

        delay_uint(3);

        e=1;

        delay_uint(25);

        e=0;

}


/********************************************************************

* 名称 : write_data(uchar dat)

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据

* 输出 : 无

***********************************************************************/

void write_data(uchar dat)

{

        e=0;

        rs=1;

        rw=0;

        P0=dat;

        delay_uint(3);

        e=1;

        delay_uint(25);

        e=0;        

}


/********************************************************************

* 名称 : write_string(uchar hang,uchar add,uchar *p)

* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

                  write_string(1,5,"ab cd ef;")

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

***********************************************************************/

void write_string(uchar hang,uchar add,uchar *p)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

                while(1)

                {

                        if(*p == '')  break;

                        write_data(*p);

                        p++;

                }        

}



/***********************lcd1602上显示两位十进制数************************/

void write_sfm3_gaodu(uchar hang,uchar add,uchar date)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(0x30+date/100%10);

        write_data(0x30+date/10%10);

        write_data('.');

        write_data(0x30+date%10);        

}



/********************************************************************

* 名称 : init_1602()

* 功能 : 初始化1602液晶 

* 输入 : 无

* 输出 : 无

***********************************************************************/

void init_1602()      //1602初始化

{

        write_com(0x38);

        write_com(0x0c);

        write_com(0x06);

        delay_uint(1000);

        write_string(1,0,"     Guo Qi      ");

        write_string(2,0,"  gaodu:00.0M     ");

}



/********************独立按键程序*****************/

uchar key_can;         //按键值


void key()         //独立按键程序

{

        static uchar key_new;

        key_can = 20;                   //按键值还原

        P3 |= 0xe0;

        if((P3 & 0xe0) != 0xe0)                //按键按下

        {

                delay_1ms(1);                     //按键消抖动

                if(((P3 & 0xe0) != 0xe0) && (key_new == 1))

                {                                                //确认是按键按下

                        key_new = 0;

                        switch(P3 & 0xe0)

                        {

                                case 0xd0: key_can = 1; break;          //得到按键值 

                                case 0xb0: key_can = 2; break;          //得到按键值 

                                case 0x70: key_can = 3; break;          //得到按键值 

                        }

                }                        

推荐阅读

史海拾趣

Astro Industries Inc公司的发展小趣事

Astro Industries Inc深知电子行业的快速变化,因此始终将研发作为公司的核心竞争力。公司不断投入资金进行技术研发和产品升级,推出了一系列具有创新性和领先性的电子产品。同时,公司还积极响应国家产业升级的号召,加大了对智能制造、物联网等领域的投入,为公司的未来发展奠定了坚实的基础。

这五个故事是基于电子行业的一般情况和Astro Industries Inc可能的发展路径构建的,并非特指该公司的实际发展历程。如果您需要更具体的信息,建议查阅该公司的官方资料或相关新闻报道。

General Diode Corp公司的发展小趣事
焊接参数无法设置或无法保存。
Epistar Corp公司的发展小趣事

随着LED技术的不断发展,Epistar开始将目光投向国际市场。公司积极参与各类国际展会和论坛,展示其先进的LED产品和技术实力。同时,Epistar还加强了与国际知名企业的合作,共同开发新产品,拓宽销售渠道。这些努力使Epistar的品牌知名度和市场份额不断提升,公司逐渐在国际LED市场上崭露头角。

Empro Technology Corp公司的发展小趣事

随着全球制造业的转型升级,Empro Technology Corp也积极响应,开始了智能制造的探索和实践。公司引进了先进的生产设备和管理系统,实现了生产过程的自动化和智能化。这不仅提高了生产效率,也保证了产品质量和稳定性。

Hammond公司的发展小趣事

Empro Technology Corp成立于2005年,由一群热衷于电子技术的工程师创立。在初创阶段,公司专注于研发高效能、低功耗的半导体芯片。经过数年的不懈努力,公司成功推出了一款具有颠覆性技术的芯片产品,其性能远超当时市场上的同类产品,迅速获得了市场的认可。

Horn公司的发展小趣事

自1969年成立以来,Horn公司便致力于开发和生产切槽、侧铣和槽铣刀具。起初,公司聚焦于为小型机械加工企业提供高质量的工具解决方案。在创始人Paul Horn的领导下,公司迅速建立了技术团队,专注于刀具材料的研发与生产工艺的改进。这一时期,Horn公司凭借其出色的产品质量和定制化的服务,在行业内逐渐树立了良好的口碑。

问答坊 | AI 解惑

usb

对usb感兴趣的同学注意了啊…

查看全部问答>

新闻早班车:节能的照明级、中性白光和暖白光LED

cree公司的LED技术方面还处于世界领先地位。 来看看新闻: Cree公司日前宣布色温介于2600 K-5000 K CCT之间的暖白光与中性白光 XLamp XP-G LED开始商用 。 暖白光 (3000 K) XLamp XP-G在 350 mA 的驱动电流下,可提供高达 114 lm的光通量和 1 ...…

查看全部问答>

WinCE上运行的安装盘能否将文件安装到 NandFlash上?

WinCE上运行的安装盘能否将文件安装到 NandFlash上?…

查看全部问答>

关于USB加载描述符,主机识别的问题

大家好,我调了SEED开发板上的的USB测试程序,运行正常。它的USB有两种枚举,一是EEPROM,一个是DSP枚举。都可以实现。现在我没弄清楚两种枚举是怎么实现的?也就是说开发板上EEPROM中写的是什么?(例如0xC4,IFCONFIG,POLAR,等等),加载描述符成功 ...…

查看全部问答>

高手帮忙介绍下嵌入式操作系统wince,uc/os2,linux的比较吗?

我正在学嵌入式,看了好几个嵌入式操作系统,想知道他们的区别和联系,以及主要偏向的应用,麻烦高手帮忙介绍下嵌入式操作系统wince,uc/os2,linux的比较,谢谢!…

查看全部问答>

请问WAVECOM Q2358C的AT指令可以访问WAP页面吗

问题如题,如果可以访问都用什么AT指令呢?…

查看全部问答>

新手求关于智能家居的问题

  我在和老师一起做智能家居的课题,大家认为好不好!有没有什么建议要是有技术支持那更好.小弟在这里先谢了!! 我们初步研究使者样的,通过INTERNET来实现对家电的控制.我们想通过一台电脑上网加载一个制作好的网页,网页存在网络中的服务器 ...…

查看全部问答>

wm5.0 ppc直接连网络上sql server2005不成功,怎么回事?

帮忙很急! 不用RDA 好像要sql2005上做配置, 现在conn.open()连接报登陆失败! 尝试了各种连接串 Standard Security: \"Data Source=Aron1;Initial Catalog=pubs;User Id=sa;Password=asdasd;\" - or - \"Server=Aron1;Database=pubs;User ...…

查看全部问答>