Proteus8的LED显示

    科技2025-02-17  11

    基于Keil的LED显示

    一、问题描述二、过程三、总结

    一、问题描述

    安装并熟悉Proteus 电路仿真软件,完成一个51程序设计和仿真。

    二、过程

    1、新建一个工程,选择51单片机。 2、在工程里面加入.c文件。

    3.加入代码。此代码主要是显示时间,有三个功能按键,控制时间的加减,整体的时间是从零点零时零分开始的。(代码借鉴网上)

    #include<reg52.h> #define uchar unsigned char #define uint unsigned int #define datasend P0 sbit lcden=P3^4;//LCD使能键 sbit lcdrs=P3^5; //LCD数据/指令 (HL)选择端 sbit s1=P1^0;//定义功能按键 sbit s2=P1^1;//定义时分秒+1按键 sbit s3=P1^2;//定义时分秒-1按键 sbit knock=P2^0; uchar mytable0[]="Hello"; uchar mytable1[]="Good moring"; uchar code line0[]="2020-4-25";//初始化 uchar code line1[]="AM00:00:00"; uchar code month0[]={31,28,31,30,31,30,31,31,30,31,30,31}; //平年月 uchar code month1[]={31,29,31,30,31,30,31,31,30,31,30,31}; //闰年月 uchar count,hour,minute,second,year=1,month=1,date=1; uchar s1num;//定义功能键按下次数变量 void delay_ms(int ms) {int i,j; for(i=ms;i>0;i--) for(j=0;j<110;j++); } void delay(unsigned int z)//延时子函数z*1ms {unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_com(unsigned char c) //写命令子函数 lcden=0; datasend=c;//低电平选择为写指令 delay(5);//参考时序图 lcden=1;//开使能 delay(5);//读取指令 lcden=0;//关闭使能 } void write_data(unsigned char d) //写数据子函数 { lcdrs=1; //高电平选择为写数据 datasend=d;//把数据写入P0口 delay(5);//参考时序图 lcden=1;//开使能 delay(5);//读取数据 lcden=0;//关闭使能 } void write_hms(uchar add,uchar dat) //时分秒写函数add:输入位置设置变量ba:输入时分秒数据 { uchar sw,gw;//定义十位、个位变量 sw=dat/10; gw=dat%10; write_com(0x80+0x40+add); //从第二行开始 write_data(0x30+sw);// write_data(0x30+gw);// } void Time() interrupt 1//¶¨Ê±Æ÷0ÖжÏ×Ó³ÌÐò { TH0=(65536-50000)/256; TL0=(65536- 50000)%256; count++; } void initialize()//LCD初始化函数 { uchar num ; lcden=0; write_com(0x38); //设置16*2显示,5*7点阵显示,8位数据接口 write_com(0x0c); write_com(0x06); write_com(0x01); //清屏指令每次显示下一屏内容时,必须清屏 write_com(0x80+0x10);//第一行,前头空5格显示 for(num=0;num<11;num++)//显示6个字符 { write_data(mytable0[num]); delay(10); } write_com(0x80+0x50);//第二行,从第一格开始显示 for(num=0;num<16;num++)//显示16个字符 { write_data(mytable1[num]); delay(10); } for(num=0;num<16;num++) { write_com(0x1c); //高电平移动字符低电平移动光标 delay(300); } delay(1000); write_com(0x01);//清屏指令每次显示下一屏内容时,必须清屏 write_com(0x80);//第一行顶格显示 for(num=0;num<12;num++) //初始化第一行 { write_data(line0[num]); delay(10); } write_com(0x80+0x40);//第二行顶格显示 for(num=0;num<10;num++)//初始化第二行显示 {write_data(line1[num]); delay(10); } TMOD=0x01;//定时器中断初值设置 TH0=(65536-50000)/256; TL0=(65536-0000)/960256; EA=1; ET0=1; TR0=1; } void main() { initialize();//初始化 while(1) { keyscan();//按键扫描 if(count==20)//定时1s运行模块 {count=0; //时分秒数据处理 gethms(); } } }

    4、打开proteus8,如图连接 5、点击51单片机,将生成的.hex文件加入,然后点击确定。 6、开始仿真

    三、总结

    在这个MKD5的使用中,没有C51的选项,然后经过了百度之后,下载了C51的软件,但是最后还是没有成功的编译出.hex文件。

    Processed: 0.012, SQL: 8