??
#include "reg52.h" #define uchar unsigned char #define uint unsigned int
uint code tade[]={'0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};? uint code tade_x[]={'0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; uint code tade_s[]={'0','1','2','3','4','5','6','7','8','9'}; uint code tabe_r[]={'r','e','c','t'}; uint code tabe_c[]={'c','i','r','c','l','e'}; uchar code tabe_y_g[]={'g','r','e','e','n'}; uint code tabe_y_b[]={'b','l','u','e'}; uint code tabe_y_r[]={'r','e','d'}; uint code tabe_t[]={'t','r','i','a','n','g','l','e'}; uchar jieshou[9];
uchar xz,ys; uchar t; uchar i,z; uchar p=' '; int shou=0;
sbit EN=P2^7; //enable sbit RS=P2^6;//Command selection side sbit RW=P2^5;
void delay_2(uint z)//delay { ?? ?uint x,y; ?? ?for(x=z;x>0;x--) ?? ??? ?for(y=110;y>0;y--); }
void wite_c(uchar com) // wite order { ?? ?RS = 0; ?? ?RW = 0; ?? ?P0 = com; ?? ?delay_2(5); ?? ?EN = 1; ?? ?delay_2(5); ?? ?EN = 0; }
void wite_d(uchar date) //wite date { ?? ?RS = 1; ?? ?RW = 0; ?? ?P0 = date; ?? ?delay_2(5); ?? ?EN = 1; ?? ?delay_2(5); ?? ?EN = 0; }
void ?init1602() //1602 init { ?? ?EN = 0; ?? ?wite_c(0x38); ?? ?wite_c(0x0c); //?? ?wite_c(0x06); ?? ?wite_c(0x01);?? ? }
void show() { ?? ?wite_c(0x01);?? ? ?? ?switch(tade[(jieshou[0]&0X1F)]) ?? ?{ ?? ??? ?case 'R': ?? ??? ?wite_c(0x80); ?? ??? ?for(i=0;i<4;i++) ?? ??? ?{ ?? ??? ??? ?wite_d(tabe_r[i]); ?? ??? ??? ?jieshou[0]=' '; ?? ??? ?} ?? ??? ??? ? ? ? ? ?break; ?? ??? ?case 'C':?? ? ?? ??? ?wite_c(0x80); ?? ??? ?for(i=0;i<6;i++) ?? ??? ?{ ?? ??? ??? ?wite_d(tabe_c[i]); ?? ??? ??? ?jieshou[0]=' '; ?? ??? ?} ?? ??? ??? ? ? ? ? ?break; ?? ??? ?case 'T': ?? ??? ?wite_c(0x80); ?? ??? ?for(i=0;i<8;i++) ?? ??? ?{ ?? ??? ??? ?wite_d(tabe_t[i]); ?? ??? ??? ?jieshou[0]=' '; ?? ??? ?} ?? ??? ??? ? ? ? ? ?break; ?? ?} ?? ?switch(tade_x[(jieshou[1]&0X1F)]) ?? ?{ ?? ??? ?case 'r': ?? ??? ?wite_c(0x80+0x08); ?? ??? ??? ?for(i=0;i<3;i++) ?? ??? ?{ ?? ??? ?wite_d(tabe_y_r[i]); ?? ??? ??? ?jieshou[1]=' '; ?? ??? ?} ?? ??? ??? ? ? ? ? ?break; ?? ??? ?case 'g':ys=2; ?? ??? ?wite_c(0x80+0x08); ?? ??? ??? ?for(i=0;i<5;i++) ?? ??? ?{ ?? ??? ??? ?wite_d(tabe_y_g[i]); ?? ??? ??? ?jieshou[1]=' '; ?? ??? ??? ? ?? ??? ?} ?? ??? ??? ? ? ? ? ?break; ?? ??? ?case 'b':ys=3; ?? ??? ?wite_c(0x80+0x08); ?? ??? ??? ?for(i=0;i<4;i++) ?? ??? ?{ ?? ??? ?wite_d(tabe_y_b[i]); ?? ??? ??? ?jieshou[1]=' '; ?? ??? ?} ?? ??? ??? ? ? ? ? ?break; ?? ?} ? ?? ??? ?wite_c(0x80+0x40); ?? ?for(i=2;i<5;i++) ?? ?{ ?? ??? ?if(jieshou[i]<0x41) ?? ??? ?{ ?? ??? ??? ?wite_d(tade_s[(jieshou[i]&0X0F)]); ?? ??? ??? ?jieshou[i]=' '; ?? ??? ?} ?? ??? ?if(jieshou[i]>0x40&&jieshou[i]<0x60) ?? ??? ?{?? ? ?? ??? ??? ?wite_d(tade[(jieshou[i]&0X1F)]); ?? ??? ??? ?jieshou[i]=' '; ?? ??? ?} ?? ??? ?if(jieshou[i]>0x60) ?? ??? ?{?? ? ?? ??? ??? ?wite_d(tade_x[(jieshou[i]&0X1F)]); ?? ??? ??? ?jieshou[i]=' '; ?? ??? ?} ?? ?} ?? ?wite_c(0x80+0x40+0x04); ?? ?for(i=5;i<9;i++) ?? ?{ ?? ??? ?if(jieshou[i]<0x41) ?? ??? ?{ ?? ??? ??? ?wite_d(tade_s[(jieshou[i]&0X0F)]); ?? ??? ??? ?jieshou[i]=' '; ?? ??? ?} ?? ??? ?if(jieshou[i]>0x40&&jieshou[i]<0x60) ?? ??? ?{?? ? ?? ??? ??? ?wite_d(tade[(jieshou[i]&0X1F)]); ?? ??? ??? ?jieshou[i]=' '; ?? ??? ?} ?? ??? ?if(jieshou[i]>0x60) ?? ??? ?{?? ? ?? ??? ??? ?wite_d(tade_x[(jieshou[i]&0X1F)]); ?? ??? ??? ?jieshou[i]=' '; ?? ??? ?} ?? ?} ?? ?wite_c(0x80+0X40+0x08);?? ? ?? ??? ?wite_d('c'); ?? ?wite_c(0x80+0X40+0x09);?? ? ?? ??? ?wite_d('m'); ?? ?t = 0; ?? ?shou = 0; } //串口&定时器初始化 void init(void)?? ??? ?//9600bps@11.0592MHz { ?? ?SCON = 0x50;?? ??? ?//串口初始化 ?? ?TMOD = 0x20; ?? ?TH1 ?= 0xFD; ?? ?TL1 ?= 0xFD; ?? ?TR1 ?= 1; ?? ?ES ? = 1; ?? ?EA ? = 1; }
void send(void) {?? ?uint wei_fa=0; ?? ?for(wei_fa = 0; wei_fa<9; wei_fa++) ?? ?{ ?? ??? ?SBUF = jieshou[wei_fa]; ?? ??? ?while(!TI);?? ??? ?//等待是否发送完毕 ?? ??? ?TI = 0; ?? ?} }
void main(void) { ?? ?t=0; ?? ?init1602(); ?? ?init(); ?? ?while(1) ?? ?{ ?? ??? ?if(t==1) ?? ??? ?{ ? ?show(); ?? ??? ?} ?}? }
void interrupt_uart() interrupt 4 { ?? ?if(RI) ?? ?{ ?? ??? ?RI = 0; ?? ??? ?jieshou[shou++] = SBUF; ?? ??? ?t=1; ?? ??? ?if(shou >=9) ?? ??? ?{ ?? ??? ??? ?shou = 0; ?? ??? ??? ?send(); ?? ??? ?} ?? ?}?? ? }
? 由于时间比较仓促所以程序有写的有点乱。51单片机接收ASCII时会把ASCII转换成相应的十进制和十六进制数字代码,所以要写一个相应的库,通过转换ASCII码的数字代码使其对应相应的字符实现在1602上的显示.还有要注意在与电脑和open MV通信时要注意波特率。
|