⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 这是一个关与LCD在嵌入式系统中应用的实例和程序
💻 LST
字号:
C51 COMPILER V6.12  MAIN                                                                   02/27/2006 18:42:08 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //汉显液晶模块HZ132-64演示程序
   2          //该模块是一款使用简便,功能多样的汉显模块!
   3          //模块的资料请到 http://www.laogu.com/product/wwwlcm/index.htm 查看
   4          //本例仅用了简单的送数据到串口的方法就实现了文字的任意位置显示,作图,显示图片,t9兼容输入法等操作
   5          //本例程由'51单片机世界http://www.mcu51.com'的版主丁丁编写,Email:mcu52@163.com
   6          //2002年11月24日调试成功
   7          
   8          #define  uchar  unsigned char
   9          #define  uint   unsigned int
  10          #define  ulong   unsigned long
  11          
  12          extern char getbyte(void);				//从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
  13          extern putbyte(char c);					//放入一个字节到发送缓冲区
  14          extern putstring(uchar  *puts);			//发送一个定义在程序存储区的字符串到串口
  15          extern putbytes(uchar *outplace,uint j);//放一串数据到发送缓冲区,需要定义发送的字节数
  16          extern puthex(uchar c);					//发送一个字节的hex码,分成两个字节发。
  17          extern  bit   inbufsign;				//串口接收到数据标志
  18          #define CR putstring("\r\n")			//发送一个回车换行
  19          extern void serial_init (void);    		//串口初始化
  20          
  21          //灰度
  22          void lcd_light(uchar ch)
  23          {
  24   1      	while(inbufsign)getbyte();
  25   1      	if(ch>0x3f) 
  26   1      		return;
  27   1      	putbyte(0x1b);
  28   1      	putbyte(0x31);
  29   1      	putbyte(ch);
  30   1      	getbyte();getbyte();
  31   1      }
  32          
  33          //清屏
  34          void lcd_cls(void)
  35          {
  36   1      	while(inbufsign)getbyte();
  37   1      	putbyte(0x1b);
  38   1      	putbyte(0x32);
  39   1      	getbyte();getbyte();
  40   1      
  41   1      }
  42          
  43          // 设置光标位置
  44          void lcd_cursor(uchar x, uchar y)      
  45          {
  46   1      	while(inbufsign)getbyte();
  47   1      	putbyte(0x1b);
  48   1      	putbyte(0x33);
  49   1      	putbyte(x);
  50   1      	putbyte(y);
  51   1      	getbyte();getbyte();
  52   1      
  53   1      }
  54          
  55          //闪烁还是关闭光标
C51 COMPILER V6.12  MAIN                                                                   02/27/2006 18:42:08 PAGE 2   

  56          void lcd_showcursor(uchar attr)   
  57          {
  58   1      	while(inbufsign)getbyte();
  59   1      	putbyte(0x1b);
  60   1      	putbyte(0x34);
  61   1      	putbyte(attr);
  62   1      	getbyte();getbyte();
  63   1      
  64   1      }
  65          
  66          //显示字符串
  67          void lcd_string(uchar attr,uchar *string) 
  68          {
  69   1      	while(inbufsign)getbyte();
  70   1      	putbyte(0x1b);
  71   1      	putbyte(0x37);
  72   1      	putbyte(attr);	
  73   1      	putstring(string);
  74   1      	putbyte(0x00);
  75   1      	getbyte();getbyte();
  76   1      
  77   1      }
  78          
  79          //画点
  80          void lcd_dot(uchar attr,uchar x,uchar y)  
  81          {
  82   1      	while(inbufsign)getbyte();
  83   1      	putbyte(0x1b);
  84   1      	putbyte(0x38);
  85   1      	putbyte(attr);
  86   1      	putbyte(x);
  87   1      	putbyte(y);
  88   1      	getbyte();getbyte();
  89   1      
  90   1      }
  91          
  92          //画线
  93          void lcd_line(uchar attr,uchar x0,uchar y0,uchar x1,uchar y1)
  94          {
  95   1      	while(inbufsign)getbyte();
  96   1      	putbyte(0x1b);
  97   1      	putbyte(0x39);
  98   1      	putbyte(attr);
  99   1      	putbyte(x0);
 100   1      	putbyte(y0);
 101   1      	putbyte(x1);
 102   1      	putbyte(y1);
 103   1      	getbyte();getbyte();
 104   1      		
 105   1      }
 106          
 107          //画圆
 108          void lcd_circle(uchar attr,uchar ox,uchar oy,uchar rx)
 109          {
 110   1      	while(inbufsign)getbyte();
 111   1      	putbyte(0x1b);
 112   1      	putbyte(0x41);
 113   1      	putbyte(attr);
 114   1      	putbyte(ox);
 115   1      	putbyte(oy);
 116   1      	putbyte(rx);
 117   1      	getbyte();getbyte();
C51 COMPILER V6.12  MAIN                                                                   02/27/2006 18:42:08 PAGE 3   

 118   1      
 119   1      }
 120          
 121          // 画图片,*picture_data指向图片数据,图片数据的第一二个字节是图片宽度和图片高度
 122          void lcd_picture(uchar attr,uchar x0,uchar y0,uchar *picture_data)
 123          {
 124   1      	putbyte(0x1b);
 125   1      	putbyte(0x42);
 126   1      	putbyte(attr);
 127   1      	putbyte(x0);
 128   1      	putbyte(y0);
 129   1      	putbytes(picture_data,(((*picture_data)+7)/8)*(*(picture_data+1))+2);
 130   1      	getbyte();getbyte();
 131   1      		
 132   1      }
 133          
 134          //画ICON
 135          void lcd_icon(uchar attr,uchar ch)
 136          {
 137   1      	while(inbufsign)getbyte();
 138   1      	putbyte(0x1b);
 139   1      	putbyte(0x43);
 140   1      	putbyte(attr);
 141   1      	putbyte(ch);
 142   1      	getbyte();getbyte();
 143   1      
 144   1      }
 145          
 146          
 147          //取数字组合的有效拼音组合,
 148          //*num指向输入的数字,
 149          //返回的有效拼音组合放在pinyin[6][8]
 150          //函数返回返回有效拼音的个数
 151          uchar lcd_num2pinyin(uchar *num, uchar pinyin[6][8])
 152          {
 153   1      	ulong n=0;//超时用
 154   1      	uchar m,i,j,ch;
 155   1      	while(inbufsign)getbyte();	//清空串口缓冲区
 156   1      	putbyte(0x1b);
 157   1      	putbyte(0x47);
 158   1      	putstring(num);
 159   1      	putbyte(0x00);
 160   1      	while(1)
 161   1      	{
 162   2      		if(inbufsign)//串口接收到了数据
 163   2      		{
 164   3      			if(getbyte()==0x1b)
 165   3      			{
 166   4      				m=getbyte();//查到的总条数
 167   4      				for(i=0;i<m;i++)
 168   4      				{
 169   5      					
 170   5      					for(j=0;;j++)
 171   5      					{
 172   6      						ch=getbyte();
 173   6      						pinyin[i][j]=ch;
 174   6      						if(ch==0)break;
 175   6      					}
 176   5      				}
 177   4      				getbyte();getbyte();
 178   4      
 179   4      				return(m);
C51 COMPILER V6.12  MAIN                                                                   02/27/2006 18:42:08 PAGE 4   

 180   4      			}
 181   3      		}
 182   2      		n++; //超时计时加一
 183   2      		if(n>100000)return(0x00);//超时返回0
 184   2      	}
 185   1      
 186   1      }
 187          
 188          //取符合拼音字符串的10个汉字,page是取第几页
 189          //返回的汉字串在hz[21];
 190          void lcd_pinyin2hz(uchar page, uchar *pinyin,uchar *hz)
 191          {
 192   1      	uchar i,ch;
 193   1      	ulong n=0;
 194   1      	while(inbufsign)getbyte(); //清空串口缓冲区
 195   1      	putbyte(0x1b);
 196   1      	putbyte(0x48);
 197   1      	putbyte(10);//在这里修改你需要返回几个汉字
 198   1      	putbyte(page);
 199   1      	putstring(pinyin);
 200   1      	putbyte(0x00);	
 201   1      	while(1)
 202   1      	{
 203   2      		if(inbufsign)//串口接收到了数据
 204   2      		{
 205   3      			if(getbyte()==0x1b)
 206   3      			{
 207   4      				for(i=0;;i++)
 208   4      				{
 209   5      					ch=getbyte();
 210   5      					*(hz+i)=ch;
 211   5      					if(ch==0)break;			
 212   5      				}
 213   4      				getbyte();getbyte();
 214   4      
 215   4      				return;
 216   4      			}
 217   3      			
 218   3      		}
 219   2      		n++; //超时计时加一
 220   2      		if(n>100000) 
 221   2      			return;//超时返回
 222   2      	}
 223   1      			
 224   1      }
 225          
 226          void delay(void)
 227          {
 228   1      	ulong n;
 229   1      	uchar i;
 230   1      	//for(i=0;i<2;i++)
 231   1      		for(n=0;n<60000;n++);
 232   1      }
*** WARNING C280 IN LINE 229 OF .\MAIN.C: 'i': unreferenced local variable
 233          
 234          //定义一个图片
 235          uchar code pic[]={
 236          0x48, 0x1c, //这两个字节是图形块的长和宽,下面的才是图形数据
 237          0x00, 0x4E, 0x20, 0x00, 0x00, 0xF0, 0x40, 0x00, 0x00, 0x00, 0x7B, 0xE0, 0x01, 0x01, 0xF8, 0xC0, 
 238          0x00, 0x00, 0x01, 0xFF, 0x7C, 0xFF, 0xF1, 0xFD, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC6, 0xFF, 0xC1, 
 239          0x9F, 0xC3, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0xFF, 0xF3, 0x0F, 0xBF, 0xC0, 0x00, 0x00, 0x7F, 0xE6, 
 240          0x1F, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x77, 0xFC, 0x07, 0xE7, 0x07, 0xFF, 0xC0, 0x00, 0x00, 
C51 COMPILER V6.12  MAIN                                                                   02/27/2006 18:42:08 PAGE 5   

 241          0x77, 0xFB, 0x07, 0xFB, 0x87, 0xBF, 0x00, 0x00, 0x00, 0x67, 0xFF, 0xF7, 0xA7, 0x7E, 0x00, 0x00, 
 242          0x00, 0x00, 0x67, 0xFF, 0xF7, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x67, 0xFF, 0xEF, 0xE1, 0xFF, 
 243          0x98, 0x00, 0x00, 0x00, 0x63, 0xFF, 0xEF, 0xFF, 0xFF, 0xB8, 0x00, 0x44, 0x00, 0x03, 0xFF, 0xEF, 
 244          0xFF, 0xFF, 0xFC, 0x08, 0xC6, 0x04, 0x01, 0xFF, 0xEF, 0xFF, 0xFF, 0xF4, 0x04, 0x8E, 0x0C, 0x43, 
 245          0xFE, 0x6F, 0xFF, 0xFF, 0xE6, 0x05, 0x9F, 0x98, 0x43, 0xFF, 0x8F, 0xFF, 0xFB, 0xC3, 0xC7, 0x9F, 
 246          0x99, 0xE7, 0x7F, 0xFF, 0xFF, 0xFD, 0xC1, 0xE7, 0xFF, 0xD9, 0xE6, 0xFD, 0xFF, 0xFF, 0xDF, 0xF0, 
 247          0x0F, 0xFF, 0xFF, 0xA7, 0xE1, 0x9F, 0xFF, 0x0F, 0xF8, 0x5B, 0xFF, 0xEE, 0x8F, 0x81, 0x87, 0xE0, 
 248          0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0x01, 0x8F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3C, 0x01, 
 249          0x9E, 0xF3, 0xC4, 0x15, 0xE2, 0x08, 0x00, 0xF8, 0x00, 0xF8, 0x91, 0x24, 0xFC, 0x02, 0x08, 0x03, 
 250          0x98, 0x00, 0xE0, 0x93, 0xD4, 0x90, 0x77, 0x88, 0x7E, 0x30, 0x01, 0x80, 0xF8, 0x94, 0xEA, 0x22, 
 251          0x88, 0x38, 0x30, 0x07, 0x00, 0x0B, 0xD4, 0xAC, 0x2A, 0x80, 0x00, 0x60, 0x3C, 0x01, 0xE8, 0x84, 
 252          0xAC, 0x36, 0x88, 0x00, 0x40, 0x38, 0x00, 0x1B, 0xED, 0x76, 0x6D, 0x80
 253          };
 254          
 255          void main(void)
 256          {
 257   1      	char i,j;
 258   1      	uint n;
 259   1      	uchar code string_num[]="7426";
 260   1      
 261   1      	uchar pinyin_buf[6][8];
 262   1      	serial_init();
 263   1      	for(n=0;n<60000;n++);
 264   1      
 265   1      
 266   1      	while(1)
 267   1      	{
 268   2      
 269   2      		lcd_cls();
 270   2      		lcd_string(0,"您好!欢迎使用汉显液晶模块!");
 271   2      		delay();
 272   2      
 273   2      		lcd_string(1,"反显效果");
 274   2      		delay();
 275   2      
 276   2      		lcd_cls();
 277   2      		lcd_string(0,"现在打开光标闪烁:");
 278   2      		lcd_showcursor(0x01);
 279   2      		delay();
 280   2      
 281   2      		lcd_cls();
 282   2      		lcd_string(0,"现在将光标移到(8,3)位置:");
 283   2      		lcd_cursor(8, 3);
 284   2      		delay();
 285   2      
 286   2      		lcd_string(0,"您好!");
 287   2      		delay();
 288   2      
 289   2      		lcd_cls();
 290   2      		lcd_string(0,"现在关闭光标闪烁:");
 291   2      		lcd_showcursor(0x00);
 292   2      		delay();
 293   2      
 294   2      		lcd_cls();
 295   2      		lcd_string(0,"在(20,40)位置画一个点:");
 296   2      		lcd_dot(1,20,40); 
 297   2      		delay();
 298   2      
 299   2      		lcd_cursor(0, 0);
 300   2      		lcd_string(0,"再以直径为15画一个圆: ");
 301   2      		lcd_circle(1,20,40,15);
 302   2      		delay();
C51 COMPILER V6.12  MAIN                                                                   02/27/2006 18:42:08 PAGE 6   

 303   2      
 304   2      		lcd_cursor(0, 0);
 305   2      		lcd_string(0,"再画两条线,一条实线,一条虚线:");
 306   2      		lcd_line(1,10,5,100,60);
 307   2      		lcd_line(2,10,55,100,10);
 308   2      		delay();
 309   2      
 310   2      		lcd_cls();
 311   2      		lcd_string(0,"画一个图片'马到成功'");
 312   2      		lcd_picture(0,30,20,pic);
 313   2      		delay();
 314   2      
 315   2      		lcd_cls();
 316   2      		lcd_string(0,"现在取'7426'的拼音串");
 317   2      		while(inbufsign) getbyte();	//清空接收缓冲区
 318   2      		lcd_string(0,"返回的结果:");
 319   2      		j=lcd_num2pinyin(string_num, pinyin_buf);
 320   2      
 321   2      		lcd_cursor(0, 3);
 322   2      		for(i=0;i<j;i++)
 323   2      		{
 324   3      			if(i==0) lcd_string(1,pinyin_buf[i]);//默认反显第一个拼音
 325   3      			else lcd_string(0,pinyin_buf[i]);
 326   3      			lcd_string(0," ");
 327   3      		}
 328   2      		delay();
 329   2      
 330   2      		lcd_cls();
 331   2      		lcd_cursor(0, 0);
 332   2      		lcd_string(0,"反显第二个拼音:");//比如通过按键选到了第二个	
 333   2      		lcd_cursor(0, 3);
 334   2      		for(i=0;i<j;i++)
 335   2      		{
 336   3      			if(i==1) lcd_string(1,pinyin_buf[i]);//反显第一个拼音
 337   3      			else lcd_string(0,pinyin_buf[i]);
 338   3      			lcd_string(0," ");
 339   3      		}
 340   2      		delay();
 341   2      
 342   2      		lcd_cls();
 343   2      		lcd_string(0,"取这个拼音的汉字串:\r\n");
 344   2      		
 345   2      		while(inbufsign) getbyte();	//清空接收缓冲区
 346   2      		lcd_pinyin2hz(1, pinyin_buf[1],pinyin_buf);//借用拼音的缓冲区pinyin_buf放汉字串,以节省内存
*** WARNING C182 IN LINE 346 OF .\MAIN.C: pointer to different objects
 347   2      		lcd_cursor(0, 4);
 348   2      		lcd_string(0,pinyin_buf[0]);
 349   2      		delay();delay();delay();
 350   2      	}
 351   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1404    ----
   CONSTANT SIZE    =    546    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----     111
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  2 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -