单片机国旗自动升降系统仿真及程序

发布者:keiss2018最新更新时间:2019-10-15 来源: 51hei关键字:单片机  国旗自动升降系统  proteus仿真 手机看文章 扫描二维码
随时随地手机看文章

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;          //得到按键值 

                        }

                }                        

[1] [2]
关键字:单片机  国旗自动升降系统  proteus仿真 引用地址:单片机国旗自动升降系统仿真及程序

上一篇:51单片机I2C详解与程序源码
下一篇:51单片机按键控制舵机

推荐阅读最新更新时间:2024-11-13 12:56

ATmega 16单片机I/O相关的寄存器(一)
1.特殊功能寄存器SFIOR ADTS2 ADTS1 ADTS0 --- ACME PUD PSR2 PSR10 位2 PUD为上拉电阻禁止位 置位时即使DDRXN和PORTXN配置为使能上拉电阻,I/O端口的上拉电阻也会被禁止。 2.端口A数据寄存器PORTA PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0 3.端口A方向寄存器DDRA DDA7 DDA6 DDA5 DDA4 DDA3 DDA2 DDA1 DDA0 4.端口A输入引脚PINA PINA7 PINA6 PINA5 PINA4 PINA3 PINA2 PINA1 PINA0 5.端口B数
[单片机]
第20章 单片机开发常用工具的使用
工欲善其事必先利其器,我们做单片机开发的时候,不管是调试电路还是调试程序,都需要借助一些辅助工具来帮助查找和定位问题,从而帮助我们顺利解决问题。没有任何辅助工具的单片机项目开发很可能就是无法完成的任务,不过好在实际上我们总是有很多种工具可用的。本章就要介绍一些最常用的单片机项目开发辅助工具,学习他们的使用方法,让它们协助我们进行项目的开发和调试。 20.1 万用表 20.1.1 什么是万用表 万用表,也称作多用表、复用表等,是电子工程师最基本也最不可或缺的测量工具。它的基本功能包括:测量交直流电压、交直流电流、电阻阻值,检测二极管极性,测试电路通断等。有些高档一点的还会包含电容容值测量、三极管测试、脉冲频率测量等。万用表大体可分
[单片机]
第20章 <font color='red'>单片机</font>开发常用工具的使用
AVR单片机外部中断C程序框架
Avr mega16a 单片机在studio4 开发环境中外部中断C程序框架如下: #include avr/io.h //头文件. #include avr/interrupt.h //中断头文件; typedef unsigned char uint8; //习惯宏定义数据类型语法.应用时只需写入数据类型: // uint8 s=0; typedef unsigned int uint16; //习惯宏定义数据类型语法.应用时只需写入数据类型: // uint16 i=0; Int main() //主函数; { MCUCR=0Xnn: //中断模式触发寄存器,用来设置外部
[单片机]
扫地机器人哪家强?有MCU就是不一样
在今年4月,家庭服务机器人领导品牌科沃斯首次为扫地机器人注入了MCU概念,并首发带MCU系统的扫地机器人叮叮!此概念一经提出,各家扫地机纷纷开始效仿,一时间,MCU作为一个高端且漂亮的标签被贴上了各种品牌各种型号的扫地机! 当然,作为普通消费者的我们,什么是 MCU不重要,关键还在于MCU系统操控下的扫地机器人到底能给我们带来什么!    MCU的中文名称为"微控制单元",又称"单片微型计算机",把它挪到扫地机行业,即为极速处理芯片+智能运算+动力电机的控制系统,简单来讲,当这个广泛应用于航天等高科技领域的"MCU智能操控系统"被应用到扫地机行业,那么产品的整体性能都会有很大的提升。好比一台拥有英特尔芯的电脑显然比拥
[单片机]
[单片机框架][bsp层][nrf51822][nrf51422][nrf51802][bsp_uart] UART配置和使用
Universal Asynchronous Receiver/Transmitter (UART) The Universal Asynchronous Receiver/Transmitter offers fast, full-duplex, asynchronous serial communication with built-in flow control (CTS, RTS) support in hardware up to 1 Mbps baud. Parity checking is supported. The GPIOs used for each UART interface line can be
[单片机]
51单片机实现独立按键控制LED灯
3-1独立按键控制LED亮灭 本段代码主要使用了if...else...语句实现按下按下灯亮,松开按键时灯灭 #include REGX51.H void main() { while(1) { if(P3_1==0&&P3_0==0) { P2_0=0; } else { P2_0=1; } } } 3-2独立按键控制LED状态 首先使用较为灵活的延时函数生成代码,进行修改后如下 void Delay(unsigned int xms) { unsigned char i, j; while(xms) { i = 2; j = 2
[单片机]
单片机DIY小型电压表
这款电路简单制作容易的STC12C2052AD单片机0-9.9V电压表,电路简单,元件少,容易制作,PCB板为单面板,下面是制作好的实物。文后附有原理图、源程序等资料。 单片机源程序如下: #include STC12C2052AD.H //单片机头文件 #include intrins.h //51基本运算(包括_nop_空函数) #define uchar unsigned char #define uint unsigned int sbit temp=P1^7; sbit LED3=P3^0; //C sbit LED0=P1^4; // 小数点后一位 sbit LED1=P1^3;
[单片机]
单片机构成的智能仪表特点?软硬件是怎样配置的?
用单片机构成的智能仪表有什么特点? 用单片机构成的智能仪表是最典型的单片机应用系统,具有典型的硬件电路和软件结构,有条件实现标准化硬件和模块化软件。 智能仪表的软硬件是怎样配置的? 智能仪表的硬件电路除了基本的扩展部分之外,一般都配有采集电路、显示器、按键、打印机等。软件有采集、采集控制、数据处理、显示、打印等。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved