|
本文章转载自笨笨工作室 bbmcu.com
注意,本程序是针对网助2号开发板的测试程序,只需要简单修改端口即可用在你的板子上,本程序包括二个C文件,依次是: (1)yejing.c (2)lcd.c 下面是各个程序内容: (1)yejing.c #include <reg52.h> #include <intrins.h>
#define uchar unsigned char #define ulong unsigned long #define uint unsigned int
#define REFRESH_YES 0x25 #define REFRESH_NO 0x52 #define WirlessbufLen 8 #define LCDCNT 0x04
uchar jiffies; //系统时钟 uchar KeyProcessnum; sbit LED1 = P1^1; sbit LED2 = P1^2;
//////////////////////////////////////////////////////////////////////// //LCD显示用到的三个变量: //////////////////////////////////////////////////////////////////////// extern uchar lcdcodedsp[LCDCNT]; //显示存储数组 extern uchar lcdrefresh; //是否需要刷新 extern uchar lcdsplycnt; //指示显示存储数组循环指 extern bit bScanKey; // 定时扫描标志位
extern void InitLcd(); //LCD显示初始化(00.00) extern void lcddisply(); //LCD显示四个字节 extern void wcom(uchar);//命令,可以定点光标位置,范围80~87,90~97 extern void wdat(uchar);//当前位置显示一个字符 extern void ShowMessage(uchar ,uchar ,uchar);//指定位置显示一串字符
void clock_init(void) { jiffies = 0; TMOD=0x02; TH0=TL0=0xa3; EA=1; ET0=1; TR0=1; }
sys_init() { InitLcd(); clock_init(); }
void clock_timer(void) interrupt 1 using 1 { jiffies++; }
#define SCMD_READ_IIC 0x41 #define SCMD_WRITE_IIC 0x42
#define SCMD_SET_PORT 0x51 #define SCMD_GET_PORT 0x52
#define SCMD_RESET 0x61
#define SCMD_LCD_OUTNUM 0x70 #define SCMD_LCD_OUTNUM1 0x71 #define SCMD_LCD_OUTCHU 0x72 #define SCMD_LCD_OUTHEX 0x73 #define SCMD_LCD_RESET 0x74 #define SCMD_LCD_TEST 0x75 #define SCMD_LCD_CLEAR 0x76
unsigned int last1_jiffies=0; unsigned int last2_jiffies=10;
void main() { sys_init(); LED1 = 0; LED2 = 1; while(1) { if (jiffies - last1_jiffies >= 20) //每次中断为50us,所以要20次才为1ms { last1_jiffies = jiffies; if (last2_jiffies) last2_jiffies--; } } }
(2)lcd.c
#include <reg52.h> #include <intrins.h>
#define uchar unsigned char #define ulong unsigned long #define uint unsigned int
/*12232f 管脚定义e*/ sbit sclk=P1^4; sbit sid=P1^5; sbit cs=P1^6;
//////////////////////////////////////////////////////////////////////// //LCD显示用到的三个变量: //////////////////////////////////////////////////////////////////////// uchar lcdrefresh; //是否需要刷新 //uchar lcdcodedsp[4]; //显示存储数组 uchar lcdsplycnt; //指示显示存储数组循环指 /////////////////////////////////////////////////////////////////////// uchar bdata stu; sbit stu7=stu^7; sbit stu0=stu^0;
//----------------忙检测---------------------- void check() { uchar i; do { cs=1; sid=1; for(i=0;i<8;i++) { sclk=0; if(i<6)sid=1; else sid=0; sclk=1; } for(i=0;i<16;i++) { sclk=0; sclk=1; if(i<=3||(i>=8&&i<=11)) { stu<<=1; stu0=sid; } } cs=0; }while(stu7==1); } //-----Z-------------------------------------- void wcom(uchar x) { uchar i=0; check(); cs=1; for(i=0;i<8;i++) { if(i<5)sid=1; else sid=0; sclk=0; sclk=1; } for(i=0;i<16;i++) { if(i<4||(i>=8&&i<=11)) { x<<=1; sid=CY; } else sid=0; sclk=0; sclk=1; } cs=0; } //**************************************** void wdat(uchar x) { uchar i=0; stu=x; check(); cs=1; for(i=0;i<8;i++) { if(i<5||i==6)sid=1; else sid=0; sclk=0; sclk=1; } for(i=0;i<16;i++) { if(i<4||(i>=8&&i<=11)) { x<<=1; sid=CY; } else sid=0; sclk=0; sclk=1; } cs=0; } void ShowMessage(uchar addr,uchar num,uchar *ptr) { uchar i; wcom(addr); for (i=0;i<num;i++) wdat(ptr[i]); } /*----------------------------------------------------------------------------- ----------------------------------------------------------------------初始化*/ void InitLcd() { wcom(0X30); wcom(0X3C); wcom(0X38); wcom(0X01); wcom(0X80); check(); lcdsplycnt=0; ShowMessage(0x80,13,"你好,小笨笨:"); ShowMessage(0x90,15,"网助计划欢迎您!"); } /*----------------------------------------------------------------------------- ----------------------------------------------------------------------初始化*/ |