C语言源程序LCD.doc_第1页
C语言源程序LCD.doc_第2页
C语言源程序LCD.doc_第3页
C语言源程序LCD.doc_第4页
C语言源程序LCD.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言源程序/* 小波电子工作室 All rights reserved*/* 个人主页:/niejinbo */* 文 件 名: lcd_0712.c */* 功能概要: LCD液晶显示字符 */* MCU: STC89C52 晶振:11.0592Mhz */* 设 计 者: 聂金波 */* 完成日期: 2008-07-12 */* 当前版本: 0712_1 */* 改进说明: 暂无 */*头文件区*#include#include#include#include/*宏定义方便使用*#define uchar unsigned char#define uint unsigned int/*定义变量区*sbit dula=P26; /数码管段选sbit wela=P27; /数码管位选sbit lcden=P34; /LCD使能信号sbit lcdrs=P35; /LCD数据/命令选择信号uchar code tab_nie=Nie Jinbo;uchar code tab_index=;/*函数声明区*void lcd_dis(); /lcd显示函数void lcd_init(); /LCD初始化函数void write_com(uchar); /写命令函数void write_data(uchar); /写数据函数void delay(uint); /延时函数/*主函数开始*void main()lcd_dis();while(1); /*lcd显示函数开始*void lcd_dis()uchar n; lcd_init();write_com(1);write_com(0x80+4); /设置光标位置for(n=0;n9;n+)write_data(tab_nien);delay(2);write_com(0x80+0x40); / 设置光标位置for(n=0;n0;i-)for(j=110;j0;j-);实验原理51单片机的一个I/O口控制speaker发声,演奏老鼠爱大米。主要器件以及电路图单片机AT89C51,蜂鸣器speaker。C语言程序源码C语言的程序代码更好读一些,相比较前面两个汇编的蜂鸣器程序,这个程序比较好理解。/* 蜂鸣器-蜂鸣器奏乐-老鼠爱大米*/#include#define uint unsigned int#define uchar unsigned char#define ulong unsigned longsbit beep=P27; /蜂鸣器输出引脚uchar th0_f; /中断装载T0高8位uchar tl0_f; /T0低8位uchar code freq36*2= /音阶码表0xf7,0xd8, /440hz , 1 /00xf8,0x50, /466hz , 1# /10xf8,0xbc, /494hz , 2 /20xf9,0x26, /524hz , 2# /30xf9,0x85, /554hz , 3 /40xf9,0xe5, /588hz , 4 /50xfa,0x3d, /622hz , 4# /60xfa,0x92, /660hz , 5 /70xfa,0xdd, /698hz , 5# /80xfb,0x29, /740hz , 6 /90xfb,0x70, /784hz , 6# /100xfb,0xb0, /830hz , 7 /110xfb,0xef, /880hz , 1 /120xfc,0x29, /932hz , 1# /130xfc,0x62, /988hz , 2 /140xfc,0x95, /1046hz, 2# /150xfc,0xc7, /1108hz, 3 /160xfc,0xf5, /1174hz, 4 /170xfd,0x20, /1244hz, 4# /180xfd,0x4c, /1318hz, 5 /190xfd,0x72, /1396hz, 5# /200xfd,0x97, /1480hz, 6 /210xfd,0xbb, /1568hz, 6# /220xfd,0xdc, /1662hz, 7 /230xfd,0xfb, /1769hz, 1 /240xfe,0x18, /1864hz, 1# /250xfe,0x34, /1976hz, 2 /260xfe,0x4e, /2092hz, 2# /270xfe,0x67, /2218hz, 3 /280xfe,0x7d, /2350hz, 4 /290xfe,0x94, /2488hz, 4# /300xfe,0xa8, /2639hz, 5 /310xfe,0xbc, /2794hz, 5# /320xfe,0xcf, /2960hz, 6 /330xfe,0xe0, /3136hz, 6# /340xfe,0xf1, /3322hz, 7 /35;uchar code diaodata30= /音调代码0x10,0x0e,0x0c,0x10,0x0e,0x0c,0x10,0x0e,0x10,0x0c,0x10,0x15,0x13,0x10,0x13,0x15,0x15,0x13,0x15,0x13,0x10,0x0e,0x0c,0x0e,0x0e,0x10,0x0e,0x0c,0x0e,0x00;uchar code jiedata30= /音长代码0x04,0x04,0x08,0x06,0x02,0x08,0x04,0x04,0x04,0x04,0x02,0x06,0x08,0x02,0x02,0x04,0x04,0x04,0x04,0x08,0x02,0x02,0x04,0x04,0x02,0x02,0x04,0x04,0x0c,0x00;void timer0() interrupt 1 /用于产生音符的T0中断服务程序 TH0=th0_f; TL0=tl0_f; beep=beep; /取反beep引脚,发声void main(void) uchar i,j,k=0; uint n; TMOD=0X01; /T0方式1 TR0=0; /关闭T0(不发声) ET0=1; /允许T0中断 EA=1; /允许总中断 while(1) TR0=1; /开T0 for(i=0;diaodatai!=0;i+) th0_f=freqdiaodatai*2; tl0_f=freqdiaodatai*2+1; for(j=0;j20000;n+); /(jiedata*20000) TR0=0; for(n=0;n256;n+); /音符之间的短暂延时 TR0=1; TR0=0; C语言源代码/* 小波电子工作室 All rights reserved*/* 个人主页:/niejinbo*/* 文 件 名: lcd_0712_1.c */* 功能概要: LCD液晶显示时间 */* MCU: STC89C52 晶振:11.0592Mhz */* 设 计 者: 聂金波 */* 完成日期: 2008-07-12 */* 当前版本: 0712_2 */* 改进说明: 增加调时、报时、闹钟 */*头文件区*#include#include#include#include/*宏定义方便使用*#define uchar unsigned char#define uint unsigned int/*定义变量区*sbit dula=P26; /数码管段选sbit wela=P27; /数码管位选sbit lcden=P34; /LCD使能信号sbit lcdrs=P35; /LCD数据/命令选择信号/uchar code tab_nie=Nie Jinbo;uchar code tab_index=;/uchar tab_num=0,1,2,3,4,5,6,7,8,9;uchar tab_time=0,0,10,0,0,10,0,0; /装时间转换数据uchar code tab_char=0123456789:; /uchar code tab_chartime=Time ;uchar count,hour=22,minu=58,sec=26;/*函数声明区*void lcd_dis(); /lcd显示函数void lcd_init(); /LCD初始化函数void write_com(uchar); /写命令函数void write_data(uchar); /写数据函数void delay(uint); /延时函数void trans(); /时间转换函数void write_char(); /写字符串函数void int_time0(); /定时器0中断函数void time(); /计时函数/*主函数开始*void main()TMOD=0x01; /定时器0方式1EA=1;ET0=1;TH0=0xb8; /20ms初值,11.0592MHZTL0=0X00;TR0=1;write_com(1);lcd_init();while(1)time();trans();lcd_dis();void int_time0() interrupt 1TMOD=0x01; /定时器0方式1EA=1;ET0=1;TH0=0xb8;TL0=0X00; /20ms初值,11.0592MHZTR0=1;count+;void time()if(count=50) /20ms*50=1scount=0;sec+;if(sec=60)sec=0;minu+;if(minu=60)minu=0;hour+;if(hour=24)hour=0;/*时间转换函数开始*void trans()tab_time0=hour/10;tab_time1=hour%10;tab_time3=minu/10;tab_time4=minu%10;tab_time6=sec/10;tab_time7=sec%10;/*lcd显示函数开始*void lcd_dis()uchar m;write_com(0x80+1); /设置光标位置for(m=0;m5;m+) /显示Time write_data(tab_chartimem);delay(2);write_char(); /显示时间write_com(0x80+0x40); /设置光标位置为第二行for(m=0;m15;m+) /显示write_data(tab_indexm);delay(2);/*LCD初始化函数开始*void lcd_init()dula=0;wela=0; / 关闭数码管显示lcden=0;write_com(0x38); /设置显示模式:16X2,5X7,8位数据接口write_com(0x0c); /开显示,显示光标,光标闪烁write_com(0x06); /读写一个字符后,地址指针及光标加一,且光标加一整屏显示不移动write_com(0x80); /设置光标指针/*写字符串函数开始*void write_char()uchar n,a;for(n=0;n0;i-)for(j=110;j0;j-);Proteus 仿真图C语言源代码/=依次可以从键盘输入0-f,在1602LCD上显示出来(此程序在所买开发板上验证通过)/=/* 小波电子工作室 All rights reserved*/* 个人主页:/niejinbo */* 文 件 名: lcd_key.1.c */* 功能概要: 4*4矩阵键盘扫描 */* MCU: STC89C52 晶振:11.0592Mhz */* 设 计 者: 聂金波 */* 完成日期: 2008-07-14 */* 当前版本: 0714.1 */* 改进说明: 暂无 */* 补充说明: 从键盘输入0-F,在LCD上显示出来/*头文件区*#include#include#include#define uchar unsigned char#define uint unsigned int/*定义变量区*sbit dula=P26; /关闭数码管显示之用sbit wela=P27;sbit lcden=P34; /LCD使能信号sbit lcdrs=P35; /LCD数据/命令选择信号uchar tab_key50;uchar code tab=0123456789abcdef; uchar n=0,temp,key;/*函数声明区*void lcd_disp(); /LCD显示函数void lcd_init(); /LCD初始化函数void write_com(uchar); /写命令函数void write_data(uchar); /写数据函数void delay(uint); /延迟函数void key_scan(); /键盘扫描函数void key_manage1(); /键盘功能分配函数void key_manage2(); void key_manage3(); void key_manage4(); void key_manage5(); void key_manage6(); void key_manage7(); void key_manage8(); void key_manage9(); void key_manage10();void key_manage11(); void key_manage12(); void key_manage13(); void key_manage14(); void key_manage15(); void key_manage16();/*主函数开始*void main()lcd_init();write_com(1);while(1)key_scan();lcd_disp(); /*LCD显示函数开始*void lcd_disp()uchar a,i=0;write_com(0x80);for(i=0;i0;i-)for(j=50;j0;j-);/*键盘功能分配函数群开始*/ 键盘功能示意图/ 设计者:聂金波/* 1 * 2 * 3 * 4 * /* 5 * 6 * 7 * 8 */* 9 * 0 * s * c */* M1* M2* M3* M4* void key_manage1()tab_keyn=0;n+;void key_manage2()tab_keyn=1;n+;void key_manage3()tab_keyn=2;n+;void key_manage4()tab_keyn=3;n+;void key_manage5()tab_keyn=4;n+;void key_manage6()tab_keyn=5;n+;void key_manage7()tab_keyn=6;n+;void key_manage8()tab_keyn=7;n+;void key_manage9()tab_keyn=8;n+;void key_manage10()tab_keyn=9;n+;void key_manage11()tab_keyn=10;n+;void key_manage12()tab_keyn=11;n+;void key_manage13()tab_keyn=12;n+;void key_manage14()tab_keyn=13;n+;void key_manage15()tab_keyn=14;n+;void key_manage16()tab_keyn=15;n+;Proteus仿真图依次从键盘输入:abcd 277817639 (本人QQ号)4X4矩阵键盘-Proteus截图1. 按钮控制LED51单片机的Proteus实验 2. 流水灯51单片机的Proteus实验 3. 数码显示管51单片机的Proteus实验 4. 蜂鸣器51单片机的Proteus实验 5. 蜂鸣器演奏祝你平安51单片机的Proteus实验 6. 蜂鸣器演奏兰花草51单片机的Proteus实验 7. 蜂鸣器演奏老鼠爱大米51单片机的Proteus实验 8. ADC0808模数转换51单片机的Proteus实验 9. 开关控制流水灯251单片机的Proteus实验 10. 单片机数字钟C程序51单片机的Proteus实验1 2 11. 8951+1602显示字符51单片机的Proteus实验 12. LCD1602显示程序头文件51单片机的Proteus实验 13. 8951+1602数字钟51单片机的Proteus实验 14. 4X4矩阵键盘+160251单片机的Proteus实验 15. 8952+1602测单片机内部时钟频率51单片机的Proteus实验 LCD1602的显示程序作者:佚名 来源:不详 录入:Admin 更新时间:2008-7-27 16:06:42 点击数:2 【字体: 】#include#define uchar unsigned char#define uint unsigned intsbit LCM_RW=P15; /定义引脚sbit LCM_RS=P14;sbit LCM_E=P16;#define LCM_Data P0#define Busy 0x80 /用于检测LCM状态字中的Busy标识 void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void);void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void Delay5Ms(void);void Delay400Ms(void);unsigned char code cdle_net = ;unsigned char code email = ;void main(void)Delay400Ms(); /启动等待,等LCM讲入工作状态LCMInit(); /LCM初始化Delay5Ms(); /延时片刻(可不要)DisplayListChar(0, 0, cdle_net);DisplayListChar(0, 1, email);while(1);/写数据void WriteDataLCM(unsigned char WDLCM)ReadStatusLCM(); /检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; /若晶振速度太高可以在这后加小的延时LCM_E = 0; /延时LCM_E = 1;/写指令void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC为0时忽略忙检测if (BuysC) ReadStatusLCM(); /根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0; LCM_E = 0;LCM_E = 0;LCM_E = 1; /读数据unsigned char ReadDataLCM(void)LCM_RS = 1; LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;return(LCM_Data);/读状态unsigned char ReadStatusLCM(void)LCM_Data = 0xFF; LCM_RS=0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data & Busy); /检测忙信号return(LCM_Data);void LCMInit(void) /LCM初始化LCM_Data = 0;WriteCommandLCM(0x38,0); /三次显示模式设置,不检测忙信号Delay5Ms(); WriteComman

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论